Python 汽车类错误
我搞不清楚这个问题。我得到了两个独立的代码,这就是我遇到麻烦的地方。我在第38行遇到一个错误,即“UnboundLocalError:赋值前引用的局部变量‘year’”。我不确定我做错了什么,我是Python新手,但非常感谢您的帮助Python 汽车类错误,python,Python,我搞不清楚这个问题。我得到了两个独立的代码,这就是我遇到麻烦的地方。我在第38行遇到一个错误,即“UnboundLocalError:赋值前引用的局部变量‘year’”。我不确定我做错了什么,我是Python新手,但非常感谢您的帮助 class Car: def __init__(self, year_model, make, speed): self.__year_model = year_model self.__make = make
class Car:
def __init__(self, year_model, make, speed):
self.__year_model = year_model
self.__make = make
self.__speed = 0
############# year_model################
def setYear_model(self, year_model):
self.__year_model = year_model
def getYear_model(self):
return self.__year_model
############# Make################
def setMake(self, make):
self.__make = make
def getMake(self):
return self.make
############# speed################
def set_Speed(self, speed):
if speed < 0:
print("Speed cannot be negative")
else:
self.__speed = speed
def get_Speed(self):
return self.__speed
############# str ############
def __str__(self):
return "Make : " + self.__make + ", Model Year :" + \
self.__year_model + ", speed =" + str(self.__speed)
def accelerate(self):
self.__speed = self.__speed +5
def brake(self):
self.__speed = self.__speed -5
def main():
year=(input('car year: '))
make=(input('car make: '))
speed=0
my_car = Car(year, make, speed)
print('Current speed is', speed)
#accelerate 5 times
my_car.accelerate()
print('My current speed:',my_car.get_speed())
my_car.accelerate()
print('My current speed:',my_car.get_speed())
my_car.accelerate()
print('My current speed:',my_car.get_speed())
my_car.accelerate()
print('My current speed:',my_car.get_speed())
my_car.accelerate()
print('My current speed:',my_car.get_speed())
#brake five times
my_car.brake()
print('My current speed after brake:',my_car.get_speed())
my_car.brake()
print('My current speed after brake:',my_car.get_speed())
my_car.brake()
print('My current speed after brake:',my_car.get_speed())
my_car.brake()
print('My current speed after brake:',my_car.get_speed())
my_car.brake()
print('My current speed after brake:',my_car.get_speed())
main()
您试图在将变量设置为任何值之前使用变量
year
(同样地,make
和speed
):
my_car = Car(year, make, speed)
year=(input('car year: '))
make=(input('car make: '))
speed=0
除非你能读懂用户的心思,否则在你向用户询问他最喜欢的年份和品牌之前,你无法创建一辆2008年本田雅阁;就你所知,他可能会想要一辆2014年的保时捷Boxster。因此,在您知道要创建什么样的care之后,只需创建汽车
另外,您试图将三个参数传递给Car(年份、品牌、速度)
,但只需要两个参数。汽车
总是以0的速度启动,所以你不必通过一次
year=(input('car year: '))
make=(input('car make: '))
my_car = Car(year, make)
有一些被称为数据流编程语言的语言,可以让您创建这样的“不完整值”,因此my_car
将是一个模棱两可的car
,但只要您在year
之前不尝试使用它,make
和speed
都被填充,就没有人会在意它是否不完整。但是Python不是这样一种语言,您可能会使用的大多数其他语言也不是这样一种语言。试试这个:
def main():
year=(input('car year: '))
make=(input('car make: '))
speed=0
my_car = Car(year, make, speed) #use this once you have assigned values for "year", "make", "speed"
另外,在类定义中更改以下内容:
class Car:
def __init__(self, year_model, make, speed): #add "speed" parameter
self.__year_model = year_model
self.__make = make
self.__speed = 0
此外,您没有在汽车类中定义“加速”和“制动”方法。因此,使用my\u car.accelerate()
或my\u car.brake()
将抛出一个错误:
AttributeError: Car instance has no attribute 'accelerate'
可以将以下方法添加到Car类:
############# accelerate ################
def accelerate(self):
self.__speed = self.__speed +5
############# brake ################
def brake(self):
self.__speed = self.__speed -5
在调用main
方法中的set\u speed
和get\u speed
时,也将名称更改为这两个方法
############# speed################
def set_speed(self, speed):
if speed < 0:
print("Speed cannot be negative")
else:
self.__speed = speed
def get_speed(self):
return self.__speed
您拥有的主要功能中的年份、品牌、速度是什么:
my_car=car(年份、品牌、速度)
?在代码中的某个地方设置变量“year”之前,您正在使用该变量。错误消息将告诉您确切的位置。(它在main()函数中)。如果我只是把我的车放在这里,那么我会得到一个不同的错误。“TypeError:uuu unit_uuu()缺少2个必需的位置参数:'year_model'和'make'”。作为旁注,您收到的这段代码非常糟糕,显然是由一个想要强迫Python成为Java糟糕版本的人编写的,而不是由实际使用Python的人编写的。这不是你的错,但是如果这段代码来自你的老师……那么,你可能想找一个更好的地方来学习Python。很好的发现,发起者没有提到速度参数。@BurhanKhalid:事实上,我认为情况正好相反。汽车应该以0的速度制造(为了避免工厂里的严重伤害,我假设…),所以用户不应该通过一个。即使改变了所有这些,我仍然会得到一个错误。“AttributeError:‘Car’对象没有属性‘accelerate’”。您尚未在Car类中定义“accelerate”。请参阅答案中的解释。我编辑了原始帖子,我想知道我没有正确更改的是什么?
############# speed################
def set_speed(self, speed):
if speed < 0:
print("Speed cannot be negative")
else:
self.__speed = speed
def get_speed(self):
return self.__speed
#car year: 1998
#car make: "Honda Accord"
#('Current speed is', 0)
#('My current speed:', 5)
#('My current speed:', 10)
#('My current speed:', 15)
#('My current speed:', 20)
#('My current speed:', 25)
#('My current speed after brake:', 20)
#('My current speed after brake:', 15)
#('My current speed after brake:', 10)
#('My current speed after brake:', 5)
#('My current speed after brake:', 0)