例如 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 中使用另一种样式编写它?
对不起我的英语不好。
从 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
这是另一种方法。它比 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
这是发电机的工作。做这个:
def series(i=1):
while True:
yield i
i = 3 * i + 1
from itertools import takewhile
takewhile(lambda x: x < 20, series())