【问题标题】:Why is my while loop not being checked until it runs all the way through?为什么我的while循环直到它一直运行才被检查?
【发布时间】:2017-08-30 14:24:08
【问题描述】:

为什么直到我的 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 &gt;= 6 也可以打破内部循环
  • 不要使用 while - 就像你说的:首先 for 将完全运行,直到它再次迭代。在 for 循环中检查 i 并在满足条件时将其中断。
  • i 的增量可以写成i += 1 并且似乎不在正确的循环级别上。 条件是什么意思?
  • 我如何编写它以检查循环外部或编写它以便它仅在 i 小于 6 时通过内部循环?
  • 我的脑袋都炸了。

标签: python json loops


【解决方案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。不过,应该完成这项工作。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      在 python 中,缩进决定范围。在您的代码中,每次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
      

      程序仍然只会在for 循环运行后检查while 条件,但它只会在每个循环中递增一次,这很可能是问题所在。

      或者,如果您希望存储所有 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)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-05-17
        • 1970-01-01
        • 2021-11-30
        • 1970-01-01
        • 2011-06-10
        • 2023-01-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多