第一题:
现有一个字典存放着学生的学号和成绩。成绩列表分别是学生的语文、数学和英语成绩这三个数据:
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]}
完成以下操作:
(1)编写函数,返回每门成绩均大于等于85的学生学号。
(2)编写函数,返回每一个学号对应的平均分和总分(sum\len),结果保留两位小数。
(3)编写函数,返回按总分升序排列的学号列表。
(4)完善主程序语句,实现交互输入输出,以测试结果。
源码:
def find_students(dict):
students=[]
for key in dict:
if dict[key][0]>=85 and dict[key][1]>=85 and dict[key][2]>=85:
students.append(key)
return students
def sum_vag_students(dict):
info = {}
for key in dict:
scores = dict[key]
avg = round(sum(scores)/len(scores),2)##round使得保留两位小数
total = round(sum(scores),2)
info[key] = (avg,total)
return info
def sort_students(dict):
students = list(dict.keys())
sorted_students = sorted(students,key = lambda x:sum(dict[x]),reverse = False)
return sorted_students
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]}
while True:
print(" ")
print("欢迎使用此系统—Survivor")
print("****1:返回每门成绩大于等于85分的学生学号")
print("****2:求得每个学号对应平均值和总分")
print("****3:按照总分进行升序排序")
print("****4:退出系统")
ch = input("请输入选项:(1-4)")
print(" ")
if ch == '1':
print("每门成绩大于等于85分的学生学号为:{}".format(find_students(dict)))
elif ch == '2':
print("每个学号对应平均值和总分为:")
for key in sum_vag_students(dict):
print(key+":",sum_vag_students(dict)[key])
elif ch == '3':
print("按照总分进行升序排序后为:{}".format(sort_students(dict)))
elif ch == '4':
print("系统已退出!")
break
else:
print("输入错误!")
运行结果:
第二题:
请完成程序设计中的自定义函数模块函数体中带填充部分,实现“双人成行,套餐9折”,即若饮品点2杯且甜点点2份,则总价在单价之和基础上*0.9,除此之外,总价按所点产品原价汇总计算。
源码:
from itertools import combinations_with_replacement as cwr
#不可重复组合(允许同一个元素被选择多次)返回元组
cafes = {'科布奇诺':32,'摩卡':30}
cakes = {'抹茶蛋糕':28,'布朗尼':26}
def get_combo(cafeNum,cakeNum,cf,ck):
ret = {}##定义空字典保存菜单
##price_list = {**cf,**ck}##即为包含所有选择的字典
## print(price_list)
combos = cwr([(key, value) for key, value in cafes.items()] +
[(key, value) for key, value in cakes.items()], cakeNum + cafeNum)
for combo in combos:
## print(combo)
total_price = sum([p for k, p in combo])
if len([k for k, p in combo if k in cf]) == cafeNum and len([k for k, p in combo if k in ck]) == cakeNum:
ret[", ".join([k for k, v in combo])] = total_price*0.9
return ret
c = get_combo(2,2,cafes,cakes)
for key,value in c.items():
print(key,':',"花费{:.1f}元".format(value))
##print(get_combo(2,2,cafes,cakes))
运行结果:
第三题:
先模拟微信发红包的功能,要求编写红包函数hb,根据交互获得的红包总金额和总个数,实现拼手气红包的金额生成,并结合主程序语句运行测试。要求,红包金额有效,以分为单位。
源码:
##微信红包
import random as rd
def hb(s,n=5):
money_list = []
already = 0
for i in range(n-1):
now = rd.randint(1,int((s-already)*100))/100
money_list.append(now)
already += now
if n-i == 2:money_list.append(s - already)
rd.shuffle(money_list)
return money_list
args = eval(input("请输入逗号隔开的红包金额和红包个数(个数默认5个,若缺省个数逗号不能省略)"))
money_list = hb(*args)
for i,my in enumerate(money_list):
print("第{}个红包,金额为{:.2f}元".format(i+1,my))
运行结果:
END:世界上有两个我,一个期盼着死亡,一个渴望着重生。