为什么我的while循环没有被检查,直到它一直运行?

时间:2017-08-30 14:24:09

标签: python json loops

为什么直到我的for循环结束才检查我的while循环? python的新手,所以我知道什么是错的,但不知道如何解决它。我正在从一个json词典中拉出来。我想要的是在周期小于6时输出,但它会拉出所有这些然后检查条件。

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

3 个答案:

答案 0 :(得分:1)

Python不是我的母语&#34;所以忍受我:

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

可能有更优雅的解决方案,但我不太了解python。不过应该做这个工作。

答案 1 :(得分:0)

您不需要while - 循环。只需使用内置函数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

答案 2 :(得分:0)

在python中,缩进确定范围。在您的代码中,每次i循环运行时for都会递增。要使代码正常工作,您所要做的就是将增量器缩进几个级别:

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条件,但它只会< em> increment 每个循环一次,这可能是问题首先出现的问题。

或者,如果您希望将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)