我有一个简单的脚本,它包含一个包含3列数据的列表。第二列数据包含带有美元符号的货币值。我从第二栏中删除了美元符号,现在我需要将这些值加起来。我得到一个" decimal.Decimal不可迭代"错误。这是代码:
from decimal import Decimal
def main():
total = 0.0
try:
infile = open('list.txt', 'r')
for i in infile:
parts = i.split()
if len(parts) > 1:
dollar_dec = Decimal((parts[1]).strip('$'))
total = sum(dollar_dec)
print (total)
infile.close()
except Exception as err:
print(err)
main()
答案 0 :(得分:1)
total = sum(dollar_dec)
sum()采用可迭代(例如列表)并将所有值相加。您传递的是一个数字,这是一个错误。你可能想要
total = Decimal('0.0')
...
total += dollar_dec
这将保持总计。
(编辑 - 总数必须是十进制,以便为其添加小数)
答案 1 :(得分:1)
说,您有以下文件内容:
content = """\
one $1.50
two $3.00
three $4.50"""
您可以使用就地运算符+=
来计算总数:
from decimal import Decimal
import io
total = Decimal(0)
with io.StringIO(content) as fd:
for line in fd:
parts = line.strip().split()
if len(parts) > 1:
dollard_dec = Decimal(parts[1].strip("$"))
total += dollard_dec
print(total)
她,你得到:9.00
您还可以在iterable上使用sum()
(此处为理解列表):
with io.StringIO(content) as fd:
total = sum(Decimal(line.strip().split()[1].strip("$"))
for line in fd)
print(total)
是的,你也得到9.00!
答案 2 :(得分:0)
sum()
需要迭代。只需将代码更改为total += dollar_dec