题目一

任务描述

蔡若坤组织了一次1000米跑测试,3分54秒及格,3分33秒良好,3分14秒优秀。请计算及格率和优良率,用百分数表示,百分号前的部分四舍五入保留整数。

相关知识

为了完成本关任务,你需要掌握:

  1. for循环遍历列表
  2. if分支语句
  3. 字符串格式化

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%}'
第二关在下一页