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 列表推导式
所谓的列表推导式,就是指的轻量级循环创建列表
-
- 基本的方式
-
- 在循环的过程中使用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()