python - 使用递归的方法

标签 python recursion methods

我正在为“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/

相关文章:

java - 对数组进行排序的递归函数

java - 在运行时修改方法注解参数

java - 如何使用来自不同类的参数调用方法

python - 从类中创建对象时如何预留内存?

python - Django Celery 周期性任务运行但 RabbitMQ 队列未被消耗

python - Pandas concat 是就地函数吗?

python : Reverse Order Of List

python - 按索引组合字符串列表中的元素

python - 具有循环引用的 __deepcopy__ 对象

python - Python 递归函数如何用于 tri_recursion 函数?