【问题标题】:Why is it unable to sum the profits? Is there a problem with the list values?为什么无法汇总利润?列表值有问题吗?
【发布时间】:2020-06-27 21:44:26
【问题描述】:
profits = 0
losses = 0
netprofits = 0


with open(csvpath) as csvfile:
    csvreader = csv.reader(csvfile, delimiter =',')
    csvheader = next(csvreader)

for row in csvreader:
    if (int(row[1])) > 0:
        profits += float(row[1])
    profits = (profits)
    print(sum(profits))

我不断收到一个错误,说它无法迭代 float() 对象。任何建议将不胜感激。

【问题讨论】:

  • 作为一般规则,请在询问错误时发布完整的堆栈跟踪。
  • 退出with-block 后,csvfile 已关闭,因此无法再访问。你应该得到一个ValueError: I/O operation on closed file-exception。 for 循环应缩进,以便包含在 with 块中。但是由于您没有发布堆栈跟踪,因此很难知道您的确切问题是什么。
  • @DanielF:文件处理程序已关闭,但这对 csvreader 对象没有任何意义。

标签: python python-3.x for-loop if-statement


【解决方案1】:

你有一些无意义的代码;我在下面编辑了你的循环。

你不需要调用 sum 函数,因为这就是你在这个循环中所做的事情。 += 运算符将额外金额添加并存储在同一变量中。

我不知道你想用 profits = (profits) 做什么,所以我完全删除了它。

最后,您需要将利润打印语句移到循环之外,这样您只需点击一次。

for row in csvreader:
    if int(row[1]) > 0:
        profits += float(row[1])
    
print(profits)

【讨论】:

  • 感谢您的回答。我并不是要留下“利润=(利润)”。我真正想要的是对存储在“利润”中的值求和
  • @bpd0008:这正是你所做的。
  • @bpd0008:利润从零开始,您将 CSV 中的值添加到其中。您没有将它们作为单独的元素存储在列表中;不需要额外的求和函数。
  • 由于某种原因,当我打印利润时,它会不断列出每个值。
  • @bpd0008:您是否将 print 语句留在循环中而不是在循环后移动它?
猜你喜欢
  • 2017-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-07
相关资源
最近更新 更多