簡體   English   中英

為什么這樣,即使我將其放置在一個類中,也始終收到未定義Driver Sponsor的錯誤?

[英]Why is it so that I keep getting the error that Driver sponsor is not defined, even though I placed it within a class?

我一直在嘗試參與NASCAR項目,在該項目中,我必須使用一堂課來制造20輛獨特的汽車,然后讓它們比賽(或者通過反復選擇不同的速度,看看誰先達到500英里) 1和120,並將其添加到增加的里程表中)。 我制作了您在下面看到的內容並運行了它,並將其很好地引導到Python IDLE中。 但是,它總是告訴我NameError:名稱'Driver_sponsor'未定義。 看,我已經遇到這個錯誤已有一段時間了,我嘗試將Driver_sponsor列表放入一個類中,將其放入Main 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實例之前嘗試訪問driver-sponsor dict(當前僅迭代Driver_sponsor的循環發生!)。

如果要遍歷驅動程序-贊助商對並為每個配對初始化一個新的Car ,那么您真的需要為每個Car初始化完整的Driver_sponsor dict嗎? 如果是這樣,則在構造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_sponsor dict時要求key ,但是在每個循環中都調用key (對於Driver )和val (對於Sponsor )。 在循環創建中提取keyval 您需要.items() dict方法來獲取兩個值:

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

第三,您的Car __init__期望使用DriverSponsor參數,但是您嘗試定義CurrentCar = Car() ,然后在其后填充CurrentCar.DriverCurrentCar.Sponsor 繼續進行以上更新,請嘗試:

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

第四,如果已經設置了.Sponsor屬性,則不需要Retrieve_sponsor()方法。

關於對象語法和設計,這里有很多誤解。 您可能會發現嘗試以這種復雜性級別進行調試令人沮喪。 我建議從Car()僅具有一個屬性開始非常簡單。 測試一下,確保它可以按需要工作,然后從那里構建更多的屬性和方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM