1.写一个函数mysum,此函数带有两个参数x,y打印出两个参数x,y的和

  1. def mysum(x, y):
  2. print(x + y)
  3.  
  4. mysum(3, 2)

2.写一个函数print_even,传入一个数参n代表终止整数(不包含n),打印0-n之间所有偶数

  1. def print_even(n):
  2. print(list(x for x in range(n) if x % 2 == 0))
  3.  
  4. print_even(10)

3.写一个函数mymax,返回两个数的最大值

  1. def mymax(a, b):
  2. return a if a > b else b
  3.  
  4. print(mymax(3, 7))

4.写一个函数input_number用于读取输入的多个整数,输入负数时结束将输入的数形成列表返回给调用者

  1. def input_number():
  2. L1 = list()
  3. while True:
  4. num = int(input("输入整数为负停止:") or "-1")
  5. if num >= 0:
  6. L1.append(num)
  7. else:
  8. break
  9. return L1
  10.  
  11. print(input_number())

5.写一个函数mysum,可以传入任意个实参的数字,返回所有实参的和

  1. def mysum(*args):
  2. num = 0
  3. for i in args:
  4. num += i
  5. return num
  6.  
  7. print(mysum(1, 2, 3, 4))

6.仿照max写一个mymax函数,实现功能与max完全相同

  1. def mymax(a, *args): # *聚合
  2.  
  3. def _max(*args):
  4. m = args[0]
  5. i = 1
  6. while i < len(args):
  7. if args[i] > m:
  8. m = args[i]
  9. i += 1
  10. return m
  11.  
  12. if len(args) == 0:
  13. return _max(*a) # *打散
  14. return _max(a, *args) # *打散
  15.  
  16. print(mymax(1, 2, 3, 4))

7.写一个函数minmax,可以给出任意个数字实参,返回这些实参的最小数和最大数

  1. # 方法一
  2. def minmax(*args):
  3. return min(args), max(args)
  4.  
  5. a, b = minmax(2, 1, 3, 7, 4)
  6. print(a, b)
  7. # 方法二
  8. def my_max_min(*args):
  9. args = list(args)
  10. # print(args)
  11. for i in range(0, len(args)-1):
  12. if args[i] > args[i+1]:
  13. args[i+1], args[i] = args[i], args[i+1]
  14. max_num = args[len(args)-1]
  15. for i in range(len(args)-1, 0, -1):
  16. if args[i] < args[i-1]:
  17. args[i-1], args[i] = args[i], args[i-1]
  18. min_num = args[0]
  19. print(args) # [1, 2, 5, 3, 4, 6, 7]
  20. return (min_num, max_num)
  21.  
  22. res = my_max_min(5, 1, 7, 2, 4, 3, 6)
  23. print(res) # (1, 7)

8.写一个函数 mysum此函数可以传入一个参数,两个参数和三个参数

  1. '''此函数的功能是返回从开始到终止值的和
  2. 1) 当传入一个参数时,这个参数代表终止数
  3. 2) 当传入两个参数时,第一个参数代表起始值,第二个参数代表终止值
  4. 3) 当传入三个参数时,第三个参数代表步长
  5. '''
  6. def mysum(start, stop=None, step=1):
  7. if stop is None:
  8. start, stop = 0, start
  9. num = 0
  10. for i in range(start, stop, step):
  11. num += i
  12. return num
  13.  
  14. print(mysum(101)) #
  15. print(mysum(1, 100)) #
  16. print(mysum(0, 101, 2) ) #
  17.  
  18. # 方法二:
  19. def mysum(*args):
  20. return sum(range(*args))
  21.  
  22. print(mysum(101)) #

9.创建一个列表L = []写一个函数 input_number读取数据放入列表L中

  1. def input_number():
  2. L = list()
  3. while True:
  4. s = input("输入-1结束") or "-1"
  5. if s == "-1":
  6. break
  7. L.append(s)
  8. return L
  9.  
  10. print(input_number())

10.写一个函数primes(n),返回小于n的所有的素数的列表

  1. def primes(n):
  2. if n < 2:
  3. return []
  4. L = [2]
  5. for i in range(n): # 循环判断2-n之间的数是不是素数
  6. for j in range(2, i): # 判断i是不是素数
  7. if i % j == 0:
  8. break
  9. if i - j == 1:
  10. L.append(i)
  11. return L
  12.  
  13. print(primes(10))

11.写一个lambda表达式,判断这个数的2次方+1能否被5整数,如果能整除返回True,否则返回False

  1. fx = lambda x: True if (x**2 + 1) % 5 == 0 else False
  2. print(fx(3)) # True

12.写一个lambda 表达式,求两个变量的最大值

  1. fx = lambda x, y: x if x >y else y
  2. print(fx(4, 3)) #

13.自己写一个程序,解释执行用户输入的任何语句

  1. g = {}
  2. l = {}
  3. while True:
  4. s = input(">>>") or "-1"
  5. if s == "-1":
  6. break
  7. exec(s, g, l)
  8.  
  9. print(g)
  10. print(l)

14.求: 1 + 1/2 + 1/4 + 1/8 + ... + 1/2**n 的和

  1. # 方法一
  2. n = int(input(">>>") or '-1')
  3. print(sum([1/2**n for x in range(n + 1)]))
  4. # 方法二
  5. res = sum(map(lambda x: 1/2**x, range(int(input(">>>")))))
  6. print(res)

15.求 1**2 + 2**2 + 3**2 + ... 9**2 的和

  1. res = sum(map(lambda x: x**2, range(10)))
  2. print(res)

16.求 1**9 + 2**8 + 3**7 + ... 9**1 的和

  1. # 方法一
  2. print(sum(map(lambda x, y: x**y, range(1, 10), range(9, 0, -1))))
  3. # 方法二
  4. print(sum(map(pow, range(1, 10)), range(9, 0, -1)))

17.编写函数 myfac(x) 计算x的阶乘 x! 例如:5! = 5 * 4 * 3 * 2 * 1

  1. # 匿名函数和递归嵌套运用
  2. fx = lambda x: 1 if x == 1 else x * fx(x - 1)
  3. print(fx(5)) #

18.写程序算出1~20的阶乘的和 1! + 2! + 3! + .... + 19! + 20!

  1. # 匿名函数和递归嵌套运用
  2. fx = lambda x: 1 if x == 1 else x*fx(x - 1)
  3. print(sum(map(fx, range(1, 21)))) #

19.已知有列表:L = [[3,5,8], 10, [[13, 14], 15], 18]

  1. # 1) 写一个函数 print_list(lst) 打印出列表中所有数字
  2. L = [[3,5,8], 10, [[13, 14], 15], 18]
  3.  
  4. def print_list(lst):
  5. for i in lst:
  6. if type(i) is list:
  7. print_list(i)
  8. else:
  9. print(i)
  10.  
  11. print_list(L)
  12. # 2) 写一个函数sum_list(lst) 返回列表中所有数字的和
  13. L = [[3,5,8], 10, [[13, 14], 15], 18]
  14.  
  15. def sum_list(lst):
  16. s = 0
  17. for i in lst:
  18. if type(i) is list:
  19. s += sum_list(i)
  20. else:
  21. s += i
  22. return s
  23.  
  24. print(sum_list(L)) #

20.输入一个圆的半径打印出这个圆的面积,输入一个圆的面积打印出这个圆的半径,用math模块实现

  1. import math
  2.  
  3. print(math.pi * math.pow(int(input("r:")), 2))
  4. print(math.sqrt(int(input("area:"))/math.pi)) # math.sqrt 求平方根

21.请编写函数 fun(n) 其功能是计算和 Sn = 1 + 1/1! + 1/2! + 1/3! + 1/4! +... +1/n!

  1. import math
  2.  
  3. # 方法一
  4. def fun(n):
  5. s = 0
  6. for i in range(n+1):
  7. s += 1/math.factorial(i) # math.factorial(i) 求i的阶乘 i!
  8. print(s)
  9.  
  10. fun(10) # 2.7182818011463845
  11.  
  12. # 方法二
  13. def func(n):
  14. return sum(map(lambda i: 1/math.factorial(i), range(n+1)))
  15.  
  16. print(func(10)) # 2.7182818011463845

22.编写函数 fun(x, n) 计算s = 1 + x + x**2/2! + x**3/3! + x**n/n!的和并返回

  1. import math
  2.  
  3. def fun(x, n):
  4. return sum(map(lambda n: math.pow(x, n)/math.factorial(n), range(n)))
  5.  
  6. print(fun(3.1, 10)) # 22.1668536447133

23.写一个程序,以电子时钟的格式显示时间:HH:MM:SS

  1. import time
  2.  
  3. def show_time():
  4. while True:
  5. t = localtime() # 年 月 日 时 分 秒 星期 一年中的第几天 夏令时
  6. s = "\r%02d:%02d:%02d" % t[3:6] # \r 回车后的光标位置
  7. print(s, end='')
  8. time.sleep(1)
  9.  
  10. show_time()

24.输入你的生日,计算出你出生的那天是星期几?已经出生了多少天?

  1. import time
  2.  
  3. y = int(input("输入出生的年:"))
  4. m = int(input("输入出生的月:"))
  5. d = int(input("输入出生的日:"))
  6.  
  7. t = time.mktime((y, m, d, 0, 0, 0, 0, 0, 0))
  8. print("UTC时间的秒数:", t)
  9.  
  10. time_tuple = time.localtime(t)
  11. week = time_tuple[6]
  12. L = ['星期一',
  13. '星期二',
  14. '星期三',
  15. '星期四',
  16. '星期五',
  17. '星期六',
  18. '星期日']
  19.  
  20. print("这一天是:", L[week])
  21.  
  22. t = time.time() - t # 从生日到现在过了多少秒
  23. d = t / (60 * 60 * 24) # t / 一天的秒数
  24.  
  25. print("您已出生", d, "天")

25.可以作为密码的字符有:大小写的A-Z,0_9,下划线,写一个程序随机生成六位密码

  1. import random
  2.  
  3. def get_random_passwd(n):
  4. source = [chr(x) for x in range(ord("a"), ord("z")+1)]
  5. source += [chr(x) for x in range(ord("A"), ord("Z")+1)]
  6. source += [str(x) for x in range(10)]
  7. code = ""
  8. while len(code) < n:
  9. code += random.choice(source)
  10. return code
  11.  
  12. print(get_random_passwd(6))

26.编写一个闹钟程序,启动时设置定时时间(小时和分钟),到时间后打印"时间到....." 然后退出程序

  1. import time
  2.  
  3. def alarm():
  4. h = int(input("请输入小时: "))
  5. m = int(input("请输入分钟: "))
  6. while True:
  7. ct = time.localtime() # 当前时间的元组
  8. if (h, m) == ct[3:5]:
  9. print("\n时间到...")
  10. return
  11. print("\r%02d:%02d:%02d" % ct[3:6], end='')
  12. time.sleep(1)
  13.  
  14. # 启动闹钟
  15. alarm()

27.模拟斗地主发牌,扑克牌共54张,三个人,每人发17张牌,底牌留三张

  1. '''
  2. 花色:黑桃('\u2660'), 梅花('\u2663'), 方块('\u2665'), 红桃('\u2666')
  3. 数值:A2-10JQK 大小王
  4. 输入回车,打印第1个人的17张牌,输入回车,打印第2个人的17张牌
  5. 输入回车,打印第3个人的17张牌,再输入回车,打印出三张底牌
  6. '''
  7. import random
  8.  
  9. def get_new_poker():
  10. kinds = ['\u2660', '\u2663', '\u2665', '\u2666']
  11.  
  12. numbers = ['A']
  13. numbers += [str(x) for x in range(2, 11)]
  14. numbers += ['J', 'Q', 'K']
  15. # 以下生成52张牌
  16. L = [k + n for k in kinds for n in numbers]
  17. L += ['大王', '小王']
  18. return L
  19.  
  20. def play():
  21. poker = get_new_poker()
  22. random.shuffle(poker)
  23. input("按任意键发第一个人的牌: ")
  24. print("第一个人的牌是:", poker[:17])
  25. input("按任意键发第二个人的牌: ")
  26. print("第二个人的牌是:", poker[17:34])
  27. input("按任意键发第三个人的牌: ")
  28. print("第三个人的牌是:", poker[34:51])
  29. input("按任意键看底牌: ")
  30. print("底牌是:", poker[51:])
  31.  
  32. play()

28.写函数get_score来获取输入的学生成绩(0~100的整数),出现错误则返回0,输入正确返回这个数

  1. def get_score():
  2. try:
  3. score = int(input("请输入成绩:"))
  4. except ValueError:
  5. return 0
  6. if score in range(101):
  7. return score
  8. return 0
  9.  
  10. score = get_score()
  11. print('学生的成绩是:', score)

29.一个球从100米高度落下,每次落地后反弹高度为原高度的一半,再落下

  1. '''
  2. 1) 写程序算出皮球从第10次落地后反弹高度是多少?
  3. 2) 球共经过多少米路径?
  4. '''
  5. def fall_height(m, n, s=0):
  6. s += m
  7. if n == 0:
  8. return m, s
  9. return fall_height(m / 2, n - 1, s)
  10.  
  11. ret = fall_height(100, 10)
  12. print("最后落地后反弹高度是%s 球共经过%s米" % ret)

30.输入一个正整数,分解质因数,如90 = 2*3*3*5, (质因数是指最小能被原数整除的素数(不包含1))

  1. def primefactor(n, lst, pf_lst):
  2. for i in lst:
  3. if n % i == 0:
  4. pf_lst.append(i)
  5. # 递归加入分解得到的质因数[2, 2, 3, 5]
  6. return primefactor(n / i, lst, pf_lst)
  7.  
  8. def qualty(n):
  9. qualty_lst = [2]
  10. # 拿到小于n的素数列表 qualty_lst
  11. for i in range(2, n//4+1): # 最小分解质因数是4= 2*2, 优化算法n//4+1
  12. for j in range(2, i):
  13. if i % j == 0:
  14. break
  15. if i - j == 1:
  16. qualty_lst.append(i)
  17. # 循环加入90//2 +1 以内的质素
  18. # [2, 3, 5, 7, 11, 13, 17, 19, 23]
  19. pf_lst = []
  20. # 拿到小于n的分解质因数递归返回列表 pf_lst
  21. primefactor(n, qualty_lst, pf_lst)
  22. s = ""
  23. # 格式化输出
  24. for i in pf_lst:
  25. s += str(i)
  26. s = "%s = " % n + "*".join(s)
  27. print(s)
  28.  
  29. qualty(90)

31.已知s = {"工商银行", "建设银行", "中国银行", "农业银行"}

  1. # 1.用for 语句遍历集合中的元素并打印
  2. # 2.将上面的for 语句改写为while语句实现上面同样的功能
  3. s = {"工商银行", "建设银行", "中国银行", "农业银行"}
  4. for i in s:
  5. print(i)
  6. t = iter(s)
  7. try:
  8. while True:
  9. print(next(t))
  10. except Exception:
  11. pass

32.写入一个生成器函数, myodd(start, stop) 用于生成start开始到stop结束(不包含stop)的所有奇数

  1. def myodd(start, stop):
  2. while start < stop:
  3. if start % 2 != 0:
  4. yield start
  5. if start < stop:
  6. start += 1
  7.  
  8. for i in myodd(1, 100):
  9. print(i)
  10. L = [x for x in myodd(1, 100)]
  11. print(L)

33.写一个程序,读入任意行的文字数据,当输入空行时结束输入,打印带有行号的输入结果

  1. L = []
  2. while True:
  3. s = input("请输入: ")
  4. if not s:
  5. break
  6. L.append(s)
  7. for t in enumerate(L, 1): # t= (0, "hello")
  8. print("第%d行: %s" % t)

34.用生成器函数生成斐波那契数列的前n个数:1 1 2 3 5 8 13 ... n

  1. # 1) 输出前 20 个数
  2. # 2) 求前 30 个数的和
  3. def fibonacci(n):
  4. a = 0
  5. b = 1
  6. for i in range(1, n+1):
  7. a, b = b, a + b
  8. yield a
  9.  
  10. for i in fibonacci(20):
  11. print(i)
  12. print(sum(fibonacci(30)))

35.写程序打印杨辉三角(只打印6层)

  1. '''
  2. 1 0+1
  3. 1 1 0+1 1+0
  4. 1 2 1 0+1 1+1 1+0
  5. 1 3 3 1 0+1 1+2 2+1 1+0
  6. 1 4 6 4 1
  7. 1 5 10 10 5 1
  8. '''
  9. def triangle(n):
  10. L = []
  11. if not L:
  12. L.append(1)
  13. yield L
  14. for i in range(n-1):
  15. R = []
  16. for i in range(len(L)-1):
  17. R.append(L[i]+L[i+1])
  18. L = [1] + R + [1]
  19. yield L
  20.  
  21. for i in triangle(6):
  22. s = ''
  23. for j in i:
  24. s += str(j) + ' '
  25. print(s.center(13))

36.将如下数据用文本编辑器写入到data.txt文件中

  1. """
  2. 小张 13888888888
  3. 小李 13999999999
  4. 小赵 13666666666
  5. 写程序读取数据,打印出姓名和电话号码,格式如 姓名: 小张, 电话: 13888888888
  6. """
  7. def read_data():
  8. try:
  9. f = open("data.txt")
  10. L = []
  11. while True:
  12. s = f.readline()
  13. if not s:
  14. f.close()
  15. return L
  16. s = s.rstrip()
  17. name, number = s.split(" ")
  18. L.append((name, number))
  19. except IOError:
  20. print("打开文件失败")
  21.  
  22. def read_lst(L):
  23. for line in L:
  24. print("姓名:%s, 电话:%s" % line)
  25.  
  26. def main():
  27. L = read_data()
  28. read_lst(L)
  29.  
  30. main()

37.读入任意行的文字信息,当输入空行时结束输入,将读入的字符串存于列表写入文件 input.txt 中

  1. def read_input():
  2. L = []
  3. while True:
  4. s = input("请输入: ")
  5. if not s:
  6. break
  7. L.append(s)
  8. return L
  9.  
  10. def write_input(L):
  11. try:
  12. # 打开文件
  13. f = open("input.txt", 'w')
  14. # 写入数据
  15. for line in L:
  16. f.write(line)
  17. f.write('\n') # 写入换行符('\n', '\r\n')
  18. # 关闭文件
  19. f.close()
  20. except IOError:
  21. print("写文件失败")
  22.  
  23. def main():
  24. lst = read_input()
  25. print(lst)
  26. write_input(lst)
  27.  
  28. main()

38.从input.txt中读取之前输入的数据存入列表中,再加上行号进行打印显示,如 第1行: aaaa

  1. def read_input_file(filename='input.txt'):
  2. f = open(filename)
  3. L = []
  4. while True:
  5. # 读取每一行数据
  6. s = f.readline()
  7. if not s:
  8. break
  9. # 把换行符'\n'去掉
  10. s = s.rstrip()
  11. L.append(s) # 放入列表
  12. f.close() # 关闭文件
  13. # 返回L绑定的列表
  14. return L
  15.  
  16. def print_file_info(L):
  17. for line in enumerate(L, 1):
  18. print("第%d行: %s" % line)
  19.  
  20. def main():
  21. lst = read_input_file()
  22. print(lst)
  23. print_file_info(lst)
  24.  
  25. main()

39.用装饰器实现用户验证

  1. user_list = [
  2. {"name": "coco", "passwd": 123},
  3. {"name": "zhangsan", "passwd": 123},
  4. {"name": "lisi", "passwd": 123},
  5. {"name": "wangwu", "passwd": 123}
  6. ] # 定义一个列表存储用户数据源
  7. current_dic = {"username": None, "login": False} # 记录用户登录状态
  8.  
  9. def auth(auth_type="MySQL.db"): # 留给用户传递数据来源
  10. def auth_func(func):
  11. def wrapper(*args, **kwargs):
  12. print("数据库来源是: %s" % auth_type)
  13. if auth_type == user_list:
  14. if current_dic["username"] and current_dic["login"]:
  15. res = func(*args, **kwargs)
  16. return res
  17. username = input("请输入账号:").strip()
  18. passwd = int(input("请输入密码:").strip())
  19. for user_dic in user_list:
  20. if username == user_dic["name"] and passwd ==user_dic["passwd"]:
  21. current_dic["username"] = username
  22. current_dic["login"] = True
  23. ret = func(*args, **kwargs)
  24. return ret
  25. else:
  26. print("账号或密码不正确")
  27. else:
  28. print("请指定源数据库")
  29.  
  30. return wrapper
  31.  
  32. return auth_func
  33.  
  34. def index():
  35. print("欢迎来到主页")
  36.  
  37. @auth(auth_type=user_list)
  38. def home(name):
  39. print("欢迎回家%s" %name)
  40.  
  41. @auth()
  42. def shopping(name):
  43. print("%s的购物车里有[手机,外星人,Mac]" %name)
  44.  
  45. index()
  46. home("coco")
  47. shopping("coco")

49.学生信息管理项目

  1. '''
  2. 需要两个函数:
  3. input_student() 返回学生信息的字典的列表
  4. output_student(lst) 以表格式方打印学生信息
  5. 学生信息:
  6. 姓名(name) 字符串
  7. 年龄(age) 整数
  8. 成绩(score) 整数
  9. input_student()调用时等待用户输入学生信息,当输入姓名为空时结束输入形成字典后存如列表中返回
  10. L = input_student()
  11. 请输入学生姓名: xiaozhang
  12. 请输入学生年龄: 20
  13. 请输入学生成绩: 98
  14. 请输入学生姓名: xiaoli
  15. 请输入学生年龄: 23
  16. 请输入学生成绩: 100
  17. 请输入学生姓名: <回车>输入结束
  18. 此时列表数据为:
  19. L = [{'name':'xiaozhang',
  20. 'age':20,
  21. 'score': 98},
  22. {'name':'xiaoli',
  23. 'age':23,
  24. 'score': 100}
  25. ]
  26. def output_student(lst):pass
  27. print(L) # 打印出字典的列表
  28. output_student(L) # 打印出学生信息的表格如下:
  29. +-----------+--------+---------+
  30. | name | age | score |
  31. +-----------+--------+---------+
  32. | xiaozhang | 20 | 98 |
  33. | xiaoli | 23 | 100 |
  34. +-----------+--------+---------+
  35. '''
  36. def input_student():
  37. L = []
  38. while True:
  39. name = input("请输入学生姓名:") or '-1'
  40. if name == '-1':
  41. break
  42. age = int(input("请输入学生年龄:"))
  43. score = int(input("请输入学生成绩:"))
  44. L.append({'name': name,
  45. 'age': age,
  46. 'score': score
  47. })
  48. return L
  49.  
  50. def head(length):
  51. s = '+%s+%s+%s+' % ('-' * (length), '-'*5, '-'*7)
  52. print(s)
  53.  
  54. def body(length, *args):
  55. s = ('|%s|%s|%s|' %
  56. (args[0].center(length), str(args[1]).center(5), str(args[2]).center(7)))
  57. print(s)
  58.  
  59. def output_student(lst):
  60. length = max(map(lambda x: len(x['name']), lst)) + 2
  61. head(length) # 开始表格线+------+-----+-------+
  62. body(length, 'name', 'age', 'score') # 抬头行| name | age | score |
  63. head(length) # 分割表格线+------+-----+-------+
  64.  
  65. for i in lst:
  66. info = (i['name'], i['age'], i['score'])
  67. body(length, *info) # 内容
  68. head(length) # 结束表格线+------+-----+-------+
  69.  
  70. L = input_student()
  71. print(L)
  72. # [{'name': 'coco', 'age': 18, 'score': 100}, {'name': 'gogo', 'age': 17, 'score': 60}]
  73. output_student(L)

41.改写学生信息管理项目源码,要求带有操作界面

  1. '''
  2. +--------------------------------+ # show_menu() 显示功能选择菜单
  3. | 1) 添加学生信息 | # input_student()
  4. | 2) 显示所有学生的信息 | # output_student() 可作为筛选的嵌套调用
  5. | 3) 删除学生信息 | # delete_student()
  6. | 4) 修改学生成绩 | # modify_student()
  7. | 5) 按学生成绩高-低显示学生信息 | # desc_score() 4种排序并一个函数sort_student()
  8. | 6) 按学生成绩低-高显示学生信息 | # asc_score()
  9. | 7) 按学生年龄高-低显示学生信息 | # desc_age()
  10. | 8) 按学生年龄低-高显示学生信息 | # asc_age()
  11. | 9) 保存学生信息到文件(si.txt) | # write_file()
  12. | 10) 从文件中读取数据(si.txt) | # read_file()
  13. | q) 退出 | # quit()
  14. +--------------------------------+
  15. '''
  16. # 显示功能选择菜单
  17. def show_menu(lst):
  18. # 显示菜单
  19. show_list = [
  20. '+--------------------------------+',
  21. '1) 添加学生信息',
  22. '2) 显示所有学生的信息',
  23. '3) 删除学生信息',
  24. '4) 修改学生成绩',
  25. '5) 按学生成绩高-低显示学生信息',
  26. '6) 按学生成绩低-高显示学生信息',
  27. '7) 按学生年龄高-低显示学生信息',
  28. '8) 按学生年龄低-高显示学生信息',
  29. '9) 保存学生信息到文件(si.txt)',
  30. '10) 从文件中读取数据(si.txt)',
  31. 'q) 退出',
  32. '+--------------------------------+'
  33. ]
  34. for row in show_list:
  35. print(row)
  36.  
  37. # 选择菜单
  38. menu_dic = {
  39. '': input_student, # 添加
  40. '': output_student, # 显示
  41. '': delete_student, # 删除
  42. '': modify_student, # 修改
  43. '': sort_student, # 排序
  44. '': sort_student,
  45. '': sort_student,
  46. '': sort_student,
  47. '': write_file, # 保存学生数据
  48. '': read_file, # 读取学生数据
  49. 'q': quit # 退出
  50. }
  51.  
  52. # 选择功能
  53. choice = input('>>>') or '-1'
  54. if choice in menu_dic:
  55. if choice == '':
  56. menu_dic[choice](lst, desc=False)
  57. elif choice == '':
  58. menu_dic[choice](lst, basis='age')
  59. elif choice == '':
  60. menu_dic[choice](lst, basis='age', desc=False)
  61. else:
  62. menu_dic[choice](lst)
  63. else:
  64. print("输入有误,请从新选择")
  65.  
  66. # 1.添加学生信息
  67. def input_student(lst):
  68. while True:
  69. name = input("请输入学生姓名:") or '-1'
  70. if name == '-1': break
  71. age = input("请输入学生年龄:")
  72. score = input("请输入学生成绩:")
  73. lst.append({'name': name,
  74. 'age': age,
  75. 'score': score
  76. })
  77.  
  78. # 2.显示所有学生信息
  79. def output_student(lst):
  80.  
  81. def head(length):
  82. s = '+%s+%s+%s+' % ('-' * (length), '-' * 5, '-' * 7)
  83. print(s)
  84.  
  85. def body(length, *args):
  86. s = '|%s|%s|%s|' % (args[0].center(length), args[1].center(5), args[2].center(7))
  87. print(s)
  88.  
  89. if lst:
  90. length = max(map(lambda x: len(x['name']), lst)) + 2
  91. head(length) # 开始表格线+------+-----+-------+
  92. body(length, 'name', 'age', 'score') # 抬头行| name | age | score |
  93. head(length) # 分割表格线+------+-----+-------+
  94.  
  95. for i in lst:
  96. info = (i['name'], i['age'], i['score'])
  97. body(length, *info) # 内容
  98. head(length) # 结束表格线+------+-----+-------+
  99. else:
  100. print("没有学生信息,请选择: 1)添加学生信息")
  101.  
  102. # 3.删除学生信息
  103. def delete_student(lst):
  104. choice = input("请输入要删除学生的姓名:") or '-1'
  105. sign = False
  106.  
  107. for i, item in enumerate(lst):
  108. if choice == item['name']:
  109. sign = True
  110. break
  111. else:
  112. print("你要删除的学生不存在")
  113.  
  114. if sign:
  115. lst.pop(i)
  116. print("已删除学生:%s的信息" % choice)
  117.  
  118. # 修改学生成绩
  119. def modify_student(lst):
  120. choice = input("请输入要修改学生的姓名:") or '-1'
  121.  
  122. for item in lst:
  123. if choice == item['name']:
  124. temp_list = [item]
  125. output_student(temp_list)
  126. score = input("请输入新的成绩:") or '-1'
  127. item['score'] = score
  128. print("已修改学生:%s的成绩" % choice)
  129. break
  130. else:
  131. print("你要修改成绩的学生不存在")
  132.  
  133. # 排序-->按选择的条件排序列表后,作为实参传递给显示函数output_student(lst)
  134. def sort_student(lst, basis='score', desc=True): # 默认按年龄大到小
  135. lst = sorted(lst, key=lambda dic: int(dic[basis]), reverse=desc)
  136.  
  137. output_student(lst)
  138.  
  139. # 保存学生信息
  140. def write_file(lst, file="si.txt"):
  141. try:
  142. f = open(file, "w")
  143. for i in lst:
  144. s = "%s,%s,%s\n" % (i['name'], i['age'], i['score'])
  145. f.write(s)
  146. f.flush()
  147. f.close()
  148. print("已成功保存学生信息到[%s]文件" % file)
  149. except IOError:
  150. print("文件打开失败")
  151.  
  152. # 读取学生信息
  153. def read_file(lst, file="si.txt"):
  154. try:
  155. f = open(file)
  156. while True:
  157. s = f.readline()
  158. if not s:
  159. f.close()
  160. break
  161. s = s.rstrip()
  162. s = s.split(",")
  163. dic = {'name': s[0], 'age': s[1], 'score': s[2]}
  164. lst.append(dic)
  165. print("已成功从文件:[%s]读取到学生信息" % file)
  166. except IOError:
  167. print("文件打开失败")
  168.  
  169. def main():
  170. """学生信息管理项目主逻辑入口"""
  171. while True:
  172. show_menu(L)
  173.  
  174. if __name__ == "__main__":
  175. L = []
  176. main()

12_Python语法示例(函数)的更多相关文章

  1. Swift常用语法示例代码(二)

    此篇文章整理自我以前学习Swift时的一些练习代码,其存在的意义多是可以通过看示例代码更快地回忆Swift的主要语法. 如果你想系统学习Swift或者是Swift的初学者请绕路,感谢Github上Th ...

  2. python学习第五讲,python基础语法之函数语法,与Import导入模块.

    目录 python学习第五讲,python基础语法之函数语法,与Import导入模块. 一丶函数简介 1.函数语法定义 2.函数的调用 3.函数的文档注释 4.函数的参数 5.函数的形参跟实参 6.函 ...

  3. java8-lambda常用语法示例

    常用语法示例: public static void main(String[] args) { List<OrderInfo> orderInfoList = Lists.newArra ...

  4. MySQL 储存过程-原理、语法、函数详细说明

    Mysql储存过程是一组为了完成特定功能的SQL语句集,经过编译之后存储在数据库中,当需要使用该组SQL语句时用户只需要通过指定储存过程的名字并给定参数就可以调用执行它了,简而言之就是一组已经写好的命 ...

  5. Linux常用命令语法+示例

    原文出自:https://blog.csdn.net/seesun2012 Linux常用命令:Linux查看日志命令总结:Tomcat相关:Linux配置网卡,连接外网:Linux下安装JDK:Li ...

  6. openresty开发系列14--lua基础语法3函数

    openresty开发系列14--lua基础语法3函数 一)function (函数) 有名函数: optional_function_scope function function_name( ar ...

  7. JAVA基础语法:函数(方法)、类和对象(转载)

    4.JAVA基础语法:函数(方法).类和对象 函数 在java中函数也称为方法,是一段具备某种功能的可重用代码块. 一个函数包括这几部分: 函数头 函数头包括函数访问修饰符,函数返回值类型, 函数名, ...

  8. python基础语法_9-0函数概念

    http://www.runoob.com/python3/python3-function.html 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代 ...

  9. java基础(环境设置,基础语法,函数数组)

    框架图 环境搭建 课程中常见dos命令: dir : 列出当前目录下的文件以及文件夹 md : 创建目录 rd : 删除目录 cd : 进入指定目录 cd.. : 退回到上一级目录 cd/ : 退回到 ...

随机推荐

  1. 016_go语言中的递归

    代码演示 package main import "fmt" func fact(n int) int { if n == 0 { return 1 } return n * fa ...

  2. Python高性能HTTP客户端库requests的使用

    Python中有许多HTTP客户端.使用最广泛且最容易的是requests. 持续连接 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手.很 ...

  3. 在Linux系统中安装Tomcat详细教程

    首先在官网下载jdk和Tomcat的压缩包 这里下载jdk-8u241-linux-x64 .tar.gz 和apache-tomcat-8.5.50.tar.gz 然后解压jdk压缩包 tar –z ...

  4. Python中json.dump与repr的区别

    Json是一种轻量级的数据交换格式,Python3 中可以使用 json 模块来对 JSON 数据进行编解码,它包含了两个函数: 引入json包: import json json.dumps(): ...

  5. Kerberos认证原理及基于Kerberos认证的NFS文件共享

    目录 Kerberos认证原理 简介 client访问server过程 一.Authentication Service Exchange (AS Exchange) 二.Ticket Grantin ...

  6. s2-001漏洞复现

    struts2-001 该漏洞因为用户提交表单数据并且验证失败时,后端会将用户之前提交的参数值使用 OGNL 表达式 %{value} 进行解析,然后重新填充到对应的表单数据中.例如注册或登录页面,提 ...

  7. 设计模式详解及Python实现

    设计模式及Python实现 设计模式是什么? Christopher Alexander:"每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心*.这样你就能一次又一 ...

  8. WKWebView 网络请求Header 丢失

    WKWebView 是苹果手机上主要的H5加载控件,它相比UIWebView 有诸多优势.在次不做比较,但是它的坑缺比较多.网上也有很多的例子但是做的比较好的真不多,我在这里推荐俩博客供大家参考.ht ...

  9. 企业项目实战 .Net Core + Vue/Angular 分库分表日志系统 | 前言

    介绍 大家好我是初久,一名从业4年的.Net开发攻城狮,从今天开始我会和大家一起对企业开发中常用的技术进行分享,一方面督促自己学习,一方面也希望大家可以给我指点出更好的方案,我们一起进步. 项目背景 ...

  10. echarts 导出为word文档

    https://www.jianshu.com/p/5bd47ab59bbe 主要思路:前台echarts生成图片后,获取base64码,传给后台解析,然后写入freemarker模板,进行下载. 图 ...