class Clock:
def __init__(self,hours,minutes):```
self.hours=hours
self.minutes=minutes
def Clock(hours,minutes):
if hours>9 and minutes>9:
return str(hours)+":"+str(minutes)
elif hours>9 and minutes<10:
return str(hours)+":0"+str(minutes)
elif hours<10 and minutes>9:
return "0"+str(hours)+":"+str(minutes)
else:
return "0"+str(hours)+":"+"0"+str(minutes)
def __add__(self,other):
????if Clock.Clock(self.hours,self.minutes)+Clock.Clock(other.hours,other.minutes)????
t=Clock.Clock(5,6)+Clock.Clock(5,6)
print(t)
现在当我打印t
时,我将获得05:0605:06
而且我想知道如何覆盖__add__
函数,以便在执行Clock.Clock(self,other)+Clock.Clock(self,other)
时它将打印出Clock(self,other)+Clock(self,other)
上面的输入等于10:12。
答案 0 :(得分:2)
您正在添加将串联的字符串,而不是实际添加小时和分钟值。您可能要这样做
def __add__(self,other):
return Clock.Clock(self.hours+other.hours,self.minutes+other.minutes)
假设小时和分钟属性是数字
答案 1 :(得分:1)
In [4]: class Clock:
...:
...:
...: def __init__(self,hours,minutes):
...: self.hours=hours
...: self.minutes=minutes
...:
...: def __repr__(self):
...: if self.hours>9 and self.minutes>9:
...: return str(self.hours)+":"+str(self.minutes)
...: elif self.hours>9 and self.minutes<10:
...: return str(self.hours)+":0"+str(self.minutes)
...: elif self.hours<10 and self.minutes>9:
...: return "0"+str(self.hours)+":"+str(self.minutes)
...: else:
...: return "0"+str(self.hours)+":"+"0"+str(self.minutes)
...: def __add__(self, other):
...: self.hours += other.hours
...: self.minutes += other.minutes
...: return Clock(self.hours, self.minutes)
In [5]: Clock(5, 6) + Clock(5,6)
Out[5]: 10:12
答案 2 :(得分:1)
我对您的代码有一些自由。首先,Clock
方法看起来像是它试图转换为字符串。因此,让我们将其定义为__str__
。我们还可以更简洁地实现字符串转换。
关于__add__
方法。为了保持一致,它应该返回Clock
对象,而不是字符串。
现有答案遗漏的另一件事是说明总分钟值超过59的情况,在这种情况下,超出的时间应包括在小时值中。
要计算分钟数,请取总分钟数的模数(%
)60。对于小时数除以60并四舍五入(或只是进行整数除法)。函数divmod
在一个函数调用中为我们方便地完成了这两件事。
class Clock:
def __init__(self, hours, minutes):
if minutes > 59:
raise ValueError('invalid value for minutes %d' % minutes)
self.hours = hours
self.minutes = minutes
def __str__(self):
return "%d:%02d" % (self.hours, self.minutes)
def __add__(self, other):
extrahours, mins = divmod(self.minutes + other.minutes, 60)
hours = self.hours + other.hours + extrahours
return Clock(hours, mins)
t = Clock(5, 6) + Clock(5, 6)
print(t)
如果我们现在尝试
t = Clock(5, 20) + Clock(5, 50)
它正确打印11:10
而不是10:70
。
答案 3 :(得分:-1)
是的,我知道,但是我不希望Clock(5,6)+ Clock(5,6)给出10:12 我希望Clock.Clock(5,6)+ Clock.Clock(5,6)给出10:12,而不是05:0605:06。 也许我误会了
代替: 在[5]中:Clock.Clock(5,6)+ Clock.Clock(5,6) 出[5]:05:0605:06
我想要: 在[5]中:Clock.Clock(5,6)+ Clock.Clock(5,6) 出[5]:10:12