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

Python折扣计算代码运行报student name is not defined错误该如何解决?

报错产生原因
  • 函数调用早于定义:代码第4行student = student()、第6行regular = regular()执行时,student和regular两个函数还没有被定义,直接触发未定义报错。
  • 逻辑顺序完全错误:两个函数的定义被写在了if判断分支内部,只有触发对应if分支时函数才会被创建,就算前面没有未定义报错,分支没走到的话函数依然不存在。同时函数内部return语句后的代码属于死代码,永远不会被执行,价格输入、折扣计算的逻辑放错了位置。
  • 变量与函数重名:将函数调用的返回值赋值给和函数同名的变量,就算函数预先定义完成,后续也会覆盖函数本身的引用。
  • 比较逻辑错误:input获取到的用户输入是字符串类型(只会是"student"或者"regular"),代码中拿输入值和student、regular变量/函数做相等判断,永远不会匹配成功。
  • 额外未定义问题:普通用户分支中调用的buyer(y)完全没有定义,就算前面的问题都修复,运行到该分支也会触发新的未定义报错。
可行修复方案

修正后的完整代码如下:

# 预先定义两个折扣计算函数
def student_discount(x):
    return x - (x * 0.1)

def regular_discount(y):
    return y - (y * 0.05)

# 获取用户身份输入
user_type = input("student or regular: ").strip().lower()
print(f"用户身份:{user_type}")

# 按身份匹配折扣逻辑
if user_type == "student":
    price = float(input("Enter the price: "))
    print(f"折后价为:{student_discount(price)}")
elif user_type == "regular":
    price = float(input("Enter the price: "))
    print(f"折后价为:{regular_discount(price)}")
else:
    print("errroor")

核心修改点:

  • 将折扣函数的定义移到代码最开头,保证调用前已经完成定义,同时函数名和业务变量做区分,避免重名覆盖。
  • 修正比较逻辑,直接判断用户输入的字符串是否为对应身份,不需要提前调用无意义的函数做比较。
  • 把价格输入、结果打印的逻辑从函数内部return之后移到分支判断内,保证正常执行。
  • 修正普通用户分支的函数调用错误,调用预先定义的regular_discount函数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 11:15:04