使用for循环创建二维数组时输出不符合预期,求解决方案
问题分析与解决
你的代码出现问题主要有三个原因:
grades列表未每次重置:grades定义在所有循环外部,每次处理新学生时没有清空,导致所有学生的成绩都累积到同一个列表里,而且你两次将同一个grades列表的引用添加到ClassGrade,所以最终两个元素指向同一个列表,内容完全重复。- 循环变量重复使用:外层和内层循环都用了
i,会导致变量被覆盖,逻辑混乱(比如内层循环会修改外层循环的i值)。 - 未使用输入的学生数量:你获取了
NumStudents变量,但外层循环写死了只运行2次,应该用这个变量来控制循环次数。
修正后的代码
ClassGrade = [] num_students = int(input("How Many Students Do You Have ? ")) num_subjects = 2 # 假设每个学生有2门成绩,可根据需求调整 for student_idx in range(num_students): # 每次处理新学生时,重新创建一个空的grades列表 grades = [] prompt = f"Input student {student_idx + 1}'s grades: " for subject_idx in range(num_subjects): grade = float(input(prompt)) grades.append(grade) ClassGrade.append(grades) print(ClassGrade)
关键修改说明
- 将
grades的定义移到外层循环内部,这样每个学生都会有一个独立的成绩列表,不会累积之前学生的成绩。 - 外层和内层循环使用不同的变量名(
student_idx和subject_idx),避免变量覆盖导致的逻辑错误。 - 用输入的
num_students控制外层循环次数,让代码更灵活,不再写死循环次数。 - 使用f-string格式化提示文本,代码更简洁易读。
测试输入学生2名,成绩分别为[56,80]和[90,66],最终输出会是[[56.0, 80.0], [90.0, 66.0]],符合预期。
内容的提问来源于stack exchange,提问作者mich
相关产品推荐
相关产品推荐

