我无法弄清楚为什么我的变量超出范围

时间:2017-06-05 23:41:43

标签: python python-3.x binary

我的python代码中出现错误。这是代码

How many bits do you want to have?   >>3
Traceback (most recent call last):
  File "C:/Users/#####/AppData/Local/Programs/Python/Python36-32/binarygen.py", line 24, in <module>
    binary[y].insert(len(binary[y]),"0")
IndexError: list index out of range

我收到的错误是

{{1}}

我不明白为什么我的变量不起作用。我测试了所有我能想到的东西。如果您有任何建议,请尽快回复。如果您认为整个程序错误,请在您的答案中插入一个工作版本。该程序的目的是为给定的位数生成所有可能的二进制组合。感谢您的时间和帮助。

3 个答案:

答案 0 :(得分:1)

该循环中出现“off by one”错误。你试图在binary的最后一个元素的末尾添加一个字符(我想)。但是,对于输入3,您使用下标8(2 ** 3)。二进制有元素0-7;下标8超出范围。也许你需要

        binary[y].insert(len(binary[y])-1,"0")

但是,我注意到您总是插入列表的末尾。为什么不简单地使用append

        binary[y].append("0")

更好的是,不是让字符列表,而是每个字符串:

        binary[y] += "0"

另外,请注意Python中的复制功能;你不需要那些繁琐的循环:只需要添加尽可能多的1或0。类似的东西:

    binary += "0" * (lenOfPart" - p)

一旦你学习了一些语言设施,你就可以对此进行简化。

最重要的是,在上层找出你真正需要完成的事情。告诉我们;你可以简单地解决问题和解决方案。例如,正如Delirious Lettuce所示,您可以通过在<{1}}包中搜索 first 内置功能来消除大量悲伤。

答案 1 :(得分:0)

from itertools import product


def generate_combinations(n):
    return [''.join(p) for p in product('10', repeat=n)]


if __name__ == '__main__':
    bits = int(input('How many bits do you want to have? '))
    print(generate_combinations(bits))
>>> generate_combinations(1)
['1', '0']
>>> generate_combinations(2)
['11', '10', '01', '00']
>>> generate_combinations(3)
['111', '110', '101', '100', '011', '010', '001', '000']

答案 2 :(得分:0)

循环在错误的时间停止。而不是停留在bits我需要它停在bits-1