递归函数返回冗余的打印语句

时间:2015-09-21 20:46:39

标签: python

我有一个简单的python应用程序,从10减少到0。我有它工作,除了它打印10次打印消息。 这是我的代码:

CountDown.py

import sys

import counter


def main():
    A = counter.counter()
    A.counter(10)

if __name__ == "__main__":
    sys.exit(int(main() or 0))

counter.py

class counter(object):

    def __init__(self):
        pass
        #return super(counter, self).__init__(*args, **kwargs)
        """description of class"""

    def counter(self,a):
        if a == 0:
            print ('BlastOff')
        else:
            print ('T equal:', a)
            a -= 1
            self.counter(a)

        print ('Exiting from countdown(',a,')')
        return 1

这是我在控制台窗口收到的内容。

('T equal:', 10)

('T equal:', 9)

('T equal:', 8)

('T equal:', 7)

('T equal:', 6)

('T equal:', 5)

('T equal:', 4)

('T equal:', 3)

('T equal:', 2)

('T equal:', 1)

BlastOff

('Existing from countdown(', 0, ')')

('Existing from countdown(', 0, ')')

('Existing from countdown(', 1, ')')

('Existing from countdown(', 2, ')')

('Existing from countdown(', 3, ')')

('Existing from countdown(', 4, ')')

('Existing from countdown(', 5, ')')

('Existing from countdown(', 6, ')')

('Existing from countdown(', 7, ')')

('Existing from countdown(', 8, ')')

('Existing from countdown(', 9, ')')

Press any key to continue . . .

如何阻止多个'Existing from countdown'

2 个答案:

答案 0 :(得分:1)

"('Existing from countdown(', 0, ')')"将在您的计划中打印两次。 一次,当a == 0时,再次当a == 1时。

这是因为您在递归通话之前设置了a =- 1,因此在打印之前1将设置为0

相反,你可能想要做的是删除"a-=1"并调用self.counter(a - 1),而a的值在当前范围内不会更改。

答案 1 :(得分:0)

如果在return子句中添加else:语句,则会避免打印大部分"退出"打印输出。

   else:
        print ('T equal:', a)
        a -= 1
        return self.counter(a)