赋值:Python3.3:使用while循环检查类中属性的条件

赋值:Python3.3:使用while循环检查类中属性的条件,python,class,for-loop,while-loop,python-3.3,Python,Class,For Loop,While Loop,Python 3.3,我尝试使用“while”循环来检查类中属性的条件。具体来说,我需要检查里程表,看看是否有物体达到500。代码用于模拟比赛。因此,它需要检查整个类,查看任何对象的里程表是否达到500(或以上),当达到500时,停止向里程表添加,并宣布获胜。然而现在,“while”循环一直运行到每个物体的里程表达到500。将“while”循环移动到“for”循环之前会导致错误,表示car类没有里程表属性 所以我的问题是,如何让我的while循环作为一个整体为类工作,而不是单独为每个对象工作?还是我试图解决这个问题完

我尝试使用“while”循环来检查类中属性的条件。具体来说,我需要检查里程表,看看是否有物体达到500。代码用于模拟比赛。因此,它需要检查整个类,查看任何对象的里程表是否达到500(或以上),当达到500时,停止向里程表添加,并宣布获胜。然而现在,“while”循环一直运行到每个物体的里程表达到500。将“while”循环移动到“for”循环之前会导致错误,表示car类没有里程表属性

所以我的问题是,如何让我的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)
来自随机导入randint
导入时间
等级车:
def初始(自身、驾驶员、赞助商、里程表=0、速度=0):
self.Driver=Driver
自我担保人
自身里程表=里程表
self.Speed=randint(1121)
drivers={'David':'Burger King',
“特拉维斯”:“佩珀博士”,
“兰登”:“先期海事”,
“杰米”:“塞斯纳”,
"Juan":"Target",,
“肯”:“联邦汽车零部件”,
“提米”:“氧气水”,
“Josh”:“MDS运输”,
“库尔特”:“家具街”,
“凯西”:“盖科”,
“凯西”:“农民保险”,
“Jeff”:“Axalta”,
“Jimmie”:“Lowes”,
“戴尔”:“国民警卫队”,
“迈克”:“普林克战术”,
“丹尼”:“联邦快递”,
“凯尔”:“火星品牌”,
“马特”:“哈士奇”,
“鲍比”:“金斯福”,
“克林特”:“5小时能量”
}
cars=[驾驶员的汽车(驾驶员,赞助商),驾驶员中的赞助商。items()]
对于车内车:
当汽车里程表<500时:
车.里程表=车.里程表+车.速度*0.17
汽车速度=randint(1121)
打印(汽车、驾驶员、汽车、里程表、汽车、速度)

也许是这样的

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))
应该是:

self.Speed = Speed
因为你把速度作为一个关键字参数来传递

如果希望在传入速度0时将其默认为randint(1121),或者如果它为None,则可以执行以下操作

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

你有什么问题?对不起!。我编辑它是为了澄清我的问题。虽然,我不确定是否足够清楚…谢谢!我继续阅读了(大部分)PEP8命名和格式约定。我将它们应用于我模块中的代码。你的建议很有效,我还增加了里程表更新之间的一个小时间延迟,这样打印看起来更整洁。再次感谢!
self.Speed = Speed or randint(1,121)