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

编写节转速度单位Python程序遇NameError:r_kmh未定义求助

问题分析与修复

错误原因

报错核心:r_kmh是to_kmh函数内部的局部变量,仅在该函数内部有效,你在main函数里直接调用show_results(r_kmh)时,Python找不到这个变量,因此抛出NameError。

修复方案

1. 先保存转换结果

在main函数里,先把to_kmh(knots)的返回值存到变量中,再用这个变量完成打印和调用show_results:

# 替换main里的对应行
kmh_result = to_kmh(knots)
print(kmh_result, "km/h")
show_results(kmh_result)

2. 修正输入循环逻辑

原代码输入判断存在漏洞:第一次输入非数字时,循环内直接转int会报错,把输入和判断用while循环包裹更稳妥:

def main():
    system("clear")
    while True:
        user_input = input("What was your speed in knots? ")
        if user_input.isdigit():
            knots = int(user_input)
            mph_result = to_mph(knots)
            print(mph_result, "mp/h")
            kmh_result = to_kmh(knots)
            print(kmh_result, "km/h")
            show_results(kmh_result)
            break
        else:
            print("Invalid response. Please enter a number.")

3. 优化show_results函数

原函数print语句有冗余内容,部分分支无return,调整后更简洁合理:

def show_results(speed):
    if speed < 60:
        print("- Go faster")
    elif 60 <= speed < 100:
        print("- Nice one.")
    elif 100 <= speed < 120:
        print("- Radical!")
    elif speed >= 120:
        print("- Whoa! Slow down!")

完整修正后的代码

from os import system


def main():
    system("clear")
    while True:
        user_input = input("What was your speed in knots? ")
        if user_input.isdigit():
            knots = int(user_input)
            mph_result = to_mph(knots)
            print(mph_result, "mp/h")
            kmh_result = to_kmh(knots)
            print(kmh_result, "km/h")
            show_results(kmh_result)
            break
        else:
            print("Invalid response. Please enter a number.")


def to_mph(knots):
    mph = 1.1507 * knots
    return round(mph, 1)


def to_kmh(knots):
    kmh = 1.852 * knots
    return round(kmh, 1)


def show_results(speed):
    if speed < 60:
        print("- Go faster")
    elif 60 <= speed < 100:
        print("- Nice one.")
    elif 100 <= speed < 120:
        print("- Radical!")
    elif speed >= 120:
        print("- Whoa! Slow down!")


if __name__ == "__main__":
    main()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 15:45:23