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

Python选课计费代码报错:输入english和science提示math未定义

问题排查与修复:选课计费代码中的"变量未定义"错误

咱们先拆解下你遇到的问题:输入english和science时程序报错math is not defined,核心原因有两个:

1. 变量未提前初始化

你的代码里,只有当某个科目被匹配到时才会创建对应的变量(比如eng = 100),没被选中的科目(比如math、stem)根本没被定义过。当你最后尝试把eng + sci + math + stem相加时,Python找不到未定义的变量,自然就抛出错误了。

2. 条件判断逻辑混乱

你的elif分支是互斥的——比如第一个elif x is not "english"会直接跳过后面所有判断:只要当前科目不是english,就会执行eng = 0,science、stem、math的判断根本不会被触发。另外,用is比较字符串是不规范的,应该用==来比较值。


修复后的优化代码

print("Choose two subjects")
print("English $100")
print("Math $75")
print("Science $125")
print("Stem $200")

# 用字典存储科目与对应价格,同时初始化总价为0
subject_prices = {
    "english": 100,
    "math": 75,
    "science": 125,
    "stem": 200
}
total_cost = 0

# 读取输入并只取前两个科目(符合"选两个"的需求)
selected = input("Choose two subjects: ").split()[:2]

for subj in selected:
    subj_lower = subj.lower()
    # 检查科目是否有效,匹配"科目不匹配则未定义"的规则
    if subj_lower in subject_prices:
        total_cost += subject_prices[subj_lower]
    else:
        print(f"Warning: '{subj}' is not a valid subject, price undefined")

print(f"Total cost: ${total_cost}")

关键改动说明

  • 提前初始化容器:用字典统一管理科目价格,同时初始化总价变量,彻底避免"变量未定义"问题。
  • 优化判断逻辑:每个科目单独做有效性检查,不会出现互斥分支导致的逻辑遗漏。
  • 贴合需求的输入处理:自动截取前两个输入,严格对应"选两个科目"的任务要求。
  • 明确的错误提示:遇到无效科目时给出清晰提示,符合"科目不匹配则未定义"的规则。

如果你偏好保留原有的变量写法,也可以这样改:

print("Choose two subjects")
print("English $100")
print("Math $75")
print("Science $125")
print("Stem $200")

# 提前初始化所有科目变量为0,确保变量始终存在
eng = 0
math = 0
sci = 0
stem = 0

a = input("Choose two subjects: ").split()[:2]
for x in a:
    x = x.lower()
    if x == "english":
        eng = 100
    elif x == "math":
        math = 75
    elif x == "science":
        sci = 125
    elif x == "stem":
        stem = 200
    else:
        print(f"Subject '{x}' is undefined")

print(f"Total cost: ${eng + math + sci + stem}")

这个版本提前把所有科目变量初始化为0,即使没选某个科目,变量也存在,同时修正了elif的顺序,让每个科目判断都能被执行到。

内容的提问来源于stack exchange,提问作者Dev Patel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:59:10