2013-05-24 2 views
0

, например, такой цикл в JAVA или C++:Как преобразовать этот тип цикла в Python

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

я буду 1, 4, 13

можно использовать только тогда, когда к заполните его

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

Как написать это, используя другой вид стиля в python?

Извините за мой английский.

+5

Цикл while - лучшее, что я могу придумать. Что вы на самом деле делаете с этим? – mgilson

+0

Если ваш инкремент не был '3 * i + 1', я бы предложил заглянуть в' range', но аргумент шага, который он принимает, ожидает целое число. Вы могли бы написать свою собственную версию. –

+0

Ваш цикл for действителен в python – karthikr

ответ

3

Ваша реализация цикла while не имеет ничего общего с перспективой Python. Если вы хотите, обобщенная структура петли, чтобы имитировать структуру петли 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 
+11

этот код нечитабельно и полностью сверху. – Ferguzz

+3

Я думаю, что нужен op, это «стиль Python» для ', а не C/Java' for' в Python. – chenaren

+1

@Ferguzz: код является вполне читаемым и поддерживаемым, если вы знаете, как его читать. Подпрограмма - один раз и может быть повторно использована для любой формы серии или структуры цикла. – Abhijit

0

Это работа для генераторов. Сделайте это:

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

from itertools import takewhile 
takewhile(lambda x: x < 20, series()) 
0

Вот еще один способ сделать это. Он более специализирован, чем ответ Абхиджит.

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 
Смежные вопросы