吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2595|回复: 12
收起左侧

[Python 转载] 自学python-4-打分程序

[复制链接]
se6cxpp 发表于 2021-4-6 11:05
本帖最后由 se6cxpp 于 2021-4-6 11:28 编辑

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

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


知识点
列表索引


一、基础问题
1、解决评分录入
[Python] 纯文本查看 复制代码
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、计算最大值与最小值
[Python] 纯文本查看 复制代码
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、“暴力”计算结果
[Python] 纯文本查看 复制代码
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个评委
[Python] 纯文本查看 复制代码
# 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个评委
[Python] 纯文本查看 复制代码
a=[0]*5
print("请输入5位评委对选手的打分(0~100分):")
for i in range(0,5):
    a[i] = int(input("请输入第%d位评委的打分:" %(i+1)))   
print(a)


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


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


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

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

免费评分

参与人数 2吾爱币 +2 热心值 +2 收起 理由
可言者无一二 + 1 + 1 用心讨论,共获提升!
zj1977lsz + 1 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| 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
可言者无一二 发表于 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
还是这种递进的学习比较容易
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 17:49

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表