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

Python循环调试:如何为列表学生录入成绩并正确终止循环

问题分析与解决方案

问题原因

  1. 只显示一个学生名:你先执行了遍历student_list的for循环,循环结束后变量x会停留在列表最后一个元素"Jamie"。之后的while循环里,student_name一直赋值为这个x,且完全没和student_list的其他元素关联,所以只会显示同一个名字。
  2. 循环无法终止:每次进入while循环时,你都把studentNum重置为0,之后加1变成1,永远满足不了studentNum >4的break条件,循环会无限运行。

解决方案一:用for循环直接遍历学生列表(推荐)

这种写法最简洁,天然对应4次循环,每个学生依次处理:

# Define the list of students
student_list = ["John", "Jimmy", "James", "Jamie"]

# 遍历每个学生,自动完成4次循环
for student_name in student_list:
    print(f"\n当前处理学生: {student_name}")
    # 用户输入各项成绩
    quiz_grade = int(input("请输入测验总分: "))
    assignment_grade = int(input("请输入作业总分: "))
    discussion_grade = int(input("请输入讨论总分: "))
    
    # 计算加权平均分
    wtAvgGrade = discussion_grade * 0.15 + quiz_grade * 0.35 + assignment_grade * 0.5
    
    # 输出结果
    print(f"\n{student_name}的加权平均分是: {wtAvgGrade}")

解决方案二:修复原有的while循环

如果坚持用while循环,需要把计数变量移到循环外,并通过索引获取对应学生:

# Define the list of students
student_list = ["John", "Jimmy", "James", "Jamie"]
studentNum = 0  # 计数变量放在循环外,避免每次重置

while studentNum < 4:
    student_name = student_list[studentNum]  # 通过索引获取当前学生
    print(f"\n当前处理学生: {student_name}")
    
    # 用户输入各项成绩
    quiz_grade = int(input("请输入测验总分: "))
    assignment_grade = int(input("请输入作业总分: "))
    discussion_grade = int(input("请输入讨论总分: "))
    
    # 计算加权平均分
    wtAvgGrade = discussion_grade * 0.15 + quiz_grade * 0.35 + assignment_grade * 0.5
    
    # 输出结果
    print(f"\n{student_name}的加权平均分是: {wtAvgGrade}")
    
    studentNum += 1  # 每次循环后计数加1,直到达到4时终止循环

内容的提问来源于stack exchange,提问作者Chocalte Bean

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 06:30:53