Python:从while循环调用函数的问题

时间:2016-09-05 09:34:43

标签: python python-2.7

我有一个while循环,它在每次迭代时调用函数mainrt()。

if __name__ == "__main__":
    inp = sys.stdin.read()
    inpList = inp.split('\n')
    inpList.pop()
    for n in inpList:

        i = 0
        p = 0
        n  = int (n)
        while True:
            i += 1
            p = n*i
            if n == 0:
                print "INSOMNIA"
                break
            else:
                res = True
                res = mainrt(p)
                if res == False:
                    print p
                    break

和mainrt()

def mainrt(n):
    #print n

    while True:
        rem = n % 10
        if rem in diMon:
            pass
        else:
            diMon.insert(rem,rem)

        if len(diMon) == 10:

            return False
            break

        n = n/10
        if n == 0:
            return True
            break
        else:
            continue

问题是当我从stdin.read()获取输入时,函数正确处理输入的第一行,但输入的第二行按原样打印。它没有被该功能处理 示例

INPUT
3
5

OUTPUT SHOLD BE
30
90

But instead I get
30
5

为什么函数第二次没有处理输入? 到目前为止没有运行时错误。

1 个答案:

答案 0 :(得分:1)

在你的mainrt函数中,我没有看到你声明diMon列表,所以看起来它是一个全局变量,你不清理那个列表。这意味着,mainrt在第一次检查False时返回if len(diMon) == 10:作为第二个输入。您应该在开头的od diMon函数中声明mainrt,或者在while循环体的末尾清除它。

修改 现在我再次检查你的代码,我建议你在for循环的开头声明diMon

for n in inpList:

    diMon = []
    i = 0
    p = 0
    n  = int (n)