Python遍历学生列表查询ID时如何仅输出匹配的平均成绩结果
问题根源
你的代码存在两处逻辑问题:
- 每次遍历单个学生时都会做分支判断并输出内容,没有先完成匹配再统一输出,导致遍历每个非目标学生时都会输出"not found"
- 无成绩的判断没有和输入ID绑定,哪怕遍历到的不是目标学生,只要该学生成绩为空就会输出对应提示
修改思路
- 遍历过程中仅做匹配记录,找到对应学生后标记结果,匹配完成后再统一输出
- 匹配到目标学生后直接跳出循环,减少不必要的遍历
- 无成绩、未找到等提示的输出逻辑,全部和目标学生的匹配结果绑定,不输出其他学生的相关信息
修改后代码
students = [ # 存储学号、姓名、各科成绩的列表 ("123", "Adam", [58, 68, 74]), ("925", "Bob", []), ("456", "Carly", [68, 72, 100]), ("888", "Deborah", [68, 99, 100]), ("789", "Ethan", [52, 88, 73]) ] input_id = str(input("Enter Student id: ")) # 初始化匹配标记 found = False target_name = "" avg_score = 0 no_grades = False # 遍历学生列表 for student in students: s_id, s_name, s_grades = student if s_id == input_id: found = True target_name = s_name if not s_grades: no_grades = True else: avg_score = sum(s_grades) / len(s_grades) break # 匹配到目标后直接跳出循环,无需继续遍历 # 遍历完成后统一输出结果 if found: if no_grades: print(target_name, "has no grades") else: print(target_name, avg_score) else: print(input_id, "not found")
修改后输入学号456时,仅会输出Carly 80.0,不会产生其他无关内容。
内容的提问来源于stack exchange,提问作者Shoshan Ben-Tzvi
相关产品推荐
相关产品推荐

