学生成绩查询程序:如何生成不同随机分数并存储至列表?
学生成绩查询程序问题解决方案
问题分析
你的代码已经通过random.sample(mark, k=4)生成了4个不重复的随机成绩,但存在两个核心问题:
- 打印成绩时直接重复输出整个成绩列表,没有逐个取出元素,导致显示内容重复
- 没有设计存储结构来保存学生对应的成绩
问题解决与代码修正
1. 实现每个成绩各不相同
你已经用random.sample()生成了不重复的随机数,只需在打印时遍历这个列表,逐个输出每个成绩即可。
2. 存储成绩到单独列表
推荐用字典来存储学生与成绩的对应关系(键为学生姓名,值为成绩列表),这样可以方便地保存和查询每个学生的成绩。
以下是修正后的完整代码:
import random def printMark(): print("Enter the names of your students") print("Press the enter key to store another name. Print q or Q when you're done.") classlist = [] # 处理第一个学生姓名输入,避免丢失 first_name = input("Enter student name: ") if first_name.lower() != 'q': classlist.append(first_name) # 继续添加其他学生 while True: name = input("") if name.lower() == 'q': break classlist.append(name) # 打印班级列表 print("\nClass list:") for name in classlist: print(name) # 存储学生成绩的字典 student_scores = {} # 查询学生成绩 while True: student_choice = input("\nEnter a student from your classlist (enter 'q' to quit): ") if student_choice.lower() == 'q': break if student_choice not in classlist: print("That student is not in your class") else: # 生成4个不重复的随机成绩 scores = random.sample(range(1, 101), k=4) # 存储成绩到字典 student_scores[student_choice] = scores # 逐个打印不同成绩 print(f"A1: {scores[0]}\nA2: {scores[1]}\nA3: {scores[2]}\nA4: {scores[3]}") # 可选:打印所有存储的学生成绩 print("\nStored student scores:") for student, marks in student_scores.items(): print(f"{student}: {marks}") # 调用函数 printMark()
关键修改说明
- 修复了第一个学生姓名丢失的问题:原代码中第一个输入的姓名被后续的
input()覆盖,未加入班级列表 - 用字典
student_scores存储每个学生的成绩列表,满足“成绩存储到单独列表”的需求 - 打印成绩时,从生成的成绩列表中逐个取出元素,确保每个成绩不同
- 增加了循环查询功能,用户可以多次查询不同学生的成绩,直到输入'q'退出
- 移除了冗余的参数传递,简化函数逻辑
内容的提问来源于stack exchange,提问作者Jhon Cather
相关产品推荐
相关产品推荐

