我正在写一个" clean"时间"时间"类。 clean方法将采用Time对象,并确保秒数和分钟数介于0到59之间。我遇到了递归错误。以下是我到目前为止的情况:
def clean(self):
'''Adjust Time object so that the number of seconds and minutes
is between 0 and 59'''
if self.S < 60:
self.S
else:
self.M = int(self.S/60)+self.M
self.S = self.S%60
if self.M < 60:
self.M
else:
self.H = int(self.M/60)+ self.H
self.M = self.M%60
if isinstance(self.H,float) == True:
self.S = self.H * 3600
self.clean()
else:
self.H
return self.__str__()
答案 0 :(得分:2)
在您的代码中:
if isinstance(self.H,float) == True:
self.S = self.H * 3600
self.clean()
else:
你不会改变自我。如果这是真的,那么它将永远是真的。我猜你要设置self.H = 0
或类似的东西(因为你将它全部转换为秒)。
另外,在你的if语句中,有自我。&#39;实际上并没有做任何事情,所以你应该写:
if self.S < 60:
self.S
else:
self.M = int(self.S/60)+self.M
self.S = self.S%60
作为
if self.S >= 60:
self.M = int(self.S/60)+self.M
self.S = self.S%60
另外,在你的递归检查中,你会破坏你以前的self.S值,你的意思是添加吗?
修改强> 你没有在你的问题中指明,但是从你的代码中看起来你假设时间值(S,M,H)是有效的,而你只是改变数量来获得相同的总时间,S < 60和M < 60.如果是这种情况,那么您可以通过在开始时将所有转换为秒来轻松消除递归,然后执行S和M步骤:
self.S = self.H * 3600 + self.M * 60 + self.S
self.M = int(self.S / 60)
self.H = int(self.M / 60) # or = int(self.S / 3600)
self.M = self.M % 60
self.S = self.S % 60
答案 1 :(得分:1)
它似乎是递归发生的唯一地方:
if isinstance(self.H,float) == True:
self.S = self.H * 3600
self.clean()
如果您self.H
不是float
,那么它就不会重复:
if isinstance(self.H,float) == True:
self.S = self.H * 3600
self.H = int(self.H) # add this line
self.clean()
更好的是,调整顶部的值,这样你就不需要递归了:
# move this to the first lines of your method
if isinstance(self.H,float) == True:
self.S = self.H * 3600