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

如何用列表元素作为字典键实现GPA计算程序?

问题解决:Python GPA计算程序修正

问题概述

需要实现以下功能:

  • 基于给定的绩点字典gradePoints、课程列表courseList,从gradeList随机选取成绩字母,从creditList随机选取学分
  • 通过成绩字母从字典获取对应绩点,结合学分计算单门课的课程价值(绩点×学分)
  • 累加总学分和总课程价值,计算最终GPA
  • 格式化输出课程、成绩、课程价值及GPA

现有代码存在以下问题:

  1. 错误使用random.randint()获取列表元素,得到的是索引而非实际值,且索引范围超出列表边界
  2. 总学分和总课程价值未做累加,每次循环都会被当前课程的值覆盖
  3. 输出格式混乱,未正确对齐课程、成绩、课程价值字段
  4. 未输出成绩字母,直接打印了绩点数值

修正后的代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 20:50:27