我不断收到NameError
,说明CarInventory
没有定义,也没有定义。另外,我仍然不确定我的compare()方法的代码是否正确。
这是我的作业代码:
class CarInventory():
def __init__(self, n_cars = 0, cars = []):
self.n_cars = n_cars
self.cars = cars
def add_car(manufacturer,model,year,mpg):
self.cars = {'manufacturer': self.manufacturer, 'model': self.model, 'year': self.year, 'mpg': self.mpg}
self.n_cars = self.n_cars + 1
def compare(self, attribute, direction=highest):
self.lowest = self.cars[0]
self.direction = self.cars[0]
for car in self.cars:
if self.car[attribute] < self.lowest:
self.lowest = car
elif self.car[attribute] > self.highest:
self.highest = car
if direction == highest:
output = highest
elif direction == lowest:
output = lowest
return output
答案 0 :(得分:1)
highest
给您NameError的原因是您已经写过:
def compare(self, attribute, direction=highest):
告诉Python,如果调用方在调用compare
方法时不包括第二个参数(方向),则该方法应使用变量中名为{{ 1}}。但是您的程序中没有声明这样的变量。
您可能想写:
highest
告诉Python如果调用者没有为 def compare(self, attribute, direction='highest'):
提供任何值,请使用highest
的文字字符串值。
关于direction
错误,您没有向我们展示正在产生该错误的程序部分。它位于您尝试使用 CarInventory
类的位置,而不是您定义的位置。
答案 1 :(得分:0)
我看到您的代码有很多问题。
首先,我注意到很多对self.X
的引用,其中X
不是CarInventory
的成员。这是对self
的滥用,它被用来将变量限定为解释器应查看的类(或偶尔使用的函数)。如果您引用的是self.manufacturer
,而CarInventory
则不是拥有一个名为manufacturer
的成员,那么您将获得一个例外。
我还注意到,在您的add_car
函数中,您将整个汽车列表设置为要添加的新汽车。给定此方法的定义,我认为这不是您想要的。相反,您应该使用append
方法将新车添加到您的车列表中。
compare
也存在许多问题。例如,您尝试使用一个名为highest
的变量,而不是'highest'
的参数的字符串direction
,这是您的NameError
的来源。您还遇到了许多比较问题,并且缺少else
。
我已修复您的代码
class CarInventory():
def __init__(self, n_cars = 0, cars = []):
self.n_cars = n_cars
self.cars = cars
def add_car(manufacturer,model,year,mpg):
self.cars.append({
'manufacturer': manufacturer,
'model': model,
'year': year,
'mpg': mpg})
self.n_cars = self.n_cars + 1
def compare(self, attribute, direction = 'highest'):
lowest = self.cars[0]
highest = self.cars[0]
for car in self.cars:
if car[attribute] < lowest[attribute]:
lowest = car
elif car[attribute] > highest[attribute]:
highest = car
if direction == 'highest':
return highest
else:
return lowest
顺便说一句,您应该在类定义和函数之间添加换行符,以提高可读性。