[英]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.