【问题标题】:Python program stuck in infinite loopPython程序陷入无限循环
【发布时间】:2016-12-09 09:28:57
【问题描述】:

这段代码让我很头疼。它应该是一个将字符串作为输入的生成器,并用所有可能的字母组合替换所有 '{}',基本上以与 itertools.permutations() 类似的方式工作,但添加了常量值。

我检查了每个单独的元素,我的增量函数似乎变成了一个无限循环。但是,如果我减少正在生成的字符串的数量,它似乎会起作用。 有人可以向我解释为什么程序在尝试返回所有可能的值时会失败吗?假设您必须在不使用 itertools 的情况下做同样的事情,您将如何完成任务?

def string_char_combinations(string, chars=False):
    if not chars:
        chars = [chr(i) for i in range(ord('a'), ord('z')+1)]
    varcount = string.count('{}')
    a = [0 for i in range(varcount)]

    def increment(lst, n):
        if n == 0:
            return lst ##ERROR: Infinite loop?
        print(n)
        lst[n] += 1
        print(lst)
        if lst[n] > len(chars)-1:
            lst[n] = 0
            lst = increment(lst, n-1)
        return lst

    while a[0] < len(chars)-1:
        a = increment(a, len(a)-1)
        yield string.format(*[chars[i] for i in a])

if __name__ == "__main__":
    print(list(string_char_combinations("a{}{}a")))

【问题讨论】:

  • 您的增量函数,在 n==0 的情况下,将始终返回与输入相同的 lst 值。因此,您永远无法跳出循环。尝试在 lst[n]+=1 之后检查 n 吗?

标签: python generator infinite-loop


【解决方案1】:

您不会在此处增加 n 定义增量(lst,n): 如果 n == 0: return lst ##ERROR: 无限循环?

所以n的值总是0

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-29
    • 2021-12-31
    • 1970-01-01
    • 2015-11-20
    • 1970-01-01
    • 2020-05-13
    相关资源
    最近更新 更多