例如JAVA或C ++中的这种for循环:
int N = 20;
for (i = 1; i < N; i = 3 * i + 1)
我将是1,4,13
我只能用它来完成它
while i < N:
i = 3 * i + 1
如何在python中使用另一种样式编写它?
抱歉我的英文。
答案 0 :(得分: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
答案 1 :(得分:0)
这是发电机的工作。这样做:
def series(i=1):
while True:
yield i
i = 3 * i + 1
from itertools import takewhile
takewhile(lambda x: x < 20, series())
答案 2 :(得分: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