You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 07:27:02