如何用列表元素作为字典键实现GPA计算程序?
问题解决:Python GPA计算程序修正
问题概述
需要实现以下功能:
- 基于给定的绩点字典
gradePoints、课程列表courseList,从gradeList随机选取成绩字母,从creditList随机选取学分 - 通过成绩字母从字典获取对应绩点,结合学分计算单门课的课程价值(绩点×学分)
- 累加总学分和总课程价值,计算最终GPA
- 格式化输出课程、成绩、课程价值及GPA
现有代码存在以下问题:
- 错误使用
random.randint()获取列表元素,得到的是索引而非实际值,且索引范围超出列表边界 - 总学分和总课程价值未做累加,每次循环都会被当前课程的值覆盖
- 输出格式混乱,未正确对齐课程、成绩、课程价值字段
- 未输出成绩字母,直接打印了绩点数值
修正后的代码
import random gradePoints = {"A":4,"B":3,"C":2,"D":1,"F":0} courseList = ["CST 161","Mat 144","ENG 201","PSY 101","HIS 101"] gradeList = ["A","B","C","D","F"] creditList = [3,4] totalCredits = 0 qualityPoints = 0 # 格式化输出表头,固定宽度保证对齐 print(f"{'Course':<8} {'Grade':<5} {'Value per course'}") print("-" * 30) for course in courseList: # 直接从列表随机选取元素 grade = random.choice(gradeList) credit = random.choice(creditList) # 获取对应绩点并计算课程价值 point = gradePoints[grade] value = point * credit # 累加总学分与总课程价值 totalCredits += credit qualityPoints += value # 格式化输出单门课程信息 print(f"{course:<8} {grade:<5} {value}") # 计算并输出GPA,处理总学分为0的异常情况 if totalCredits > 0: gpa = qualityPoints / totalCredits print(f"\nGPA is: {round(gpa, 2)}") else: print("\nGPA cannot be calculated: total credits is 0")
关键修正点
- 使用
random.choice()直接从列表中选取随机元素,避免索引错误 - 将总学分、总课程价值的赋值改为累加操作(
+=),确保统计结果正确 - 利用
f-string的固定宽度格式化(<8、<5)实现输出对齐 - 添加分隔线提升可读性,同时处理总学分为0的异常场景,避免除以0报错
- 正确输出成绩字母,匹配需求的输出格式
示例输出
Course Grade Value per course ------------------------------ CST 161 A 12 Mat 144 B 9 ENG 201 C 8 PSY 101 F 0 HIS 101 D 4 GPA is: 2.36
内容的提问来源于stack exchange,提问作者William Rivas
相关产品推荐
相关产品推荐

