Python新手求助:MPG计算代码出现mpg未定义的NameError问题
问题分析与修复
错误原因
- 变量作用域问题:
goodbye()函数内部尝试访问mpg变量,但这个变量是定义在main()函数里的局部变量,goodbye()无法直接访问它,因此触发NameError。 - 调用时机错误:在
main()里,你先调用了goodbye(),此时还未获取用户输入、计算出mpg的值,就算能访问变量,也没有有效数据。
修复步骤
- 修改
goodbye()函数,添加参数接收mpg值; - 在
main()里调整goodbye()的调用位置,放到计算出mpg之后; - 修正
your_mpg()函数里的变量名冲突问题(函数名和内部变量名重复)。
修复后的完整代码
def main(): miles_driven = 0.0 gallons_of_gas_used = 0.0 mpg = 0.0 print_welcome() print_encouragement() # 输入数据 miles_driven = your_miles_driven() gallons_of_gas_used = gas_used() # 计算MPG mpg = your_mpg(miles_driven, gallons_of_gas_used) print("Your miles per gallon:", mpg) # 计算完成后调用goodbye,并传入mpg参数 goodbye(mpg) def print_welcome(): print("Welcome to Ray's trip calculator!\n") def print_encouragement(): print("Let's figure out your miles per gallon!") def your_miles_driven(): your_miles_driven = 0.0 your_miles_driven = float(input("Enter number of miles driven:")) return your_miles_driven def gas_used(): gas_used = 0.0 gas_used = float(input("Enter the gallons of gas you used:")) return gas_used def your_mpg(miles_driven, gas_used): # 避免变量名和函数名重复,改用result result = miles_driven / gas_used return result # 修改函数,添加mpg参数 def goodbye(mpg): print("\nThanks for using my mpg calculator, I will be adding additional functions soon!") print("Your miles per gallon:", mpg) main()
额外说明
- 函数之间的变量相互独立,若需要在一个函数里使用另一个函数的变量,最规范的方式是通过参数传递;
- 尽量避免函数名和内部变量名重复,这会降低代码可读性,也可能引发潜在问题。
内容的提问来源于stack exchange,提问作者Ray
相关产品推荐
相关产品推荐

