编写节转速度单位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
相关产品推荐
相关产品推荐

