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
相关产品推荐
相关产品推荐

