• Python练习_初识函数_day9


    1.

    1.作业

    1,写函数,检查获取传入列表或元组对象的所有奇数位索引对应的元素,并将其作为新列表返回给调用者。
    
    2,写函数,判断用户传入的对象(字符串、列表、元组)长度是否大于5。
    
    3,写函数,检查传入列表的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。
    
    4,写函数,计算传入函数的字符串中,[数字]、[字母]、[空格] 以及 [其他]的个数,并返回结果。
    
    5,写函数,接收两个数字参数,返回比较大的那个数字。
    
    6,写函数,检查传入字典的每一个value的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。
        dic = {"k1": "v1v1", "k2": [11,22,33,44]}
        PS:字典中的value只能是字符串或列表
    
    7,写函数,此函数只接收一个参数且此参数必须是列表数据类型,此函数完成的功能是返回给调用者一个字典,此字典的键值对为此列表的索引及对应的元素。例如传入的列表为:[11,22,33] 返回的字典为 {0:11,1:22,2:33}。
    
    8,写函数,函数接收四个参数分别是:姓名,性别,年龄,学历。用户通过输入这四个内容,然后将这四个内容传入到函数中,此函数接收到这四个内容,将内容追加到一个student_msg文件中。
    
    9,对第9题升级:支持用户持续输入,Q或者q退出,性别默认为男,如果遇到女学生,则把性别输入女。
    
    10,写函数,用户传入修改的文件名,与要修改的内容,执行函数,完成整个文件的批量修改操作(升级题)。
    11,写一个函数完成三次登陆功能:(升级题,两天做完)
    (1)用户的用户名密码从一个文件register中取出。
    (2)register文件包含多个用户名,密码,用户名密码通过|隔开,每个人的用户名密码占用文件中一行。
    (3)完成三次验证,三次验证不成功则登录失败,登录失败返回False。
    (4)登陆成功返回True。
    12,再写一个函数完成注册功能:(升级题,两天做完)
    (1)用户输入用户名密码注册。
    (2)注册时要验证(文件regsiter中)用户名是否存在,如果存在则让其重新输入用户名,如果不存在,则注册成功。
    (3)注册成功后,将注册成功的用户名,密码写入regsiter文件,并以 | 隔开。
    (4)注册成功后,返回True,否则返回False。

    2.

    2.默写

    ①,return的作用。
    ②,传参的几种方法,每个都简单写一个代码。
    如,实参,按位置传参。
    def func(x,y):
    Pass
    func(‘a’,’b’)

    答案

    1. 写函数,检查获取传入列表或元组对象的所有奇数位索引对应的元素,并将其作为新列表返回给调用者。

    def func(lis):
        return lis[1::2]

    2. 写函数,判断用户传入的对象(字符串、列表、元组)长度是否大于5。

    def func(x):
        return len(x) > 5

    3. 写函数,检查传入列表的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。

    def func(lis):
        if len(lis) > 2:
            return lis[:2]
    但是切片有一个特性,多了不报错,所以可以这样写
    def func(lis):
        return lis[:2]

    4. 写函数,计算传入字符串中[数字]、[字母]、[空格] 以及 [其他]的个数,并返回结果。

    def func(s):      # 'fsadsad432 edfd@#$'
        num = 0       # 计算数字的个数
        alpha = 0     # 字母
        space = 0     # 空格
        other = 0     # 其他
    
        for i in s:
            if i.isdigit():
                num += 1
            elif i.isalpha():
                alpha += 1
            elif i.isspace():
                space += 1
            else:
                other += 1
        return num,alpha,space,other
    
    print(func('fsadsad432 edfd@#$'))
    
    #结果
    #(3, 11, 1, 3)
    
    但是这样有个问题,就是没人知道你传回来的是什么,如果需要知道传回来的是什么,需要看源代码。所以最好要用字典。
    def func(s):      # 'fsadsad432 edfd@#$'
        dic = {'num':0,'alpha':0,'space':0,'other':0}
    
        for i in s:
            if i.isdigit():
                dic['num'] += 1
            elif i.isalpha():
                dic['alpha'] += 1
            elif i.isspace():
                dic['space'] += 1
            else:
                dic['other'] += 1
        return dic
    
    print(func('fsadsad432 edfd@#$'))
    
    #结果
    #{'alpha': 11, 'num': 3, 'other': 3, 'space': 1}

    5. 写函数,检查用户传入的对象(字符串、列表、元组)的每一个元素是否含有空内容,并返回结果。

    # 'sdsad sad a' 对于字符串来说,元素为空内容表示为空格
    # [1,2,3,4,'',[],()] 对于列表和元组来说,空内容表示''或[]或()
    
    def func(x):
        if type(x) is str and x:    #参数是字符串,并且字符串不为空
            for i in x:
                if i==' ':
                    return True
        elif x and type(x) is list or type(x) is tuple: 
            for i in x:
                if not i:
                    return True
        elif not x:                 #表示字符串或者列表元组本身就为空,也算空
            return True
    
    #这种情况下,不需要最后的else,因为内容中没有空内容的话,默认return None,相当于False

    6. 写函数,检查传入字典的每一个value的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。

    # dic = {'k1':'v1v1','k2':[11,22,33,44]}
    # PS:字典中的value只能是字符串或列表
    
    def func(dic):
        for k in dic.values():
            pass
    #一般不这么写,因为正常情况下,vlaue里面的值很大,有可能是嵌套的列表或者字典,如果直接取values,比较浪费内存。
    
    def func(dic):
        for k in dic:
            if len(dic[k]) > 2:
                dic[k] = dic[k][:2]
    
        return dic
    
    dic = {"k1":"v1v1","k2":[11,22,33,44]}
    print(func(dic))

    7. 写函数,接收两个数字参数,返回比较大的那个数字。

    def func(a,b):
        return a if a > b else b

    8. 写函数,用户传入修改的文件名,与要修改的内容,执行函数,完成整个文件的批量修改操作(进阶)。

    def func(filename, old, new):
        with open(filename, encoding="utf-8") as f, open("%s.bak" % filename, "w", encoding="utf-8") as f2:
            for line in f:
                if old in line:
                    line = line.replace(old, new)
                # 写文件
                f2.write(line)
    
        import os
        os.remove(filename)  # 删除文件
        os.rename("%s.bak" % filename, filename)  # 重命名文件

    9. 写一个函数完成三次登陆功能,再写一个函数完成注册功能

    username = "yangxiaoer"
    password = "123456"
    i = 3
    while i > 0:
        zh = input("请输入你的账号:")
        i -= 1
        if zh == username:
            mm = input("请输入你的密码:")
            if mm == password:
                print("验证成功.正在登陆......")
                print('''恭喜你登陆成功!
                欢迎用户进入
                用户名 :%s
                密码   :%s
                '''%(zh,mm))
                break
            else:
                if i == 0:
                    print("你的机会已经没了!game over 下次见!")
                    answer = input('再试试?Y or N')
                    if answer == 'Y':
                        i = 3
                print("密码错误,请重新输入")
                print("你还有"+str(i)+"次机会")
        else:
            print("请输入正确的用户名!")
            if i == 0:
                print("你的机会已经没了!")
                answer = input('再试试?Y or N')
                if answer == 'Y':
                    i = 3
            print("你还有" + str(i) + "次机会")
    else:
        print('你TM要不要脸')
  • 相关阅读:
    线程间的通信
    不用加减乘除做加法
    关键字throw(something)限制
    C++ 中的“ !” 运算
    n个骰子的点数
    State 模式
    Strategy 模式
    构造函数为什么不能是虚函数 ( 转载自C/C++程序员之家)
    n个骰子的点数
    和为S的两个数字
  • 原文地址:https://www.cnblogs.com/dongye95/p/10171643.html
Copyright © 2020-2023  润新知