2017-08-30 48 views
0

爲什麼我的while循環沒有被檢查直到我的for循環結束?新的python,所以我知道什麼是錯的,但不是如何解決它。我正在從json字典中提取。我想要的只是在週期小於6時輸出,但是它將所有這些都輸出,然後檢查條件。爲什麼我的while循環沒有被檢查,直到它一直運行?

i = 1 
while (i < 6): 
    for date in parsed_json['forecast']['simpleforecast']['forecastday']:  
     if date['period'] == i: 
      fiveday.append(date['low']['celsius']) 
      fiveday.append(date['high']['celsius']) 
      time.sleep(.5) 
      i = i + 1 
+2

這是一個循環的循環。當然它不會退出內部循環。如果'i> = 6',你可以打破內循環。 –

+1

不使用while - 就像你說的:首先for會完全運行,直到它再次迭代。在for循環中檢查我並在條件滿足時打破它。 – Fildor

+0

我的增量可以寫成'i + = 1',似乎沒有在正確的循環水平上。 *條件*是什麼意思? – guidot

回答

1

Python是不是我的「母語」,如此忍受我:

i = 1 

for date in parsed_json['forecast']['simpleforecast']['forecastday']:  
    if date['period'] == i: 
     fiveday.append(date['low']['celsius']) 
     fiveday.append(date['high']['celsius']) 
     time.sleep(.5) 
     i = i + 1 
    if i >= 6: 
     break 

有可能是一個更優雅的解決方案,但我真的不知道蟒蛇。但是,應該做這項工作。

0

您不需要while -loop。簡單地使用內置函數enumerate遍歷JSON詞典:

for i, date in enumerate(parsed_json['forecast']['simpleforecast']['forecastday']):  
    if date['period'] == i: 
     fiveday.append(date['low']['celsius']) 
     fiveday.append(date['high']['celsius']) 
     time.sleep(.5) 
    if i >= 6: 
     break 
0

在蟒,壓痕確定範圍。在您的代碼中,每當for循環運行時,i都會增加。所有你應該做的就是代碼的正常工作是縮進增量下來了幾個層次:

i = 1 
while i < 6: 
    for date in parsed_json['forecast']['simpleforecast']['forecastday']: 
     if date['period'] == i: 
      fiveday.append(date['low']['celsius']) 
      fiveday.append(date['high']['celsius']) 
      time.sleep(.5) 
    i += 1 

的程序仍然只會檢查while條件後的for循環已經運行其當然,但每個循環只會增加一次,這可能是問題的首要原因。

或者,如果你正在尋找所有的東西用period存儲在6,你可以切出while循環和改變你的支票在if聲明:

for date in parsed_json['forecast']['simpleforecast']['forecastday']: 
    if date['period'] < 6: 
     fiveday.append(date['low']['celsius']) 
     fiveday.append(date['high']['celsius']) 
     time.sleep(.5) 
相關問題