簡體   English   中英

作業:Python 3.3:使用while循環檢查類中屬性的條件

[英]Assignment: Python 3.3: Using while loop to check for condition of attribute in class

我正在嘗試使用“ while”循環來檢查類中屬性的條件。 具體來說,我需要檢查里程表,看是否有任何物體達到500。該代碼用於模擬比賽。 因此,它需要從整體上檢查類,以查看任何對象的里程表是否達到500(或更高),並且在發生這種情況時,停止添加到里程表中並聲明贏家。 但是,現在,“ while”循環一直運行到每個里程表的對象都達到500。將“ while”循環移到“ for”循環之前會導致錯誤,表示汽車類沒有里程表屬性。

所以我的問題是,如何使我的“ while”循環在整個類中起作用,而不是在每個對象上單獨起作用? 還是我試圖解決這個完全錯誤的問題? 我在這里很茫然,但我認為我正在正確地解決這個問題。 這就是我所擁有的全部。

from random import randint
import time
class car:
    def __init__(self, Driver, Sponsor, Odometer=0, Speed=0):
        self.Driver = Driver
        self.Sponsor = Sponsor
        self.Odometer = Odometer
        self.Speed = randint(1,121)
drivers={'David': 'Burger King',
         'Travis': 'Dr Pepper',
         'Landon': 'Precon Marine',
         'Jamie': 'Cessna',
         'Juan': 'Target',
         'Ken': 'Federated Auto Parts',
         'Timmy': 'OXYwater',
         'Josh': 'MDS Transport',
         'Kurt': 'Furniture Row',
         'Casey': 'Geico',
         'Kasey': 'Farmers Insurance',
         'Jeff': 'Axalta',
         'Jimmie': 'Lowes',
         'Dale': 'National Guard',
         'Mike': 'Plinker Tactical',
         'Denny': 'FedEx',
         'Kyle': 'Mars Brands',
         'Matt': 'Husky',
         'Bobby': 'Kingsford',
         'Clint': '5-Hour Energy'
}
cars = [car(driver, sponsor) for driver, sponsor in drivers.items()]
for car in cars:
    while car.Odometer < 500:
        car.Odometer=car.Odometer+car.Speed*0.17
        car.Speed = randint(1,121)
        print(car.Driver, car.Odometer, car.Speed)

也許是這樣的嗎?

from operator import attrgetter

cars = [car(driver, sponsor) for driver, sponsor in drivers.items()]

# we find the car with the max Odometer
car_max_odometer = max(cars, key=attrgetter("Odometer"))
while car_max_odometer.Odometer < 500
    for car in cars:
        car.Odometer=car.Odometer+car.Speed*0.17
        car.Speed = randint(1,121)
        print(car.Driver, car.Odometer, car.Speed)
    car_max_odometer = max(cars, key=attrgetter("Odometer"))
print("We have a winner! {}, {}, {}".format(car_max_odometer.Driver, car_max_odometer.Odometer, car_max_odometer.Speed))

您還應該查看PEP8,您的類名,變量名和空格不遵循約定。

此外:

self.Speed = randint(1,121)

應該:

self.Speed = Speed

由於您將速度作為關鍵字參數傳遞

如果您希望在傳遞速度0時將其默認設置為randint(1,121),或者如果將其設置為None,則可以執行

self.Speed = Speed or randint(1,121)

暫無
暫無

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

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