Unbound Local Error: Local variable 'input' referenced before assignment, Help please
Unbound Local Error: Local variable 'input' referenced before assignment, Help please
class Car():
def __init__(self, model, make, speed):
self.__model = model
self.__make = make
self.__speed = speed
def accelerate(self, speed):
self.__speed = speed + 5
def brake(self, speed):
self.__speed = speed - 5
def get_speed(self):
return self.__speed
def main():
speed = input("请输入汽车当前速度:")
make = input("请输入汽车制造商:")
model = input("请输入汽车型号:")
user_input = input("请输入1加速,2刹车:")
car = Car(model, make, speed)
if user_input == '1':
car.accelerate(speed)
elif user_input == '2':
car.brake(speed)
speed1 = car.get_speed()
print("您的汽车制造商是:", make)
print("您的汽车型号是:", model)
print("您的汽车速度是:", speed)
main()
我不知道为什么在第19行,当我要求输入速度时会报错。
这个问题的出现是因为在函数中使用了与内建函数同名的变量,导致内建函数被屏蔽了。解决方法是使用一个不同的变量名。
在上面的代码中,第一个问题出现在这一行:
input = input("Enter 1 to accelerate , 2 to brake, ")
这一行将input
变量作为函数的本地变量,覆盖了内建函数input
。当Python编译一个函数时,它会将本地变量转换为函数对象中的插槽索引,以提高速度。因此,input
在函数体的生命周期内成为了一个本地变量,而不能再被视为全局的input
函数。
解决方法是使用一个不同的变量名来代替input
。在下面的代码中,将input
变量改为user_input
:
def main(): speed = user_input("Enter your cars current speed:") make = user_input("Enter your cars make") model = user_input("Enter your cars model") accelerate_or_brake = user_input("Enter 1 to accelerate , 2 to brake, ") car = Car(model,make,speed)
通过更改变量名,避免了与内建函数input
的冲突,从而解决了Unbound Local Error
的问题。