0

例如 JAVA 或 C++ 中的这种 for 循环:

int N = 20;
for (i = 1; i < N; i = 3 * i + 1)

我将是 1、4、13

我只能用while来完成它

while i < N:
    i = 3 * i + 1

如何在 python 中使用另一种样式编写它?

对不起我的英语不好。

4

3 回答 3

3

从 Python 的角度来看,您的 while 循环实现没有错。如果你想要一个通用的循环结构来模仿 C/C++/Java 的循环结构,你可以做类似的事情

>>> def loop(init, cond, incr):
    i = init
    while cond(i):
        yield i
        i=incr(i)


>>> list(loop(1, lambda e:e < 20, lambda e:3*e + 1))
[1, 4, 13]

创建循环例程后,您可以根据需要使用它来创建任何自定义循环格式

for i in loop(1, lambda e:e < 20, lambda e:3*e + 1):
    print i
于 2013-05-24T15:41:47.280 回答
0

这是另一种方法。它比 Abhijit 的答案更专业。

def timesThreePlusOne(init,limit):
    i = init
    while i < limit:
        yield i
        i = (3 * i) + 1
N = 20
for i in timesThreePlusOne(1,N):
    print i
于 2013-05-24T16:17:29.483 回答
0

这是发电机的工作。做这个:

def series(i=1):
    while True:
        yield i
        i = 3 * i + 1

from itertools import takewhile
takewhile(lambda x: x < 20, series())
于 2013-05-24T16:01:45.800 回答