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

Python新手求助:MPG计算代码出现mpg未定义的NameError问题

问题分析与修复

错误原因

  1. 变量作用域问题:goodbye()函数内部尝试访问mpg变量,但这个变量是定义在main()函数里的局部变量,goodbye()无法直接访问它,因此触发NameError。
  2. 调用时机错误:在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 03:35:17