我正在尝试使用namedtuple
from collections import namedtuple
Stock = namedtuple('Stock', ['name', 'shares', 'price'])
def compute_cost(records):
total = 0.0
for rec in records:
s = Stock(*rec)
total += s.shares * s.price
return total
with open('r.txt') as f:
content = f.readlines()
content = [x.strip() for x in content]
for i in content:
p = compute_cost(i)
print (p)
似乎我有问题,就是我如何使用posicional arguments。
File "b74.py", line 15, in <module>
p = compute_cost(i)
File "b74.py", line 7, in compute_cost
s = Stock(*rec)
TypeError: __new__() missing 2 required positional arguments: 'shares' and 'price'
这是我的文本文件
hmf Kiza 100 2.33
piz Miki 999 0.75
air Dush 500 8.50
答案 0 :(得分:3)
此错误消息表示您没有向Stock()
构造函数传递足够的参数。你的元组有3个元素,所以你需要将3个参数传递给构造函数。
但是在这一行:
for rec in records:
records
是您文件中的一行。因此rec
只是单个字符。
提示:for rec in records.split(" ")