我是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循环中使用它?
答案 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-loop
将i
增加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)