如何在Python 3中为每个for循环迭代加倍我的步变量?

时间:2015-07-18 19:35:07

标签: python loops for-loop

我是Python的新手,我正在练习递归功能。

我制作了以下算法,该算法将数字设为 x ,并将其减半,直至等于1. n x 已减半。

def binary(x, n = 0):
    print(n,":",x)
    x = x // 2
    n += 1
    if x > 0:
       binary(x, n)
       return x
    return x

我试图创建一个循环,用多个x值调用binary()。我希望我的步骤每次迭代加倍。我有一个像下面那样的while循环。

i = 1
while i < 1000000000:
    print("when x is", i, ":")
    binary(i)
    i += i

出于某种原因,我似乎无法用For循环实现同样的目的。这就是我现在所拥有的。

for i in range(1,1000):
    print("when x is", i, ":")
    binary(i)
    i += i

在上面的代码中,i += i似乎不会影响我标题中的i。我知道range()接受一个名为step的第三个参数,但我试过这个:

for i in range(1,1000, i += i):
    # statements

这给了我一个名字错误,并说&#34;我没有定义&#34;。 我在编程方面的大部分经验都是使用JavaScript和C#。在这两种语言中,我都不会遇到任何麻烦。

如何使用Python 3在For循环中使用它?

3 个答案:

答案 0 :(得分:2)

range的第三个参数确实是步骤。但是你应该使用计算值,如:

for i in range(1,1000,2):
    #statements

你的i += i没有用的原因是因为,在循环中,for循环在迭代结束时执行与i = next(...)类似的东西,覆盖了你的上一个增量。< / p>

修改

您可以使用生成器实现所需的效果,但它有点杀死“试图避免while循环”的事情:

def myrange(start, stop):
    i = start
    while i < stop:
        yield i
        i += i

for i in myrange(1, 1000):
    print(i)

无论如何,while循环是完全有效的结构,在这种情况下我会个人使用。不要忘记for循环在python中的语义与您习惯使用的两种语言完全不同。所以尝试使用for循环,因为你可以用javascript这样做,如果你需要的只是一个while循环,这似乎是一个坏主意。

答案 1 :(得分:1)

range可以固定金额,但不是可变金额。使用while-loopi增加i

i += i

您可以使用迭代器替换while-loop,例如:

import itertools as IT
for i in (2**i for i in IT.count()):
    if i >= 1000000000: break
    print("when x is", i, ":")
    binary(i)

但我不认为这比简单的while-loop更有优势。

答案 2 :(得分:0)

如果你所做的只是加倍i,那么为什么不把它提升到权力呢?

for p in range(int(1000000000**0.5)):
    print(binary(2**p)