python购物清单

问题遇到的现象和发生背景

假设某食品超市库存商品如下:
货物名称 数量 单价
牛奶 40 2.80
面包 20 18.50
酸奶 35 4.00
饼干 15 14.80
苹果 60 4.50
橘子 25 6.10
香蕉 30 6.50
巧克力 45 27.50

输入一个顾客的购物清单(包括购买商品名称和数量),打印顾客购物的明细收据。包括商品名称、数量、单价、合计价格。最后是总价格。

注意:如果商品的数量不够顾客购买,顾客只能买走超市里所有此类的商品,比如顾客要买100个香蕉,最终他只能买到30个。

可以使用字典

goods = {
'milk' : {'count': 40, 'price': 2.80 },
'bread' : {'count': 20, 'price': 18.50},
'yogurt' : {'count': 35, 'price': 4.00 },
'biscuits' : {'count': 15, 'price': 14.80},
'apple' : {'count': 60, 'price': 4.50 },
'orange' : {'count': 25, 'price': 6.10 },
'banana' : {'count': 30, 'price': 6.50 },
'chocolate': {'count': 45, 'price': 27.50}
}
来存储所有商品的信息。
输入
第一行是一个整数n,表示顾客一共要买n种物品(1<=n<=8)
随后n行,每一行输入包含顾客要买的某个物品名称和数量,两者用空格隔开。其中不会出现超市里没有的商品,也不会有两行相同的商品购买需求。
输出
一共n+1行,前n行是每种物品的购买明细:包括名称 购买数量 单价 合计价格,它们用空格隔开。最后一行是一个浮点数,表示顾客买到这些东西的总价格。
所有价格保留2位小数。输出商品的顺序和输入保持一致。

运行结果及报错内容

img

我想要达到的结果

accepted


goods = {
'milk' : {'count': 40, 'price': 2.80 },
'bread' : {'count': 20, 'price': 18.50},
'yogurt' : {'count': 35, 'price': 4.00 },
'biscuits' : {'count': 15, 'price': 14.80},
'apple' : {'count': 60, 'price': 4.50 },
'orange' : {'count': 25, 'price': 6.10 },
'banana' : {'count': 30, 'price': 6.50 },
'chocolate': {'count': 45, 'price': 27.50}
}

n = int(input())
item = {}
for i in range(n):
    name, count = input().split()
    count = int(count)
    item[name] = int(count)

sum = 0
for name, count in item.items():
    if goods[name]['count'] >= count:
        print('%s %s %.2f' % (name, count, goods[name]['price']*count))
        sum += goods[name]['price']*count
    else:
        print('%s %s %.2f' % (name, count, goods[name]['price']*goods[name]['count']))
        sum += goods[name]['price']*goods[name]['count']
print('%.2f'%sum)