题目一
任务描述
蔡若坤组织了一次1000米跑测试,3分54秒及格,3分33秒良好,3分14秒优秀。请计算及格率和优良率,用百分数表示,百分号前的部分四舍五入保留整数。
相关知识
为了完成本关任务,你需要掌握:
- for循环遍历列表
- if分支语句
- 字符串格式化
for循环遍历列表
lst = ['123', '456', '789', '012']
for i in lst:
print(i)
输出:
123
456
789
012
if分支语句
x = 10
if x < 0:
print('负数')
elif x == 0:
print(0)
elif x > 0:
print('正数')
输出:
正数
字符串格式化
字符串格式化有几种方法,本关只介绍与百分数有关的应用,其他具体的应用请查阅官方文档:
- %方法
rate = 0.456
print('%.2f%%' % (rate*100))
输出:46%
- format方法
rate = 0.456
print('{:.0%}'.format(rate))
输出:46%
- f-string方法
rate = 0.456
print(f'{rate:.0%}')
输出:46%
编程要求
根据提示,在右侧编辑器补充代码,计算出及格率和优良率。
测试说明
平台会对你编写的代码进行测试:
测试输入:['3分44秒', '3分35秒', '3分55秒', '4分01秒', '4分00秒', '3分23秒', '3分07秒', '3分51秒', '3分16秒', '4分23秒']
预期输出:及格率:60%
优良率:30%
注意:不要更改答题区域外的代码,程序会自动调用你所编写的函数
开始你的任务吧,祝你成功!
题目一解答
先整理思路:计算及格率和优良率,就是用符合条件的人数除以总人数,利用字符串格式化方法返回结果
先表示出人数
# 总人数就是列表的长度
total = len(lst)
# 初始化及格人数和优良人数的计数器为0
pass_count, great_count = 0, 0
接着遍历列表里面的每一个成绩,对其进行判断,时间小于234秒的就是及格,小于213秒的就是优良。为了比较时间,我们还需把列表中的成绩x分xx秒
转化为秒。
for i in lst:
# 利用字符串的索引与分片取出对应的分和秒数,将其转化为整数
minutes, seconds = int(i[0]), int(i[2:-1])
# 计算成绩
score = minutes * 60 + seconds
# 判断分级
if score <= pass_score:
# 计数器加一
pass_count += 1
if score <= great_score:
great_count += 1
此处容易出现的错误就是没有把良好的人算在及格的人里面
if score <= great_score:
great_count += 1
elif score <= pass_score:
pass_count += 1
人数确定了之后就可以计算及格率和优良率了
pass_rate = pass_count / total
great_rate = great_count / total
最后格式化
pass_rate = f'{pass_rate:.0%}'
great_rate = f'{great_rate:.0%}'
完整代码如下:
total = len(lst)
pass_count, great_count = 0, 0
pass_score, great_score = 234, 213
for i in lst:
minutes, seconds = int(i[0]), int(i[2:-1])
score = minutes * 60 + seconds
if score <= pass_score:
pass_count += 1
if score <= great_score:
great_count += 1
pass_rate = pass_count / total
great_rate = great_count / total
pass_rate = f'{pass_rate:.0%}'
great_rate = f'{great_rate:.0%}'
第二关在下一页
Pages: 1 2
Comments NOTHING