# 课后题 # 1. from math import * def area(r): return pi * r ** 2 print('半径为3.5的圆的面积:{:.3f}'.format(area(3.5))) print('半径为2.9的圆的面积:{:.3f}'.format(area(2.9))) # 半径为3.5的圆的面积:38.485 # 半径为2.9的圆的面积:26.421 m = area(6.2) n = area(3.3) print('圆环面积:{:.3f}'.format(m - n)) # 圆环面积:86.551
# 参考答案 # def area(r): # # return round(pi*r**2,2) # # from math import pi # # print(area(3.5),area(2.9)) # # 38.48 26.42 # # #圆环面积πR²-πr² # # print(area(6.2) - area(3.3)) # # 86.55000000000001 # 2. def showMsg(n,name): for i in range(n): print("Happy Birthday {}".format(name)) showMsg(3,'wzm') # Happy Birthday wzm # Happy Birthday wzm # Happy Birthday wzm
# 参考答案 # def showMsg(n,name): # # for i in range(n): # # print("Happy Birthday {}".format(name)) # # showMsg(2,'小明') # # Happy Birthday 小明 # # Happy Birthday 小明
# 3. # 已知成绩列表 s = {'小李':[77,54,57],'小张':[89,66,78],'小陈':[90,93,80],'小杨':[69,58,93]} # 输出结果为:{'小李': 62, '小张': 77, '小陈': 87, '小杨': 73}
def avg(a,b,c): return int((a + b + c) / 3) s = {'小李':[77,54,57],'小张':[89,66,78],'小陈':[90,93,80],'小杨':[69,58,93]} s1 = {} for k,v in s.items(): # print(v) a = v[0] b = v[1] c = v[2] av = avg(a,b,c) s1[k] = av print(s1) # {'小李': 62, '小张': 77, '小陈': 87, '小杨': 73} # 参考答案 # def avg(a,b,c): # # return int((a+b+c)/3) # # s = {'小李':[77,54,57], # # '小张':[89,66,78], # # '小陈':[90,93,80], # # '小杨':[69,58,93]} # # dict_n = {} # # for k,v in s.items(): # # dict_n[k] = avg(v[0],v[1],v[2]) # # print(dict_n) # # {'小李': 62, '小张': 77, '小陈': 87, '小杨': 73} # 4. # 已知成绩列表 s={'小李':[77,54],'小张':[89,66,78,99],'小陈':[90],'小杨':[69,58,93]} # # 输出结果为:{'小李':65,'小张':83,'小陈':90,'小杨': 73}3]} def avg(lst): return int(sum(lst)/len(lst)) s={'小李':[77,54],'小张':[89,66,78,99],'小陈':[90],'小杨':[69,58,93]} s2 = {} for k,v in s.items(): s2[k] = avg(v) print(s2) # {'小李': 65, '小张': 83, '小陈': 90, '小杨': 73}
# 参考答案 # def avg(lst): # # return int(sum(lst)/len(lst)) # # s = {'小李':[77,54], # # '小张':[89,66,78,99], # # '小陈':[90], # # '小杨':[69,58,93]} # # dict_n = {} # # for k,v in s.items(): # # dict_n[k] = avg(v) # # print(dict_n) # # {'小李': 65, '小张': 83, '小陈': 90, '小杨': 73}
# 5. # dict={'01':[67,88,45],'02':[97,68,85],'03':[97, 98, 95],'04':[67,48,45],'05':[82,58,75],'06':[96,49,65]} dict={'01':[67,88,45],'02':[97,68,85],'03':[97, 98, 95],'04':[67,48,45],'05':[82,58,75],'06':[96,49,65]} # ①
def more85(dic): n = [] for k,v in dic.items(): for i in range(3): # 函数体 用列表生成式 的等价写法 if v[i] < 85: break # n = [k for k, v in dic.items() if all(x >= 85 for x in v[:3])] else: n.append(k) return n print('每门成绩均大于等于 85 的学生的学号:') print(more85(dict) # # 每门成绩均大于等于 85 的学生的学号: # # ['03'] # 参考答案 # # (1) # # def avg_select(dict): # # num_85 = [] # # for k,v in dict.items(): # # if min(v)>85: # # num_85.append(k) # # return num_85 # # print(avg_select(dict)) # # ['03'] # ② def avg3(dic): a = {} for k,v in dic.items(): a[k] = (round(sum(v)/len(v),2),sum(v)) return a print('每一个学号对应的平均分和总分,结果保留两位小数:') print(avg3(dict)) # 每一个学号对应的平均分和总分,结果保留两位小数: # {'01': (66.67, 200), '02': (83.33, 250), '03': (96.67, 290), '04': (53.33, 160), '05': (71.67, 215), '06': (70.0, 210)}
# 参考答案 # # (2) # # def avg(dict): # # avg_d = {} # # for k, v in dict.items(): # # d_v = [0, 0] # # d_v[0] = round(sum(v)/len(v),2) # # d_v[1] = sum(v) # # avg_d[k] = d_v # # return avg_d # # print(avg(dict)) # # {'01': [66.67, 200], '02': [74.0, 222], '03': [96.67, 290], '04': [53.33, 160], '05': [71.67, 215], '06': [70.0, 210]} # ③ def rank(dic): b = {} for k,v in dic.items(): b[k] = sum(v) return sorted(b.keys(),key= lambda x:b[x]) print('按总分升序排列的学号列表:') print(rank(dict)) # 按总分升序排列的学号列表: # ['04', '01', '06', '05', '02', '03']
# 参考答案 # # (3) # # def sum_score(dict): # # list_sum = [] # # dict_n = {} # # for k, v in dict.items(): # # dict_n[k] = sum(v) # # list_n = [(v,k) for k,v in dict_n.items()] # # list_n.sort() # # for i in list_n: # # list_sum.append(i[1]) # # return list_sum # # print(sum_score(dict)) # # ['04', '01', '06', '05', '02', '03'] # 6. # 用递归方法求数列“1,1,1,3,5,9,17,31...”的前 20 项 def sequence(n): if n == 1 or n == 2 or n == 3: return 1 else: return sequence(n-1) + sequence(n-2) + sequence(n-3) print('数列“1,1,1,3,5,9,17,31...”的前 20 项:') for i in range(1,20+1): print("{:<8}".format(sequence(i)),end=' ' if i % 5 != 0 else "\n") # 1 1 1 3 5 # 9 17 31 57 105 # 193 355 653 1201 2209 # 4063 7473 13745 25281 46499
# 参考答案 # def fact(n): # # if n in [1,2,3]: # # return 1 # # else: # # return fact(n-1) + fact(n-2) + fact(n-3) # # list_f =[] # # for i in range(1,21): # # list_f.append(fact(i)) # # print(list_f) # # [1, 1, 1, 3, 5, 9, 17, 31, 57, 105, 193, 355, 653, 1201, 2209, 4063, 7473, 13745, 25281, 46499]