为什么即使我将驱动程序发起人放在一个类中,我仍然不断地得到未定义驱动程序发起人的错误?

2024-09-29 17:22:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在一个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()

Tags: keynameselfodttimedefdrivermatt
1条回答
网友
1楼 · 发布于 2024-09-29 17:22:20

您的代码存在一些问题

首先,您得到这个错误是因为您调用了一个未设置的变量

但更重要的是,在初始化Car的实例之前,您正在尝试访问驱动程序发起人dict(目前只在迭代Driver_sponsor的循环中发生)

如果您想循环驱动程序发起人对并为每个对初始化一个新的Car,那么您真的需要为每个Car初始化完整的Driver_sponsordict吗?如果是这样,在构造Car并填充self.__Driver_sponsor时只需将其作为参数传递即可

例如:

driver_sponsor_pairs = {'A.J.Allmendinger:3M',...,'Matt Kenseth:Visa'}

class Car:
    def __init__(self, driver_sponsor):
        # ...
        self.driver_sponsor = driver_sponsor

CurrentCar = Car(driver_sponsor=driver_sponsor_pairs)

# now refer to CurrentCar.driver_sponsor

第二,在Driver_sponsordict上循环时,您只要求key,但在每个循环中,您同时调用key(for Driver)和val(for Sponsor)。在循环创建中同时提取keyval。您需要使用.items()dict方法来获取这两个值:

for key, val in driver_sponsor_pairs.items():
    ...

第三,您的Car{}需要DriverSponsor参数,但您尝试定义CurrentCar = Car(),然后填充CurrentCar.DriverCurrentCar.Sponsor。继续进行上述更新,请改为尝试:

CurrentCar = Car(Driver=key, Sponsor=val)

第四,如果已经设置了.Sponsor属性,则不需要Retrieve_sponsor()方法

这里有很多关于对象语法和设计的误解。您可能会发现在这种复杂程度下尝试和调试是令人沮丧的。我建议非常简单地从Car()开始,比如说,只有一个属性。测试它,确保它可以按照您想要的方式工作,然后从那里构建更多的属性和方法

相关问题 更多 >

    热门问题