6 强化训练

6.1 函数应用:学生管理系统

"""

{"name": '诸葛亮', "age": 40, "sex": "男"}
"""
import sys


info_list = [{"name": '诸葛亮', "age": 40, "sex": "男"}, {"name": '刘备', "age": 45, "sex": "男"}]  # 这个列表用来保存所有的名片,它里面每一个元素就是每一个小名片(列表)

user_name = "admin"
password = "123456"


def welcome():
    """
        打印界面 
    """
    print("-" * 30)
    print("--------名片管理器v1.0--------")
    print("----1、添加名片")
    print("----2、删除名片")
    print("----3、修改名片")
    print("----4、查询名片")
    print("----5、查询所有名片")
    print("----6、退出系统")
    print("-" * 30)


def add_info():
    """添加名片功能的函数"""
    name = input("请输入姓名:")
    age = input("请输入年龄:")
    sex = input("请输入性别:")
    dic = {"name": name, "age": age, "sex": sex}
    info_list.append(dic)  # 把name, age, sex整合成一个小列表,追加到大列表info_list中
    print("【INFO】:添加成功!")
    print(info_list)  # 自己测试用,看看有没有添加成功


def del_info():
    """删除名片功能的函数"""
    name = input("请输入要删除这个名片的姓名:")
    for i in info_list:  # i就是每一个小列表
        if name in i.values():  # 判断名字在不在小列表中
            # 在,才执行这里的代码,就删除
            # 在大列表中删除小列表
            info_list.remove(i)
            print("【INFO】:删除成功!")
            print(info_list)
            break  # 如果找到第一个成功了,后面不用再找了
    else:
        print("【ERROR】:删除不成功,查无此人!")


def modify_info():
    name = input("请输入要修改这个名片的姓名:")
    for i in info_list:  # i就是每一个小列表
        if name in i.values():  # 判断名字在不在小列表中
            # 在,才执行这里的代码,就修改
            new_name = input("请输入新的姓名:")
            new_age = input("请输入新的年龄:")
            new_sex = input("请输入新的性别:")
            # 如果在列表中修改数据?通过下标来修改:列表名[下标] = 值
            info_list[info_list.index(i)] = {"name": new_name, "age": new_age, "sex": new_sex}
            print("【INFO】:修改成功!")
            print(info_list)
            break  # 如果找到第一个成功了,后面不用再找了
    else:
        print("【ERROR】:删除不成功,查无此人!")


def search_info():
    name = input("请输入要查询的名片的姓名:")
    for i in info_list:  # i就是每一个小列表
        if name in i.values():  # 判断名字在不在小列表中

            print("【INFO】:这个人的信息如下:%s" % i)
            break  # 如果找到第一个成功了,后面不用再找了
    else:
        print("【ERROR】:删除不成功,查无此人!")


def search_all_info():
    uname = input("请输入管理员账号:")
    pwd = input("请输入管理员密码:")

    if uname == user_name and pwd == password:
        # 展示所有数据
        # [['诸葛亮', '40', '男'], ['刘备', '45', '男']]
        print(info_list)
        # for i in info_list:
        #     # print(i)
        #     for j in i:
        #         print(j, end="\t")
        #     print()

    else:
        print("【ERROR】:用户名或者密码错误")


def sys_exit():
    sign = input("确定要退出系统吗?(yes or no):")
    # if sign == "yes" or sign == "y":
    # if sign in ["yes", "y", "Y", "YES"]:
    if sign.lower() in ["yes", "y"]:
        print("【INFO】:成功退出系统!")
        sys.exit()


def main():
    while True:

        # 打印界面
        welcome()

        # 让用户输入数字,表示对应的操作
        command = input("请输入数字1~5表示对应的操作:")

        # 判断用户输入的这个数字command,根据它来执行对应的功能(代码)
        if command == "1":
            # 添加名片  就是 往大列表info_list,添加某个人的名片
            add_info()

        elif command == "2":
            # 删除名片
            # [{"name": '诸葛亮', "age": 40, "sex": "男"}, {"name": '刘备', "age": 45, "sex": "男"}]
            del_info()

        elif command == "3":
            # 修改名片
            #
            modify_info()

        elif command == "4":
            # 查询名片
            # [['诸葛亮', '40', '男'], ['刘备', '45', '男']]
            search_info()

        elif command == "5":
            # 查询所有名片
            search_all_info()

        elif command == "6":
            # 退出系统
            # break
            sys_exit()
        else:
            print("【ERROR】:请务必输入数字1~5")


main()   # 入口函数

6.2 递归函数

  • 一个函数在内部调用的是自己本身的话
def fn(num):
    """这个函数是来求num的阶乘"""
    if num == 1:
        return 1
    else:
        ret = num * fn(num-1)
        return ret


print(fn(4))

6.3 匿名函数

用lambda关键词能创建小型匿名函数。这种函数得名于省略了用def声明函数的标准步骤。

lambda函数的语法只包含一个语句,如下:

lambda [arg1 [,arg2,.....argn]]:expression

stus = [
    {"name": "zhangsan", "age": 18}, 
    {"name": "lisi", "age": 19}, 
    {"name": "wangwu", "age": 17}
]
按name排序:
stus.sort(key = lambda x: x['name'])
print(stus)
[{'age': 19, 'name': 'lisi'}, {'age': 17, 'name': 'wangwu'}, {'age': 18, 'name': 'zhangsan'}]
按age排序:
stus.sort(key = lambda x: x['age'])
print(stus)
[{'age': 17, 'name': 'wangwu'}, {'age': 18, 'name': 'zhangsan'}, {'age': 19, 'name': 'lisi'}]

6.4 给程序传参数

6.5 列表推导式

所谓的列表推导式,就是指的轻量级循环创建列表

    1. 基本的方式
    1. 在循环的过程中使用if
  • 2个for循环

  • 3个for循环

    “”"

    列表推导式 又叫列表生成式
    [返回值 for i in xxx] 返回值 决定了生成的这个列表的每一个元素的最终格式(包括数据类型)

      [1, 2, 3, 4..., 8, 9, 10]
      """
      
      # lst = list(range(1, 11))
      # print(lst)
      # ------------------------------------------
      # lst = []
      # for i in range(1, 11):
      #     lst.append(i)
      # print(lst)
      
      # ------------------------------------------
      # lst = list()  # 也是在创建空列表
      # i = 1
      # while i <= 10:
      #     lst.append(i)
      #     i += 1
      # print(lst)
      # ------------------------------------------
      # 列表推导式 又叫列表生成式
      # [返回值 for i in xxx]   返回值 决定了生成的这个列表的每一个元素的最终格式(包括数据类型)
      
      # 掌握:
      # lst = [i for i in range(1, 11)]   # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
      # lst = [i+2 for i in range(1, 11)]   # [3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
      # lst = [str(i) for i in range(1, 11)]   # ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10']
      # print(lst)
      
      
      # 了解:
      # lst = [i for i in range(1, 21) if i % 2 == 0]  # [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
      # lst = [(i, j) for i in range(1, 3) for j in range(0, 2)]   # [(1, 0), (1, 1), (2, 0), (2, 1)]
      # print(lst)
    

6.6 set tuple list

  • set是集合类型
  • 使用set,可以快速的完成对list中的元素去重复的功能
  • set tuple list之间的转换
"""
集合:
1、无序性, 元素没有顺序之分
2、没有重复的数据

"""

# set1 = {10, 20, 30, True, "a", 10, 20, 30, 10, 10}
# print(set1, type(set1))


lst = [10, 202, 30, 10, 50, 60, 10]   # 去重
print(list(set(lst)))   # 我们用集合来去掉重复数据
# tup = (10, 202, 30, 10, 50, 60, 10)
# print(tuple(set(tup)))

6.7 素数

用函数实现求100-200里面所有的素数
提示:素数的特征是除了1和其本身能被整除(即余数为0),其它数都不能被整除的数
"""


def fn():
    for i in range(100, 201):  # i 是从 100 到200 的数字

        # 里层的这个for循环,我们要拿着i去分别除以2, 3, 4, 5 ... i-1 ,所以才相当于遍历 2到i-1
        for j in range(2, i):
            if i % j == 0:
                # 如果余数是0,说明不是素数
                break  # 找到了一个能被整除的数,就已经不用再往后面去除以了,

        else:
            print("%s是素数" % i)
fn()

猜你喜欢

转载自blog.csdn.net/qq_43014129/article/details/83002739