我需要实现一个名为of的类,它接受一个__init__(self,names,fastest_time)和另一个名为fastest_time的方法,它将显示最快运动员的名称和时间:
到目前为止,我有这样的想法:
class Athlete:
def __init__(self,names,ftime):
self.name=names
self.fastest=ftime
def fastest_athlete(self):
names=(['sara','jam','mary'])
times=([90,50,75])
a=Athlete(name,ftime)
a.fastest_athlete()问题:不知道是否需要遍历数组名称“times”?不知道如何实现fastest_time..HELP方法
发布于 2013-03-17 04:21:22
您应该遍历数组以创建Athlete。
>>>Athletes = [Athlete(name, time) for name, time in zip(names, times)]
>>>Athletes[0].name
sara
>>>Athletes[1].name
jam要找到跑得最快的运动员,你可以使用max和min函数。
>>>min(Athletes, key = lambda a : a.fastest)但您应该注意,min()是在包含Athlete的阵列上执行的,而不是在Athlete本身上执行的。如果你想找到最快的类,你可能需要像AthleteContainer Athlete这样的类。
发布于 2013-03-17 04:30:42
因为最快的运动员是不依赖于具体实例的东西,所以它更适合作为静态方法:
class Athlete:
# ...
@staticmethod
def fastest_athlete(athletes):
return reduce(lambda x, y: x if x.fastest < y.fastest else y, athletes)
# ...
athletes = [Athlete(name, time) for name, time in zip(names, times)]
fastest = Athlete.fastest_athlete(athletes)发布于 2013-03-17 04:36:52
如果您希望fastest_athlete成为运动员类的一部分,那么您的Athlete类应该能够访问所有运动员。
fastest_athlete会返回一个列表,因为可能会有更多的运动员跑得最好。
athletes=[] # stores all athletes
class Athlete:
def __init__(self,names,ftime):
self.name=names
self.fastest=ftime
athletes.append(self)
def fastest_athlete(self):
besttime= min([athlete.fastest for athlete in athletes])
return [athlete.name for athlete in athletes if athlete.fastest==besttime]
names=(['sara','jam','mary'])
times=([90,50,75])
for a, t in zip(names, times):
last_athlete=Athlete(a, t)
print last_athlete.fastest_athlete()https://stackoverflow.com/questions/15454221
复制相似问题