zoukankan      html  css  js  c++  java
  • 初识函数作业

    1,整理函数相关知识点,写博客。
    
    2,写函数,检查获取传入列表或元组对象的所有奇数位索引对应的元素,并将其作为新列表返回给调用者。
    # 自己写的
    def odd_list(lst):
        new_lst = []
        for i in range(len(lst)):
            if i % 2 == 1:
                new_lst.append(lst[i])
        return new_lst
    # 老师讲解的
    def func(lst):
        return list(lst[1::2])
    
    
    lis = ['a', 'b', 'c', 'd']
    tup = (0, 1, 2, 3, 4, 5, 6)
    print(odd_list(lis))
    print(odd_list(tup))
    
    3,写函数,判断用户传入的对象(字符串、列表、元组)长度是否大于5。
    # 自己写的
    def my_len(arg):
        return True if len(arg) > 5 else False
    # 老师讲解的
    def func(s):
        return len(s) > 5  # len(s) > 5表达式本身就是会返回bool值
    
    s = 'abc'
    lst = [1, 2, 3, 4, 5, 6]
    tup = (1, 2, 3, 4)
    print(my_len(s))
    print(my_len(lst))
    print(my_len(tup))
    
    
    4,写函数,检查传入列表的长度,如果大于2,将列表的前两项内容返回给调用者。
    def func(arg):
        if len(arg) > 2:
            return arg[0], arg[1]
    
    
    print(func([1, 2, 3, 4]))
    print(func([1, 2]))
    
    
    5,写函数,计算传入函数的字符串中, 数字、字母、空格 以及 其他内容的个数,并返回结果。
    def func(s=""):  # 给个默认参数字符串,只是为了下面写代码能给个提示,否则pycharm不知道你传的数据类型,不好给提示
        num = 0
        alp = 0
        spa = 0
        other = 0
        for el in s:
            if el.isdigit():
                num += 1
            elif el.isalpha():
                alp += 1
            elif el == ' ':  # 这里使用'',而不使用.isspace(),因为isspace包括空格/制表符/换行符
                spa += 1
            else:
                other += 1
        return num, alp, spa, other
    
    
    print(func('123abc   # $ @567!'))
    
    
    
    6,写函数,接收两个数字参数,返回比较大的那个数字。
    def func(a, b):
        return a if a > b else b
    
    
    print(func(1, 2))
    
    
    
    7,写函数,检查传入字典的每一个value的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。
        dic = {"k1": "v1v1", "k2": [11,22,33,44]}
        PS:字典中的value只能是字符串或列表
    def func(arg={}): # 给个默认参数空字典,只是为了下面写代码能给个提示
        for k, v in arg.items():
            if len(v) > 2:
                arg[k] = v[:2]
        return arg
    
    
    print(func({"k1": "v1v1", "k2": [11, 22, 33, 44]}))
    
    
    8,写函数,此函数只接收一个参数且此参数必须是列表数据类型,此函数完成的功能是返回给调用者一个字典,此字典的键值对为此列表的索引及对应的元素。例如传入的列表为:[11,22,33] 
    返回的字典为 {0:11,1:22,2:33}。 def func(arg): dic = {} for i in range(len(arg)): dic[i] = arg[i] return dic print(func([11, 22, 33])) 9,写函数,函数接收四个参数分别是:姓名,性别,年龄,学历。用户通过输入这四个内容,然后将这四个内容传入到函数中,此函数接收到这四个内容,将内容追加到一个student_msg文件中。 def func(name, sex, age, edu): with open('student_msg', mode='a', encoding='utf-8') as f: f.write(name + ' ') f.write(sex + ' ') f.write(str(age) + ' ') f.write(edu + ' ') func('梁玉凤', '', 18, '小学') 10,对第9题升级:支持用户持续输入,Q或者q退出,性别默认为男,如果遇到女学生,则把性别输入女。 11,写函数,用户传入修改的文件名,与要修改的内容,执行函数,完成整个文件的批量修改操作(升级题, 此题认真阅读和理解. 应该有3个参数才对)。 def func(file, old, new): import os with open(file, mode='r', encoding='utf-8') as f, open('file_copy', mode='w', encoding='utf-8') as f1: for line in f: line = line.replace(old, new) f1.write(line) os.remove(file) os.rename('file_copy', file) func('student_msg', '梁玉凤', '小王') 12,写一个函数完成三次登陆功能,再写一个函数完成注册功能(升级题) def login(): # 无论登录的是否是一个用户都只能登录三次,输错三次程序退出 for i in range(3): with open('user', 'r', encoding='utf-8') as f: accounts = {} for line in f: # 将文件中的用户名密码添加到字典中 k, v = line.strip().split() accounts[k] = v # print(accounts) # {'alex': '123456', 'wusir': 'abcdefg'} username = input('请输入用户名:').strip() password = input('请输入密码:').strip() if username in accounts: # 用户存在 if password == accounts[username]: # 判断密码 print(f'登录成功,欢迎 {username}') break # 支持多用户登录,但是每次只能登录一个用户 else: if i < 2: print(f'用户名或密码错误,你还有{2-i}次登录机会') else: print('用户名不存在,请注册') regist() else: # 能执行到这里,说明没有成功登录.当 while/for 循环正常执行完,中间没有被 break 中止的话,才会执行 else 后面的语句 print('密码错误三次,该账户无法登录') def regist(): username = input('请输入用户名:').strip() password = input('请输入密码:').strip() f = open('user', mode='a', encoding='utf-8') line = username + ' ' + password f.write(' '+line) f.flush() f.close() print('--------------注册完成--------------') login() # 明日默写。 # ①,return的作用。 参考答案: 1. 遇到return.此函数结束,函数后面的东西将不会再执⾏ 2. return返回值给调用者 关于返回值: 1.不写return,或者return后面什么都不写,或者return后面写None,那么返回的就是None 2.return后⾯写一个值,则调⽤者可以接收一个结果(该值) 3.return后面写多个值, 则调⽤者可以接收一个tuple, 调用者可以直接解构成多个变量 # ②,传参的几种方法,每个都简单写一个代码。 # 如,实参,按位置传参。 def func(x,y): pass func('a','b') # 1. 关于实参: # 1. 位置参数, 按照位置给形参传递信息 def func(x, y): pass func('a', 'b') # 2. 关键字参数, 按照形参声明的变量名进行传递 def func(x,y): pass func(x='a',y='b') # 3. 混合参数. 位置(在前)+关键字(在后)(规定) def func(x, y): pass func('a', y='b') # 2. 关于形参(2): # 1. 位置参数, 按照位置声明的变量 def func(x, y): pass func('a', 'b') # 2. 默认值参数 def func(x, y='b'): pass func('a') # 3. 当默认值和位置参数同时存在的时候. 规定: 默认值必须写在后面 # 4. 动态传参(明天) # 所有带等号的. 都上后面去
    import os
    
    # 写函数,检查获取传入列表或元组对象的所有奇数位索引对应的元素, 13579
    # 并将其作为新列表返回给调用者。
    def func(lst):
        return list(lst[1::2])
    
    print(func([1,1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,34,45,6]))
    
    
    # 3,写函数,判断用户传入的对象(字符串、列表、元组)长度是否大于5。
    def func(s):
        return len(s) > 5
    
    print(func("哈哈1233"))
    
    
    # 4. 写函数,检查传入列表的长度,如果大于2,将列表的前两项内容返回给调用者。
    def func(lst):
        if len(lst) > 2:
            return lst[0], lst[1]
            return lst[0:2]
    
    
    # 5,写函数,计算传入函数的字符串中, 数字、字母、空格 以及 其他内容的个数,并返回结果。
    def func(s=""):
        shuzi = 0
        zimu = 0
        kongge = 0
        qita = 0
        for c in s:
            if c.isdigit():
                shuzi += 1
            elif c.isalpha():
                zimu += 1
            elif c == " ":
                kongge += 1
            else:
                qita += 1
    
        return shuzi, zimu, kongge, qita
    
    print(func("jin san pang zuo tian lai zhao alex yao 5000 kuai $$$"))
    
    # 6. 写函数,接收两个数字参数,返回比较大的那个数字。
    def func(a, b):
        return a if a > b else b
    
    
    # 7.写函数,检查传入字典的每一个value的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。
    #     dic = {"k1": "v1v1", "k2": [11,22,33,44]}
    #     PS:字典中的value只能是字符串或列表
    
    def func(dic={}):
        for k, v in dic.items():
            if len(v) > 2:
                dic[k] = v[:2]
        return dic
    
    print(func({"k1": "v1v1", "k2": [11,22,33,44]}))
    
    
    # 8. 写函数,此函数只接收一个参数且此参数必须是列表数据类型,
    # 此函数完成的功能是返回给调用者一个字典,
    # 此字典的键值对为此列表的索引及对应的元素。
    # 例如传入的列表为:[11,22,33] 返回的字典为 {0:11,1:22,2:33}。
    def func(lst):
        if type(lst) != list:
            print("回去吧. 拿个列表再过来")
            print(1/0)
            return  # 为了调用方
    
        dic = {}
        for i in range(len(lst)):
            dic[i] = lst[i]
        return dic
    
    print(func("你是谁"))
    
    
    # 9. 写函数,函数接收四个参数分别是:姓名,性别,年龄,学历。用户通过输入这四个内容,
    # 然后将这四个内容传入到函数中,
    # 此函数接收到这四个内容,将内容追加到一个student_msg文件中。
    def func(name, gender, age, edu):
        f = open("student_msg", mode="a", encoding="utf-8")
        f.write(name+"_"+gender+"_"+age+"_"+edu+"
    ")
        f.flush()
        f.close()
    
    n = input("请输入你的名字:")
    g = input("请输入你的性别:")
    a = input("请输入你的年龄:")
    e = input("请输入你的学历:")
    func(n, g, a, e)
    
    
    
    # 10. 对第9题升级:支持用户持续输入,Q或者q退出,性别默认为男,
    #     如果遇到女学生,则把性别输入女。
    def func(name, age, edu, gender=""):
        f = open("student_msg", mode="a", encoding="utf-8")
        f.write(name+"_"+gender+"_"+age+"_"+edu+"
    ")
        f.flush()
        f.close()
    while 1:
        n = input("请输入你的名字:")
        g = input("请输入你的性别:")
        a = input("请输入你的年龄:")
        e = input("请输入你的学历:")
    
        if g == "":
            func(n, a, e)
        else:
            func(n, a, e, g)
    
        content = input("信息录入完毕, 是否继续录入(Q退出)")
        if content.upper() == "Q":
            break
    
    # 写函数,用户传入修改的文件名,与要修改的内容,执行函数,
    # 完成整个文件的批量修改操作(升级题, 此题认真阅读和理解. 应该有3个参数才对)
    def modify_file(file, old, new):
        with open(file, mode="r", encoding="utf-8") as f1, 
            open(file+"_副本", mode="w", encoding="utf-8") as f2:
    
            for line in f1:
                line = line.replace(old, new)
                f2.write(line)
    
        os.remove(file)
        os.rename(file+"_副本", file)
    
    
    # func("student_msg", "男", "不祥之刃")
    modify_file("名字", "", "")
    
    
    # 12. 写一个函数完成三次登陆功能,再写一个函数完成注册功能(升级题)
    
    def regist():
        uname = input("请输入你的用户名:")  # wusir
        # 判断一下用户名是否重复:
        f = open("userinfo", mode="r", encoding="utf-8")
        for line in f: # alex_123
            un = line.split("_")[0] # 文件中的用户名 alex
            if un == uname: # 一次判断 没有判断出结果.必须等整个循环结束才能出结果
                print("对不起. 您的用户名已经重复. ")
                return
        else:
            print("用户名可用!")
        f.close()
        upwd = input("请输入你的密码:")
        f = open("userinfo", mode="a", encoding="utf-8")
        f.write(uname+"_"+upwd+"
    ")
        f.flush()
        f.close()
    # regist()
    def login():
        count = 1
        while count <= 3:
            uname = input("请输入你的用户名:")
            upwd = input("请输入你的密码:")
            f = open("userinfo", mode="r", encoding="utf-8")
            for line in f:
                u,p = line.strip().split("_")
                if uname == u and upwd == p:
                    print("登录成功")
                    return True
            else:
                print("登录失败, 用户名或密码错误")
                count += 1
    login()
    View Code
  • 相关阅读:
    Connection parameters are correct , SSL not enabled
    log4j配置文件的详解
    java.lang.IllegalArgumentException: addChild: Child name '/SSHE' is not unique
    MYSQL的三种注释
    Oracle19c 单节点ASM 存储模式数据库实例搭建过程
    [专题]中立遭质疑,提价遭反对,ARM的生存难题怎么破?
    快速排序的理解
    chrome审查元素功能,web开发强大帮手
    MyEclipse Server view报错解决方法
    把Java程序打包成jar文件包并执行
  • 原文地址:https://www.cnblogs.com/lyfstorm/p/11173819.html
Copyright © 2011-2022 走看看