【问题标题】:How use two different loops under a for loop in python如何在python中的for循环下使用两个不同的循环
【发布时间】:2015-10-23 17:40:19
【问题描述】:

我们必须计算一个大于 130 和小于 -70 的数字在 Excel 工作表中每行的第二列出现的次数,保存为 csv 文件。我需要一个循环,但我已经在它上面有一个循环,用于计算行中的不同列。我似乎无法获得一个循环所有行 [4] 并将其计算为一个变量的代码。这是我的代码。

import csv
import os
total = 0
count = 0
ring = 0
column = []
with open("2.5_week.csv") as source:
    rdr = csv.reader(source, delimiter=',')
    next(rdr, None) # to skip the header

    for row in rdr:
        if float(row[4]):
            total = total + float(row[4])
            count = count + 1  
        while (float(row[2]) >= 130 and float(row[2]) <= -70):
            ring = ring + 1
            print(ring)
        percent = (ring/count) * 100
        ave = total / count
    print (ave, percent)

它适用于 if 循环并打印 'ave' 但似乎跳过了 while 循环。提前致谢

【问题讨论】:

  • 您的 while 循环可能未计算为 true。
  • 没有大于 130 且小于 -70 的数字。你的情况永远不会是真的。 (如果条件为真,您的 while 循环也将永远运行,因为您永远不会更改其中 row[2] 的值...)
  • 是的,可以。
  • 好在 while 循环永远不会是真的,因为如果是真的,它将永远运行,因为 row 的值在循环中永远不会改变。确定你不只是想要一个if 吗?
  • 循环永远不会被跳过。总会有评估发生。它可能会跳过循环语句,但条件总是检查“for”的每次迭代

标签: python csv python-3.x


【解决方案1】:

条件float(row[2]) &gt;= 130 and float(row[2]) &lt;= -70 在逻辑上不正确。假设数字是 230,所以 230&gt;=130 为真,但 230&lt;=-70 为假,因此条件评估为假。

所以用这个:

while (float(row[2]) >= 130 or float(row[2]) <= -70) #or instead of and

【讨论】:

  • 为什么你认为没有大于130的数字?
  • 那么如果数字是 150 会发生什么?未输入 while 循环,因为条件 150 &gt;= 130 匹配,但 150 &lt;= -70 不匹配。值不是问题,比较才是问题。
  • @JessyWhite 很高兴我能帮上忙 :)
猜你喜欢
  • 2020-05-27
  • 2023-03-04
  • 2021-04-09
  • 2020-10-14
  • 1970-01-01
  • 1970-01-01
  • 2016-05-10
  • 2022-11-11
  • 1970-01-01
相关资源
最近更新 更多