在Python中使用多个for循环
在Java中,我可以使用以下代码:
for(int i = 1 ; i<=100 ; i*=2)
那么,我们能不能用Python的for循环来实现这种类型的循环呢?
类似这样:for i in range(0, 101, i*2)
相关问题:
- 暂无相关问题
4 个回答
0
与其使用for循环,不如用while循环来处理多个递增的情况。
i = 0
while (i < 350):
print(i)
i *= 5 // multiply value = 5
0
这段代码的意思是:首先从数学库中引入一个叫做“对数”的功能。接着,它计算出100用2为底的对数,并把这个值转换成整数,存储在一个叫做“counter”的变量里。这个对数的值其实就是2的多少次方等于100。
然后,代码会生成一个从2的1次方到2的“counter”次方的数字序列。这个序列是通过一个循环来实现的,循环的每一步都会计算2的y次方,其中y是从1到“counter”的每一个数字。
最后,代码会把这些计算出来的数字逐个打印出来。
希望这些解释对你有帮助!
1
你可以自己定义一个生成器,像下面这样:
def pow2_range(max):
i = 1
while i < max:
yield i
i = i * 2
for x in pow2_range(100):
print(i)
这样会输出:
1
2
4
8
16
32
64
2
这个循环是用来计算小于100的2的幂次方的。正如所提到的,从0开始会导致没有任何进展。
>>> import math
>>> math.log(100)/math.log(2)
6.643856189774725
>>> 2**6
64
>>> 2**7
128
>>> int(math.log(100)/math.log(2))
6
这告诉我们可以在6
或者int(math.log(100)/math.log(2))
处停止,使用range时需要加1才能包含6
:
import math
for i in (2**p for p in range(int(math.log(100)/math.log(2))+1)):
一个示例运行:
>>> for i in (2**p for p in range(int(math.log(100)/math.log(2))+1)):
... print i
...
1
2
4
8
16
32
64
这段代码for(int i = 1 ; i<=100 ; i*=2)
的字面意思是:
i = 1
while i <= 100:
# body here
i *= 2
这可以变成一个生成器:
def powers():
i = 1
while i <= 100:
yield i
i *= 2
可以像这样使用:
for i in powers():
print i