Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 循环迭代次数有限_Python_Loops - Fatal编程技术网

Python 循环迭代次数有限

Python 循环迭代次数有限,python,loops,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.a

我知道这样的问题已经被问过无数次了,但我发现在这种情况下似乎什么都不起作用。如何使此代码每运行一次
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()

下面是对代码的最简单修改。实际上,用Python可以实现更简单的操作(例如
board=[2**i for i in range(1,65)]
)。我只是想说明需要从您的代码中删除哪些内容,以使其实现您希望它实现的功能(据我所知):

  • 当i时,您不需要
    。事实证明,这是一个无限循环,因为
    如果我在板中为真
    总是为假(请参阅)。因此,您正在运行一个无限循环。我认为您实际上是打算在第一次迭代后,
    while
    -循环中断,然后您应该将条件修改为
    if I in board
    if(I in board)为True
    两者都始终为True=>不需要循环
  • 您无需检查
    i
    是否在
    板中,因为在上一条语句中,您将其附加到板中,以便您确定
    i
    板中
  • 你有
    i=(i)*2
    。不建议修改循环的变量(因此我引入了
    j
    )。例如,如果我保留您的代码
    I=I*2
    ,那么
    I
    将在下一次迭代时重置为循环变量的下一个值,从而忘记将
    I
    设置为其值的两倍
  • 打印(电路板)
    移出循环,否则您将获得很长的输出

  • 下面是对代码的最简单修改。实际上,用Python可以实现更简单的操作(例如
    board=[2**i for i in range(1,65)]
    )。我只是想说明需要从您的代码中删除哪些内容,以使其实现您希望它实现的功能(据我所知):

  • 当i时,您不需要
    。事实证明,这是一个无限循环,因为
    如果我在板中为真
    总是为假(请参阅)。因此,您正在运行一个无限循环。我认为您实际上是打算在第一次迭代后,
    while
    -循环中断,然后您应该将条件修改为
    if I in board
    if(I in board)为True
    两者都始终为True=>不需要循环
  • 您无需检查
    i
    是否在
    板中,因为在上一条语句中,您将其附加到板中,以便您确定
    i
    板中
  • 你有
    i=(i)*2
    。不建议修改循环的变量(因此我引入了
    j
    )。例如,如果我保留您的代码
    I=I*2
    ,那么
    I
    将在下一次迭代时重置为循环变量的下一个值,从而忘记将
    I
    设置为其值的两倍
  • 打印(电路板)
    移出循环,否则您将获得很长的输出

  • 你的循环无限地运行,因为我总是正确的。尝试删除while循环和if条件。另外,引入一个新变量使其值加倍,因为我7次变为64,但您需要64个值。

    您的循环无限运行,因为我始终为真。尝试删除while循环和if条件。另外,引入一个新变量,使其值在7次变为64时加倍,但您需要64个值。

    使用您的代码作为起点,可以对其进行以下修改:

    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
    

    然而,一种更简单、更优雅的方法是
    board=[2**i代表范围(1,65)]
    ,正如AGN所指出的那样。

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

    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
    

    然而,一种更简单、更优雅的方法是
    board=[2**i代表(1,65)范围内的i]
    ,正如AGN所指出的那样。

    这段代码会让你在2**64之前拥有2s的功率。我想这就是所需要的

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

    这个代码会给你2秒到2**64的能量,怎么样。我想这就是所需要的

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

    修改
    i
    不会影响循环。循环条件不是
    ,而我<65
    @JohnGordon我更新了我的第3点以更好地解释我的想法。修改
    i
    不会影响循环。循环条件不是
    ,而我<65
    @JohnGordon我更新了我的观点#3以更好地解释我的想法。
    循环不是无限期运行的<代码>如果我在板内
    始终为真=>
    执行中断
    。如果我在板内
    ,中断条件不是
    ;这是
    如果我在黑板上是真的
    ,不知何故,它是
    假的
    。我不明白为什么。@JohnGordon捕捉得好!事实上,
    i在板上是真的
    “是假的”,而
    (i在板上)是真的
    是真的<代码>而
    循环没有无限期运行<代码>如果我在板内
    始终为真=>
    执行中断
    。如果我在板内
    ,中断条件不是
    ;这是
    如果我在黑板上是真的
    ,不知何故,它是
    假的
    。我不明白为什么。@JohnGordon捕捉得好!事实上,
    i在板上是真的
    “是假的”,而
    (i在板上)是真的
    是真的!!!对于序列中的每个值运行一次的循环是
    for
    循环的定义。如果删除
    while
    语句,则此代码将按预期运行。@JohnGordon否,它将不会按预期运行,因为
    i
    在下一个循环中被重置为
    范围中的下一个值
    ——请参见我答案中的第3点。可能是我的误解。我期待着循环