我正在为“Time”类编写一个“干净”的方法。 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__()
最佳答案
在您的代码中:
if isinstance(self.H,float) == True:
self.S = self.H * 3600
self.clean()
else:
如果这是 True,则不会更改 self.H,因此它将始终为 true。我猜您想设置 self.H = 0 或类似的东西(因为您将其全部转换为秒)。
另外,在你的 if 语句中,拥有 'self.S' 实际上并没有做任何事情,所以你应该写:
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
关于python - 使用递归的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29526970/