为什么Python使用range生成1-6编号列表时每行内容重复打印多次?
问题根因
- 代码开头错误覆盖了首次读取的学生姓名:读取第一行学生姓名后,语句
stu_name = 0直接将值重置为数字0,打乱了后续文件读取逻辑 - 编号生成逻辑错误:使用
for x in range(1)循环只能生成单个0值,要实现1-6的连续编号,直接复用学生计数变量即可,不需要额外加循环 - 分数判断存在漏洞:仅覆盖了<60和>60的场景,漏掉了分数等于60的分支
- 不及格人数统计逻辑错误:
student_fail = num_stu < 60得到的是布尔值,需要单独声明变量统计不及格的学生数 - 通过率硬编码为固定值,没有根据实际计算结果输出
修正后代码
def main(): file_students = open("student_points.txt", "r") stu_name = file_students.readline() num_stu = 1 stu_points = 0 fail_count = 0 print(f"Student Points Grade") print("-------------------------------------\n") while stu_name != "": stu_name = stu_name.rstrip("\n") stu_points = file_students.readline() stu_points = int(stu_points) if stu_points < 60: print(num_stu, f"{stu_name:15} {stu_points} F") fail_count += 1 else: print(num_stu, f"{stu_name:15} {stu_points}") num_stu += 1 stu_name = file_students.readline() file_students.close() total_stu = num_stu - 1 pass_rate = (total_stu - fail_count) / total_stu * 100 print() print(f"Number of students processed = {total_stu}") print(f"Percentage of students passing = {pass_rate:.0f}%") print(f"Number of students failing = {fail_count}") if __name__ == "__main__": main()
运行说明
修正后代码会按1到6的顺序为每个学生生成唯一编号,不会出现重复打印的问题,同时学生人数、通过率、不及格人数都会按实际读取结果正确统计。
内容的提问来源于stack exchange,提问作者hanksbred
相关产品推荐
相关产品推荐

