迭代循环次数有限

时间:2017-07-19 03:37:33

标签: python loops

我知道这样的问题已被无数次问过,但我发现的任何事情似乎都不适用于这种情况。如何为每个i运行一次此代码?这是一个无限循环,现在一遍又一遍地打印相同的列表。

如果我删除了while循环或将append方法嵌套在for循环中,则它无法按预期工作。我需要将它乘以2(2,4,8,16,32等)64次。

board = []
def count():
    for i in range(1,65):
        while i:
            i = (i)*2
            board.append(i)
            if i in board is True:
                break
            print(board)
count()

4 个答案:

答案 0 :(得分:1)

以下是对代码的最简单修改。实际上你想要做的事情可以在Python中更简单地实现(例如board = [2**i for i in range(1,65)])。我只想说明需要从代码中删除哪些内容以使其按照您的意愿执行操作(正如我所理解的那样):

board = []
def count():
    j = 1
    for i in range(1, 65):
        j *= 2 # we do not want to modify loop's variable
        board.append(j)
    print(board)
count()
  1. 您不需要while i。事实证明这是一个无限循环,因为if i in board is True总是假的(见enter image description here)。所以你正在运行一个无限循环。我认为你实际上打算while - 在第一次迭代后循环中断,然后你应该将条件修改为if i in boardif (i in board) is True两者总是为真=>不需要循环。
  2. 您无需检查i是否在board,因为在上一个声明中您要将其附加到主板上,以便您确定 { {1}} 位于 i
  3. 您有board。不建议修改循环变量(所以我引入了i = (i)*2)。例如,如果我保留了您的代码j,则i = i * 2将在下一次迭代时重置为循环变量的下一个值,从而忘记了i设置为其值的两倍。
  4. i移到循环之外,否则您将获得非常长的输出。

答案 1 :(得分:1)

你的循环无限运行,因为我总是如此。尝试删除while循环以及条件。此外,引入一个新变量使其值加倍,因为我在7次变为64,但你需要64个值。

答案 2 :(得分:1)

使用您的代码作为起点,可以修改以下内容:

board = []
def count():
    total = 1
    for i in range(1,65):
        total = total*2
        board.append(total)
        print(total) # just so you can better visualize the output
count()

输出:

2
4
8
16
32
64
128
256
512
1024
2048
4096
8192
16384
32768
65536
131072
262144
524288
1048576
2097152
4194304
8388608
16777216
33554432
67108864
134217728
268435456
536870912
1073741824
2147483648
4294967296
8589934592
17179869184
34359738368
68719476736
137438953472
274877906944
549755813888
1099511627776
2199023255552
4398046511104
8796093022208
17592186044416
35184372088832
70368744177664
140737488355328
281474976710656
562949953421312
1125899906842624
2251799813685248
4503599627370496
9007199254740992
18014398509481984
36028797018963968
72057594037927936
144115188075855872
288230376151711744
576460752303423488
1152921504606846976
2305843009213693952
4611686018427387904
9223372036854775808
18446744073709551616

然而,如AGN所述,更简单,更优雅的方式是board = [2**i for i in range(1,65)]

答案 3 :(得分:1)

这段代码会给你2s到2 ** 64的能力。我认为这是必要的

board = [2**i for i in list(range(1,65))]
print(board)