我需要实现一个名为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
复制相似问题