这是我的代码。此代码用于管理商店中的水果库存。所以你输入水果的名称和它的数量。如果水果没有在字典中注册,它会将水果和它的价值添加到字典中。如果水果已注册,它将检查其值是否大于字典中的原始值。如果它更大,它将取代金额,但如果输入的金额小于原始金额,它就不会做任何事情。
我使用下面的代码检查水果的平均值。所以它计算了我买了多少水果并积累了它。所以,稍后,我可以用它来找出平均数除以我累积它的次数。
items[fruit_t]["av"]+=(fruit_n)
这是个问题。当我尝试将内容添加到字典中时,它会首次打印,但是当我继续添加另一种水果时,之前添加的水果会消失。我不知道什么是错的。另外,我想使用.append而不是+ =,如上所示,但是当我尝试这样做时,会出现错误。我想使用append,因为稍后,我可以使用len()来计算av中有多少个数字 ,总结av并除以av。的len()值
import pickle
def fruit():
with open('fruits.pickle', 'a') as f:
try:
items = pickle.load(f)
except ValueError:
items = {"Apple":{"av":10,"count":10},"Banana":{"av":14,"count":14},"Orange":{"av":23,"count":23},"Watermelon":{"av":54,"count":54}}
fruit_t = input("Please type in the name of the fruit: ")
fruit_n = int(input("Please type in the amount of the fruit: "))
if fruit_t in items:
items[fruit_t]["av"]+=(fruit_n)
if items[fruit_t]["count"] < fruit_n:
items[fruit_t]["count"] = fruit_n
else:
items[fruit_t] = {"av":fruit_n,"count":fruit_n}
with open('fruits.pickle', 'wb') as f:
pickle.dump(items, f)
for k in items:
print("{} monthly {}".format(k,items[k]["av"]))
print("{} total {}".format(k,items[k]["count"]))
fruit()
fruit()
编辑并正常工作的代码。
import pickle
def fruit():
with open('fruits.pickle', 'rb') as f:
try:
items = pickle.load(f)
except ValueError:
items = {}
fruit_t = input("Please type in the name of the fruit: ")
fruit_n = int(input("Please type in the amount of the fruit: "))
if fruit_t in items:
items[fruit_t]["total"]+=(fruit_n)
if items[fruit_t]["count"] < fruit_n:
items[fruit_t]["count"] = fruit_n
else:
items[fruit_t] = {"total":fruit_n,"count":fruit_n}
with open('fruits.pickle', 'wb') as f:
pickle.dump(items, f)
for k in items:
print("{} monthly {}".format(k,items[k]["total"]))
print(items[k]["count"])
fruit()
fruit()
答案 0 :(得分:1)
我会用一种截然不同的方法回答你的问题:
pickle
不会加载您的pickle文件,因为您要在第3行附加&#39; -mode中打开该文件。
您没有注意到错误,因为您已将加载括在try
语句中。相反,会捕获异常并从默认情况下加载items
。
解决方案:将第3行open
中的模式更改为rb
。
答案 1 :(得分:0)
鉴于您没有更正问题中的代码,这就是错误:
open
中的模式。
当您打算读取文件时,这没有用;改为使用
r
用于阅读,也许rb
用于阅读二进制文件。fruit_t = ...
)因为这标志着从第3行开始的上下文管理器的退出(with ...
是一个上下文管理器)。这将在您阅读完之后再次关闭文件。 Dedent紧随其后。代码示例1
from collections import Counter
fruits = {'apple':0, 'banana':0}
purchases = Counter(fruits)
fruits = Counter(fruits)
## on purchase
fr = 'apple'
buy = 4
fruits[fr] += 4
purchases[fr] += 1
如果您购买的是尚未出现在柜台中的水果(即设置fr = 'mandarin'
),会发生什么。