2016-08-08 156 views
0

這是Java:如何在Python中影響內循環的外循環變量?

for(int i=0; i<10; i++){ 
    while(i%3!=0) 
     i++; 
    System.out.print(i + " "); 
} 

這將輸出:

我想實現在Python 3類似的代碼塊我不能至。

在外部循環中,我不能使用範圍,因爲它會導致整個列表上的迭代我在某處讀到我想的。所以,我在下面嘗試,但它危險地失敗,無限地運行。

i=1 
while i<=10: 
    while i%3 is not 0: 
     i+=1 
    print('run') 

我可以通過去除內部while和代碼改變爲i+=3已經實現目標。但我試圖制定的計劃具有重要的條件,因此它必須在那裏。 必須有兩個循環,並基於內部循環條件匹配,我遞增迭代變量,所以當我中斷並處理一些程序輸出時,父循環應該從我在內循環中停止的地方開始迭代。以上只是我能想到分享這個問題的一個例子。我需要建議如何複製Python中Java代碼中描述的更改。

更新:這是程序,我是想這樣的:https://softwareengineering.stackexchange.com/questions/327908/finding-total-number-of-subarrays-from-given-array-of-numbers-with-equal-max-and

+1

那麼,你一旦擊中3就不會增加,所以它當然無限運行。 – rmlan

+2

你的外部for循環永遠不會增加i。所以,如果我從0開始,由於缺少增量,它將永遠保持爲0。另外,如果你想在單行上打印[0,10]中的每一個第三個數字,爲​​什麼不做一下這樣的事情: '對於我在範圍內(0,11,3):print我,結束='')' –

回答

2
i = 0 
while i < 10: 
    while i % 3 is not 0: 
     i += 1 
    print(str(i) + " ") 
    i += 1 
+0

plz閱讀編輯Q. – xploreraj

+0

@xploreraj然後我給出的最佳答案是你想要的。 –

+0

這看起來像是java版本的完全匹配,不是嗎? – Aguy

0

從我的任擇議定書的問題評論:

for i in range(0, 11, 3): print(i, end=' ')

+0

plz閱讀已編輯的Q. – xploreraj

3

沒有必要對兩個循環在你的例子中。

while i<=10: 
    if i%3 == 0: 
    print(i+ " ") 
    i++ 

您的代碼運行無限因爲你永遠不增加我當它等於3

1

另一種選擇是隻使用列表理解:

print(' '.join([i for i in range(10) if i % 3 == 0]) 
+0

plz閱讀已編輯的Q. – xploreraj

+0

只需增加內部循環的外部即可。 外層循環永遠在運行,因爲一旦內層循環完成,沒有什麼會改變我的值。但是,如果您希望的輸出是您給出的0 3 6 9例子,請使用@ Dallan的答案。 – apteryx

1

確定。對該黨的另一個建議。可能會有所幫助您的實際任務:

g = iter(range(10)) 
for i in g: 
    while i%3 is not 0: 
     i = next(g) 
    print(i) 

的主要區別是,當內環超過(即對於外環)的迭代器定義的範圍,這將提高StopIteration例外。可能是想要的東西,或者可能不是。

+0

有趣。向我介紹iter功能。 – xploreraj

相關問題