我一直在一个NASCAR项目中尝试我的手,在这个项目中,我必须使用一个类来创建20辆独特的车辆,然后让它们进行比赛(或者通过反复选择1到120之间的不同速度,并将其添加到一个递增的里程表中,看看谁将首先达到500英里)。我制作了您在下面看到的内容并运行了它,它很好地引导到Python空闲中。但是,它总是告诉我NameError:name“Driver\u赞助商”没有定义。看,我已经面临这个错误有一段时间了,我试着将Driver_赞助商列表放入一个类中,将其放入主def中,并放入关键字self。在它之前。不管我做了什么,我都要面对这个错误。我要回到我的课堂上看看我能做些什么,但我希望这里的人能告诉我我的代码中缺少了什么,因为,真的,我非常迷茫
from random import randint
import time
class Car:
def __init__(self,Driver_Name,Sponsor):
self.__Total_Odometer_Miles = 0
self.__Speed_Miles_Per_Hour = 0
self.__Driver_Name = Driver_Name
self.__Sponsor = Sponsor
self.__Driver = ('Drivers name Missing')
self.__Sponsor = ('Sponsor Missing')
self.__Driver_sponsor = {'A.J.Allmendinger:3M','Aric Almirola:Allegiant ','Trevpr Bayne:AMR ','Ryan Blaney:Camping World ','Clint Bowyer:Chevrolet ',
'Chris Buesher:Coca-Cola','Kurt Busch:Coca-light ','Kyle Busch:Credit One ','Landon Cassill:Ford','Matt DiBenedetto:FDP',
'Austin Dillon:','Ty Dillon:','Dale Earnhardt:Jacob Companies ','Chase Elliott: M & M ','Denny Hamlin: Microsoft ',
'Kevin Harvick:GoodYear ','Jimmie Johnson:Nationwide','Erik Jones:SUNOCO','Kasey Kahne:Toyota','Matt Kenseth:Visa ' }
def Name(self,Driver_Name):
self.__Driver_Name = Driver_Name
def Retrieve_Name(self):
return self.__Driver_Name
def __mutualize__(self):
self.__Total_Odometer_Miles = 0
self.__Speed_Miles_Per_Hour = 0
def sponsors(self):
self.__Driver_sponsor = {'A.J.Allmendinger:3M','Aric Almirola:Allegiant ','Trevpr Bayne:AMR ','Ryan Blaney:Camping World ','Clint Bowyer:Chevrolet ',
'Chris Buesher:Coca-Cola','Kurt Busch:Coca-light ','Kyle Busch:Credit One ','Landon Cassill:Ford','Matt DiBenedetto:FDP',
'Austin Dillon:','Ty Dillon:','Dale Earnhardt:Jacob Companies ','Chase Elliott: M & M ','Denny Hamlin: Microsoft ',
'Kevin Harvick:GoodYear ','Jimmie Johnson:Nationwide','Erik Jones:SUNOCO','Kasey Kahne:Toyota','Matt Kenseth:Visa ' }
def Retrieve_sponsor(self,Driver_sponsor):
return self.__Driver_sponsor
def main():
for key in Driver_sponsor():
CurrentCar = Car()
CurrentCar.Driver = key
CurrentCar.Sponsor = val
CurrentCar.MPH = randint(1,120)
time.sleep(.05)
time = 5
currentCar.ODT = 5
CurrentCar.ODT = CurrentCar.ODT + CurrentCar.MPH*Time
print(CurrentCar.Driver,CurrentCar.ODT)
if CurrentCar.ODT >= 500:
print('\ the winner is',key,'t\ sponsored by',val)
main()
您的代码存在一些问题
首先,您得到这个错误是因为您调用了一个未设置的变量
但更重要的是,在初始化
Car
的实例之前,您正在尝试访问驱动程序发起人dict(目前只在迭代Driver_sponsor
的循环中发生)如果您想循环驱动程序发起人对并为每个对初始化一个新的
Car
,那么您真的需要为每个Car
初始化完整的Driver_sponsor
dict吗?如果是这样,在构造Car
并填充self.__Driver_sponsor
时只需将其作为参数传递即可例如:
第二,在
Driver_sponsor
dict上循环时,您只要求key
,但在每个循环中,您同时调用key
(forDriver
)和val
(forSponsor
)。在循环创建中同时提取key
和val
。您需要使用.items()
dict方法来获取这两个值:第三,您的}需要
Car
{Driver
和Sponsor
参数,但您尝试定义CurrentCar = Car()
,然后填充CurrentCar.Driver
和CurrentCar.Sponsor
。继续进行上述更新,请改为尝试:第四,如果已经设置了
.Sponsor
属性,则不需要Retrieve_sponsor()
方法这里有很多关于对象语法和设计的误解。您可能会发现在这种复杂程度下尝试和调试是令人沮丧的。我建议非常简单地从
Car()
开始,比如说,只有一个属性。测试它,确保它可以按照您想要的方式工作,然后从那里构建更多的属性和方法相关问题 更多 >
编程相关推荐