[英]I keep getting the error backcard not defined, even though I have defined it
[英]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
)。 在循環創建中提取key
和val
。 您需要.items()
dict方法來獲取兩個值:
for key, val in driver_sponsor_pairs.items():
...
第三,您的Car
__init__
期望使用Driver
和Sponsor
參數,但是您嘗試定義CurrentCar = Car()
,然后在其后填充CurrentCar.Driver
和CurrentCar.Sponsor
。 繼續進行以上更新,請嘗試:
CurrentCar = Car(Driver=key, Sponsor=val)
第四,如果已經設置了.Sponsor
屬性,則不需要Retrieve_sponsor()
方法。
關於對象語法和設計,這里有很多誤解。 您可能會發現嘗試以這種復雜性級別進行調試令人沮喪。 我建議從Car()
僅具有一個屬性開始非常簡單。 測試一下,確保它可以按需要工作,然后從那里構建更多的屬性和方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.