Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 汽车类错误_Python - Fatal编程技术网

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

我搞不清楚这个问题。我得到了两个独立的代码,这就是我遇到麻烦的地方。我在第38行遇到一个错误,即“UnboundLocalError:赋值前引用的局部变量‘year’”。我不确定我做错了什么,我是Python新手,但非常感谢您的帮助

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)