在Python中使用多个for循环

0 投票
4 回答
1863 浏览
提问于 2025-05-17 16:25

在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

撰写回答