为什么我编写的Python课程作业代码运行时持续报错?
代码运行报错的具体原因
所有问题都是Python的缩进规则、块结构要求触发的,没有复杂的逻辑bug,逐条对应:
- 第一处缩进错位导致的NameError
你写的第一个MeterToFoot函数里,print(meter*3.279)没有缩进到函数体内部,和def语句处于同一层级。此时全局作用域从未定义过meter变量,程序执行到这行时会直接报错,提示NameError: name 'meter' is not defined。哪怕后续函数被调用,meter是函数内部的局部变量,外部代码也无法访问到。 - 第二处空块结构导致的语法错误
你在末尾写的嵌套逻辑:
Python要求所有if answer == "yes": def MeterToFoot(): if answer == "no": def FootToMeter():if判断、def函数定义的代码行后面,必须紧跟有实际可执行的缩进代码块,不能写完开头就结束。这里两层if、两层def都没有写任何实际运行的内容,解释器会直接抛出IndentationError: expected an indented block,程序根本无法启动。 - 第三处流程逻辑错位
你在程序开头就无条件调用了FootToMeter(),此时还没走到用户输入选择的步骤,完全打乱了预期的交互流程:本该先问用户要转什么单位,再调用对应的转换函数,结果变成先弹英尺转米的输入框,再问用户要不要算别的。
适合初学者的可运行修正版本
# 米转英尺 def MeterToFoot(): meter = float(input("Enter your distance in meters: ")) print(meter * 3.279) # 英尺转米 def FootToMeter(): feet = float(input("Enter distance in feet: ")) print(feet * 0.305) # 按流程交互 answer = input("Enter yes to calculate meters to feet, no to calculate feet to meters: ") if answer == "yes": MeterToFoot() if answer == "no": FootToMeter()
内容的提问来源于stack exchange,提问作者Eddie Barkhudaryan
相关产品推荐
相关产品推荐

