美文网首页
学而用之_函数篇

学而用之_函数篇

作者: qjh_py | 来源:发表于2020-04-25 14:31 被阅读0次

    目录

    1. 判断给定年份是否为闰年
    2. 设计一个验证用户密码程序
    3. for循环嵌套运用
    4. 一个密码安全性检查的脚本代码
    5. 一个简陋的通讯录程序(字典的运用)
    6. 一个简陋的用户登录程序(函数基本运用)
    7. 三个小递归
    8. 函数不定长参数的运用

    1. 判断给定年份是否为闰年

    # 判断给定年份是否为闰年
    print(' 请输入一个年份,我可以判断它是否为闰年:',end = " ")
    temp = input()
    while not temp.isdigit():
        temp = input(" 抱歉,您的输入有误,请输入一个整数: ") 
    year = int(temp)
    if year%400 == 0:
        print(temp+' 是闰年。')
    elif year%4 == 0 and year%100 != 0:
        print(temp+' 是闰年。')
    else:
        print(temp+' 不是闰年。')
    # 请输入一个年份,我可以判断它是否为闰年: 2020
    # 2020 是闰年。
    

    2. 设计一个验证用户密码程序

    # 设计一个验证用户密码程序,用户只有三次机会输入错误,
    # 不过如果用户输入的内容中包含 "*" 则不计算在内
    password = '2a'
    print('请输入密码:',end = ' ')
    count = 3
    while count:
        temp = input()
        if temp == password:
            print('验证通过.')
            break
        elif '*' in temp:
            print('请不要输入包含''*''的内容,您还有',count,'次机会,请重新输入:',end = ' ')
            continue
        else:
            print('输入错误,您还有',count-1,'次机会,请重新输入:',end = ' ')
        count -=1
    

    3. for循环嵌套运用

    # 有红、黄、蓝三种颜色的球,其中红球 3 个,黄球 3 个,蓝球 6 个。
    # 先将这12 个球混合放在一个盒子中,从中任意摸出 8 个球,编程计算摸出球的各种颜色搭配
    print('red','\t','yellow','','blue')
    for red in range(0,4):
        for yellow in range(0,4):
            for blue in range(2,7):
                if red+yellow+blue == 8:
                    print(red,'\t',yellow,'\t',blue)
    

    4. 一个密码安全性检查的脚本代码

    #请写一个密码安全性检查的脚本代码:
    symbols = r'''`!@#$%^&*()_+-=/*{}[]\|'";:/?,.<>''' 
    chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' 
    nums = '0123456789' 
    
    passwd = input(' 请输入需要检查的密码组合: ') 
    
    # 判断长度
    length = len(passwd) 
    
    while (passwd.isspace() or length == 0) : 
        passwd = input(" 您输入的密码为空(或空格),请重新输入: ") 
    
    if length <= 8: 
        flag_len = 1 
    elif 8 < length < 16: 
        flag_len = 2 
    else: 
        flag_len = 3 
    
    flag_con = 0 
    
    # 判断是否包含特殊字符
    for each in passwd: 
        if each in symbols: 
            flag_con += 1 
            break 
    
    # 判断是否包含字母
    for each in passwd: 
        if each in chars: 
            flag_con += 1 
            break 
    
    # 判断是否包含数字
    for each in passwd: 
        if each in nums: 
            flag_con += 1 
            break  
    
    # 打印结果
    while 1 : 
        print(" 您的密码安全级别评定为: ", end='') 
        if flag_len == 1 or flag_con == 1 : 
            print(" 低") 
        elif flag_len == 2 or flag_con == 2 : 
            print(" 中") 
        else : 
            print(" 高") 
            print(" 请继续保持 ") 
            break 
    
        print(" 请按以下方式提升您的密码安全级别: \n\
        \t1. 密码必须由数字、字母及特殊字符三种组合 \n\
        \t2. 密码只能由字母开头 \n\
        \t3. 密码长度不能低于 16 位") 
        break
    

    5. 一个简陋的通讯录程序(字典的运用)

    #一个简陋的通讯录程序
    print('''欢迎进入通讯录程序
    1 :查询联系人资料
    2 :插入新的联系人
    3 :删除已有联系人
    4 :退出通讯录程序''')
    dict1 = {'华': 2247829280,'夏天': 877169862}
    
    while 1:
        temp = int(input('请输入相关的指令代码:'))
        
        if temp == 1:
            name = input('请输入联系人姓名:')
            if name not in dict1:
                print('抱歉,您输入的联系人不存在。',end = '')
                yn_2 = input('请问您是否要将其添加到通信录?(YES/NO)')
                if yn_2 == 'YES':
                    temp = 2
                else:
                    continue
            else:
                print(name ,':',dict1[name])
        if temp == 2:
            name = input('请输入联系人姓名:')
            if name in dict1:
                print('您输入的姓名已在通讯录中-->>',name ,':',dict1[name])
                yn = input('是否修改用户资料?(YES/NO)')
                if yn == 'YES':
    #                 向字典中添加键值对的一种方法
                    dict1[name] = input('请输入联系人新的电话:')
                else:
                    continue
                dict1[name] = input('请输入联系人电话:')
        if temp == 3:
            name = input('请输入需要删除的联系人姓名:')
            if name not in dict1.keys():
                print('您输入的姓名不在通讯录中')
                continue
            dict1.pop(name)
        if temp == 4:
            print('感谢使用通讯录程序!')
            break
    

    6. 一个简陋的用户登录程序(函数基本运用)

    #一个简陋的用户登录程序函数
    def showmenu():
        # 界面
        print('''新建用户:N/n
    登陆账号:E/e
    退出程序Q/q''')
        # 初始值
        dict2 = {}
    
        # 循环初始化instr的值
        while True:
            # 不能为空
            instr = ' '
            # 使用户输入正确指令代码
            while instr not in 'NEQneq':
                instr = input('请输入指令代码:')
    
            # 三个功能
            if instr in 'Qq':
                break
            if instr in 'Nn':
                new_user(instr,dict2)
            if instr in 'Ee':
                old_user(instr,dict2)
    
    # 新建            
    def new_user(instr,dict2):
        name = input('请输入用户名:')
    
        # 输入是否为已有用户名            
        while name in dict2:
            name = input('抱歉,此用户名已经被使用,请重新输入:')
    
        dict2[name] = input('请输入密码:')
        print('注册成功,赶紧试试登录吧')
            
    # 是否登录 
    def old_user(instr,dict2):
        name = input('请输入用户名:')
                    
        # 要登陆的用户的用户名是否存在
        while name  not in dict2:
            name = input('您输入的用户名不存在,请重新输入:')
                        
        # 输入的密码是否正确且只有三次机会
        count = 3
        while input('请输入密码(三次机会):') != dict2.get(name):
            print('密码输入错误!')
            count -= 1
            if count == 0:
                print('抱歉,您的三次机会已用完。')                        
                # 跳出输入密码循环体
                break
        else:
            print('欢迎进入XO系统……')
    

    7. 递归

    7.1 求最大公约数

    # 求最大公约数
    def gcd0(a,b):
        '''递归'''
        t = a % b
        a = b
        b = t
        if b != 0:
            gcd1(a,b)
            return a
    
    def gcd1(a,b):
        '''循环'''
        while b:
            t = a % b
            a = b
            b = t
            return a
    print(gcd0(4,6))
    print(gcd1(4,6))
    

    7.2 编写一个将十进制转换为二进制的函数

    • 编写一个将十进制转换为二进制的函数,要求采用“除 2 取余”的方式且以字符串的形式返回
    # 编写一个将十进制转换为二进制的函数,要求采用“除 2 取余”的方式且以字符串的形式返回
    def Dec2Bin0(dec): 
        temp = []
        result = ''
    
        while dec:
            quo = dec % 2
            dec = dec // 2
            temp.append(quo)
    
        while temp:
            result += str(temp.pop())
    
        return result
    print(Dec2Bin0(7))
    # 递归
    def Dec2Bin1(dec):
        result = ''
    
        if dec:
    
            result = Dec2Bin1(dec//2)
    
            return result + str(dec%2)
        else:
            return result
    print (Dec2Bin1(8))
    

    7.3 回文联

    • 判断传入的字符串参数是否为“回文联”
    # 方法一,用循环
    def huiwen(str1):
        l = len(str1)
        i = 0
        while l//2 != i:
            if str1[i] == str1[l-i-1]:
                i += 1     
            else:
                print('不是回文联!')
                break
        if i == l//2:
            print('是回文联!')
    str2 = input('请输入一句话:')
    # huiwen(str2)
    
    # 方法二,用reversed
    def huiwen2(string):
        list1 = reversed(string)
        if list(list1) == list(string):
            print('是回文联!')
        else:
            print('不是回文联!')
     # huiwen2('上海海上')
    
    # 方法三,递归
    def fn2(s):
    
        # 参数s就是要检查的字符串
    
        # 1.基线条件
        # 字符串的长度小于2 则字符串一定是个回文
        if len(s)<2:
            return True
        # # 第一个字符和最后一个字符不相同,则一定不是回文字符串
        # elif s[0] != s[-1]:
        #     return False
        # 2.递归条件
        return s[0] == s[-1] and fn2(s[1:-1])
    
    1. 函数不定长参数的运用
    # 编写一个函数,分别统计出传入字符串参数(可能不只-个参数)的英文字母、空格、数字和其它字符的个数。
    def tongji(*string):
        chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' 
        nums = '0123456789'
        length = len(string)
        for a in range(length):
            i = 0
            j = 0
            k = 0
            l =0
            for each in string[a]:
                if each in nums:
                    i += 1
                elif each in chars:
                    j += 1
                elif each in ' ':
                    k += 1
                else:
                    l += 1
            print('第%d个字符串的英文字母,空格,数字,其他字符分别有%d%d%d%d个'%(a+1,j,k,i,l))
    tongji('abc','   ','123','[)]')
    

    相关文章

      网友评论

          本文标题:学而用之_函数篇

          本文链接:https://www.haomeiwen.com/subject/erxkwhtx.html