2016-10-26 64 views
-1
from itertools import count,repeat,cycle 
for i in cycle("raghav"): 
    print(i) 
    if len(i) >= 6: 
     break 

我的代碼是無限的運行,即使我有限制LEN,我也曾嘗試count(i) >= 6但隨後會返回一個錯誤:如何限制no。的時間週期應該在Python運行

TypeError: a number is required

+1

我不認爲無論如何,你真的想在這裏使用'cycle'嗎? '因爲我在「raghav」'會實現你想要做'循環'的事情。 – roganjosh

+0

@roganjosh取決於。停止索引可以延長,香草的方法將不起作用 –

+0

@roganjosh他們可能正在尋找'raghavr' –

回答

2
for i, x in enumerate(cycle('raghav')): 
    print(x) 
    if i >= 6: 
     break 

這是一個完美的使用情況enumer吃了

哦,你想反覆打印'raghav'。對於使用repeatcycle

from itertools import repeat 
for i, x in enumerate(repeat('raghav')): 
    print(x) 
    if i == 5: 
     break 

或者只是

for i in range(5): 
    print('raghav') 
+0

所以這裏枚舉實際上是在索引上工作,如果我沒有錯 –

+0

@ Dr._Duck自己嘗試!用'print(i,x)'和'if i> = 6:'替換'print(x)',如果if> 20:' –

+0

@ Dr._Duck我誤解了你的問題。請參閱我的編輯 –

4

外設立一個count對象循環並使用其next方法:

from itertools import count, cycle 

c = count() 
for i in cycle("raghav"): 
    print(i) 
    if next(c) >= 6: 
     break 
+1

'枚舉'爲你做櫃檯。 –

+0

@MadPhysicist他們已經給出了'count'的提示並導入了它。 –

+0

作爲一個與Python迭代的複雜性密切相關的人,OP並沒有引起我的興趣。 –

2

len(i)將永遠是1i'raghav'只是一個字符。如果你只是想讓它打印出來'raghav'字母的字母,因爲它似乎,你能做到這一點

for i in 'raghav': 
    print(i) 
+0

注意這一點是因爲它是XY問題的潛在解決方案,即使它不是OP所要求的。 –

+0

@roganjosh由於OP想要在最近的編輯中打印6次這個詞,所以這是行不通的。 –

+0

@MadPhysicist我知道,我編輯我的評論,因爲我不清楚。這絕對是XY問題的一個例子,但得到4個答案。 – roganjosh

2

可以使用itertools.islice切片itertools.cycle對象:

>>> from itertools import cycle, islice 
>>> for i in islice(cycle('raghav'), 6): 
    print (i) 
... 
r 
a 
g 
h 
a 
v 
+0

狡猾。因爲我們知道終止條件,所以比'enumerate'和'count'選項更清潔。 –

+0

根據更新,'islice'的最後一個參數實際上應該是'6 * len('raghav')'。 –

相關問題