Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么我的while循环一直运行到最后才被检查?_Python_Json_Loops - Fatal编程技术网

Python 为什么我的while循环一直运行到最后才被检查?

Python 为什么我的while循环一直运行到最后才被检查?,python,json,loops,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: fi

为什么直到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
i=1
而(i<6):
对于解析的_json['forecast']['simpleforecast']['forecastday']中的日期:
如果日期['period']==i:
附加日期(日期['low']['celsius'])
附加(日期['high']['celsius'])
时间。睡眠(.5)
i=i+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

可能有一个更优雅的解决方案,但我并不真正了解python。但是,您应该完成这项工作。

您不需要
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

在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

这是一个循环中的一个循环。当然,它不会退出内部循环。如果
i>=6
To不使用while,则可以中断内部循环-就像您所说的:首先for将完全运行,直到再次迭代。在for循环内部检查i,如果满足条件,则将其断开。i的增量可以写成
i+=1
,并且似乎不在正确的循环级别上。你所说的条件是什么意思?我如何写它来检查循环的外部,或者写它使它在我不到6岁时只通过内部循环?我的头爆炸了。
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)