se6cxpp 发表于 2021-4-6 11:05

自学python-4-打分程序

本帖最后由 se6cxpp 于 2021-4-6 11:28 编辑

这个案例有些老套,也是列表的综合练习,个人增加了一些难度

设计要求: 歌手大奖赛中,有5个评委为参赛的选手打分,分数为1~100分。选手最后得分为:去掉一个最高分和一个最低分后,取其余3个分数的平均值位最终成绩。


知识点
列表索引


一、基础问题
1、解决评分录入
a=int(input("请输入第1位评委对选手的打分(0~100分):"))
b=int(input("请输入第2位评委对选手的打分(0~100分):"))
c=int(input("请输入第3位评委对选手的打分(0~100分):"))
d=int(input("请输入第4位评委对选手的打分(0~100分):"))
e=int(input("请输入第5位评委对选手的打分(0~100分):"))

print(a,b,c,d,e)

这个还是很小儿科,只需input即可实现

2、计算最大值与最小值
a=int(input("请输入第1位评委对选手的打分(0~100分):"))
b=int(input("请输入第2位评委对选手的打分(0~100分):"))
c=int(input("请输入第3位评委对选手的打分(0~100分):"))
d=int(input("请输入第4位评委对选手的打分(0~100分):"))
e=int(input("请输入第5位评委对选手的打分(0~100分):"))

print(max(a,b,c,d,e))
print(min(a,b,c,d,e))

3、“暴力”计算结果
a=int(input("请输入第1位评委对选手的打分(0~100分):"))
b=int(input("请输入第2位评委对选手的打分(0~100分):"))
c=int(input("请输入第3位评委对选手的打分(0~100分):"))
d=int(input("请输入第4位评委对选手的打分(0~100分):"))
e=int(input("请输入第5位评委对选手的打分(0~100分):"))

print(max(a,b,c,d,e))
print(min(a,b,c,d,e))
print((a+b+c+d+e-max(a,b,c,d,e)-min(a,b,c,d,e))/3)

通过简单的加减和除法得到预期结果


二、评委突增
问题:这时不再是5个评委而是20个评委
# a=int(input("请输入第1位评委对选手的打分(0~100分):"))
# b=int(input("请输入第2位评委对选手的打分(0~100分):"))
# c=int(input("请输入第3位评委对选手的打分(0~100分):"))
# d=int(input("请输入第4位评委对选手的打分(0~100分):"))
# e=int(input("请输入第5位评委对选手的打分(0~100分):"))
# f=...
# g=...
# h=...
# i=...
# j=...


# print(max(a,b,c,d,e...))
# print(min(a,b,c,d,e...))
# print((a+b+c+d+e+...-max(a,b,c,d,e...)-min(a,b,c,d,e....))/X)

根据之前的经验就显然把自己搞崩溃了,直接把这个问题转变成背英文字母表了

1、借助循环实现录入
暂定还是5个评委
a=*5
print("请输入5位评委对选手的打分(0~100分):")
for i in range(0,5):
    a = int(input("请输入第%d位评委的打分:" %(i+1)))   
print(a)

2、通过排序和切片筛选数据
不再用眼睛去筛选数据
a = *5
print("请输入5位评委对选手的打分(0~100分):")
for i in range(0,5):
    a = int(input("请输入第%d位评委的打分:" %(i+1)))
a.sort()          #对列表排序
print("最高分",a)
print("最低分",a)
print("最终得分",(a+a+a)/3)

3、真正实现多人(随机)评分
x=int(input('输入评委人数:'))
a=*x
print("请依次输入",x,"位评委对选手的打分(0~100分):")
for i in range(x):
    a = int(input("请输入第%d位评委的打分:" %(i+1)))   
a.sort()          #对列表排序
b=sum(a)
print("最高分",a)
print("最低分",a)
print("最终得分",(b-a-a)/(x-2))

核心解决分数计算时的索引用法

三、精进探讨
问题:如果在初始选择了20个评委,在评分过程中由于突发事件5位评委离场,在不退出程序的情况下还能继续计算最终成绩应如何修改
思路:利用while循环设置选项,如果在输入成绩时录入“Q”则结束录入,将之前的数据进行计算。

se6cxpp 发表于 2021-4-6 12:17

一卷狂梦天地飞 发表于 2021-4-6 11:44
请问输完第一个评委分数要按回车吗,这样之后就不运行代码内容了

是的,一开始代码有问题,是因为创建列表为空,而后面都是需要修改列表内容,所以报错,已经更新了内容,将初始列表内容根据评委数变更为多个0项,就能修改了

se6cxpp 发表于 2021-4-6 12:20

平淡最真 发表于 2021-4-6 11:47
人数可以不定义吧,直接a=[]
然后一个一个加

一开始确实是这么想,但要修改人数时,还需要改代码里for循环的range,就显得麻烦了

Anyling 发表于 2021-4-6 11:15

嗯,厉害,我也想学pyrhon

可言者无一二 发表于 2021-4-6 11:25

学习了,大佬

zj1977lsz 发表于 2021-4-6 11:26

我也要学,但是没有楼主这么有毅力

一只低头小飞猪 发表于 2021-4-6 11:28

****学了一个礼拜python 就放弃了

一卷狂梦天地飞 发表于 2021-4-6 11:44

请问输完第一个评委分数要按回车吗,这样之后就不运行代码内容了

平淡最真 发表于 2021-4-6 11:47

人数可以不定义吧,直接a=[]
然后一个一个加

tomato123123 发表于 2021-4-6 12:32

还是这种递进的学习比较容易
页: [1] 2
查看完整版本: 自学python-4-打分程序