# # 练习: # # 1. 用map函数求: # # 1**3 + 2**3 + 3 ** 3 + .... 9**3 的和 def add_(x): return x ** 3 print(sum(map(add_, range(1, 10)))) # # 2. 用map函数求: # # 1**4 + 2**4 + 3 ** 4 + .... 20**4 的和 def add_(x): return x ** 4 print(sum(map(add_, range(1, 21)))) # # 练习: # # 1. 将 1 ~ 20 的偶数用filter生成可迭代对象后将可迭代对象生成的数放入到列表L中 def ous(x): if x % 2 == 0: return True L = list(filter(ous, range(1, 20))) print(L) # # 2. 写一个函数is_prime(x) 判断x是否是素数 # # 用filter函数打印出: 20 ~ 30之间的全部素数 def is_prime(x): for i in range(2, x): if x % i == 0: break return True for x in filter(is_prime, range(20, 30)): print(x) # # 练习: # # names = ['Tom', 'Jerry', 'Spike', 'Tyke'] # # 排序的依据为字符串的反序: # # 'moT' yrreJ ekipS ekyT # # 结果: # # ['Spike', 'Tyke', 'Tom', 'Jerry'] names = ['Tom', 'Jerry', 'Spike', 'Tyke'] def fz_number(x): return x[::-1] L = sorted(names, key=fz_number) print(L) # # 练习: # # 写函数 mysum(n)用递归方式实现求和 # # def mysum(n): # # # 用递归方式求和 # # ... # # print(mysum(100)) # 5050 def mysum(x): if x == 1: return 1 return x + mysum(x - 1) print(mysum(100)) # # 练习: # # 1. 已知五位朋友在一起 # # 第五位朋友比第四位朋友大2岁 # # 第四位朋友比第三位朋友大2岁 # # 第三位朋友比第二位朋友大2岁 # # 第二位朋友比第一位朋友大2岁 # # 第一位朋友说它10岁 # # 写程序打印出第五位朋友 和第三位朋友 的年龄 def age_2(x): if x == 1: return 10 return 2 + age_2(x - 1) print(age_2(3)) print(age_2(5)) # # 2. 已知有列表: # # L = [[3, 5, 8], 10, [[13, 14], 15, 18], 20] # # 1) 写一个函数print_list(lst) 打印出所有元素 # # print(L) # 打印 3 5 8 10 13 14 .... # L = [[3, 5, 8], 10, [[13, 14], 15, 18], 20] def print_list(lst): for x in lst: if type(x) != list: print(x) else: print_list(x) print_list(L) # # 2) 写一个函数sum_list(lst) 返回这个列表中所有元素的和 # # print(sum_list(L)) # 86 # # 注: # # type(x) 可以返回一个变量的类型 # # 如: # # >>> type(20) is int # True # # >>> type([1, 2, 3]) is list # True L = [[3, 5, 8], 10, [[13, 14], 15, 18], 20] def sum_list(lst): s = 0 for x in lst: if type(x) is list: s += sum_list(x) else: s += x return s print(sum_list(L)) # 练习: # 1. 输入一个圆的半径,打印出这个圆的面积 # 2. 输入一个圆的面积,打印出这个圆的半径 # (要求用math模块内的函数和数据实现) import math r = float(input("please inout R:")) s = math.pi * r ** 2 print("面积是:", s) s = float(input("please inout S:")) math.sqrt(s / 2) print(r) # 练习: # 写一个程序,输入你的出生日期, # 1) 算出你已经出生多少天? # # 2) 算出你出生的那天是星期几? import time year = int(input("please input:")) month = int(input("please input:")) day = int(input("please input:")) tuple_birth = (year, month, day, 0, 0, 0, 0, 0, 0) x = time.mktime(tuple_birth) t = time.time() second = t - x print("您已经出生", second / 60 / 60 // 24, '天') t = time.localtime(x) weeks = { 0: "星期一", 1: "星期二", 2: "星期三", 3: "星期四", 4: "星期五", 5: "星期六", 6: "星期日" } print("您出生的那天是:", weeks[t[6]]) # 练习: # 1. 请编写函数fun 其功能是计算下列多项式的和: # fn = 1 + 1/1! + 1/2! + 1/3! + 1/4! + .. + 1/n! # (建义用数学模块的factorial实现) # 求当n 等于100时,fn的值 # 看一下fn(100)的值是什么 import math def fun(n): if n == 0: return 1 return 1 / math.factorial(n) + fun(n - 1) print(fun(100)) # 2.71828 # 2. 写一个程序,以电子时钟格式: # HH:MM:SS格式显示时间 # 要求每隔一秒变化一次 # 3 写函数f(n)求下多项式的和 # fn = 1/1 - 1/3 + 1/5 - 1/7 + 1/9 .... 1/(2*n-1)的和 # 求当n取值为1000000时, # 1) 打印 f(1000000) 的值 # 2) 打印 f(1000000) * 4的值,看看是什么 # 练习: # 1. 猜数字游戏 # 随机生成一个 0~100之间的一个整数,用变量x绑定 # 让用户输入一个数y,输出猜数字的结果: # 1) 如果y大于x则提示: "您猜大了" # 2) 如果y小于x则提示: "您猜小了" # 3) 如果y等于生成的数x,则提供示用户"恭喜您猜对了 "并退出猜数字 # 循环重复上述步聚,直到猜对为止。 # 猜对了,显示用户猜数字的次数,然后退出程序 # 练习: # 1. 写一个闹钟程序,启动时设置定时时间, # 到时间后打印一句"时间到...." 然后退出程序 # 2. 模拟斗地主发牌,扑克牌共54张 # 黑桃('u2660'), 梅花('u2663'), 方块('u2665'), 红桃('u2666') # A2-10JQK # 大王、小王 # 三个人玩,每人发17张牌,底牌留三张 # 输入回车, 打印出第1个人的17张牌 # 输入回车, 打印出第2个人的17张牌 # 输入回车, 打印出第3个人的17张牌 # 输入回车, 打印三张底牌 # 3. 修改学生信息管理程序,将原student_info.py 拆分为模块 # 要求: # 1. 主事件循环放在main.py中 # 2. show_menu 函数放在menu.py中 # 3. 与学生操作相关的函数放在 student_info.py中 # 练习: # 写一个函数 get_score() 来获取学生成绩, # 要求用户输入 1~100的整数,输果输入出现异常,返此函数返回0, # 否则返回用户输入的成绩 # 示例: # def get_score(): # ... # score = get_score() # print("学生的成绩是:", score) # 练习: # 写一个函数 get_age()用来获取一个人的年龄信息 # 此函数规定用户只能输入1~140之间的整数,如果用户输入其它的数则直接触发ValueError类型的错误通知 # 如果用户输入的年龄大于140,则触发 # ValueError("年龄超出了正常值") # 如果用户输入的年龄小于1,则触发 # ValueError("年龄太小...") # def get_age(): # ... # try: # age = get_age() # print("用户输入的年龄是:", age) # except ValueError as err: # print('用户输入的不是1~140的整数,获取年龄失败') # print("原因是:", err) # 练习: # 1. 一个球从100米高空落下,每次落地后反弹高度是原高度的一半,再落下, # 1) 写程序算出皮球在第10次落地后反弹高度是多高? # 2) 打印出球共经过多少米的路程 # 2. 分解质因数, 输入一个正整数,分解质因数, # 如: # 输入: 90 # 则打印: # '90=2*3*3*5' # (质因数是指最小能被原数整除的素数(不包括1)) # 练习: # 有一个集合: # s = {'唐僧', '悟空', '八戒', '沙僧'} # 用 for语句来遍历所有元素如下: # for x in s: # print(x) # else: # print('遍历结束') # 请将上面的for语句改写为 用while语句和迭代器实现 # 练习: # 写一个生成器函数 myeven(start, stop) # 此函数用来生成从 start开始到stop结束(不包含)区间内的一系列偶数 # def myeven(start, stop): # .... # evens = list(myeven(10, 20)) # print(evens) # [10, 12, 14, 16, 18] # for x in myeven(21, 30): # print(x) # 22, 24, 26, 28 # L = [x**2 for x in myeven(3, 10)] # print(L) # 16 36 64 # 练习: # 已知有一个列表L # L = [2, 3, 5, 7] # 用生成器表达式从此列表中拿到数,生成 列表中数据的平方 # gen = ...... # 此处用生成器表达式实现 # L2 = list(gen) # L2 = [4, 9, 25, 49] # 思考: # L = [2, 3, 5, 7] # L2 = [x ** 2 for x in L] # 列表推导式 # it = iter(L2) # print(next(it)) # 4 # L[1] = 10 # print(next(it)) # 9 # 练习: # 写一个程序,读入任意行的文字,当输入空行时结束输入 # 打印带有行号的输入结果: # 如: # 请输入: hello<回车> # 请输入: world<回车> # 请输入: tarena<回车> # 请输入: <回车> # 直接回车结束输入 # 输出如下: # 第1行: hello # 第2行: world # 第3行: tarena # 练习: # 写一个程序,从键盘输入一段字符串存入s变量 # 1. 将此字符串转为字节串用变量b绑定,并打印出b # 2. 打印字符串s的长度和字节串b的长度 # 3. 将b字节串再转换为字符串用变量s2 绑定,判断 s2 和 s是否相同? # 练习: # 1. 写一个生成器函数primes生成素数, # 此生成器函数为 primes(begin, end) # 如: [x for x in primes(10, 20)] 将得到列表 # [11, 13, 17, 19] # 2. 写一个生成器函数,生成斐波那契数列的前n个数 # 1 1 2 3 5 8 13 # def fibonacci(n): # ... # yield... # 1) 输出前20个数: # for x in fibonacci(20): # print(x) # 2) 打印前40个数的和: # print(sum(fibonacci(40))) # 3. 写程序打印杨辉三角(只打印6层) # 1 # 1 1 # 1 2 1 # 1 3 3 1 # 1 4 6 4 1 # 1 5 10 10 5 1