【发布时间】:2015-02-04 09:02:59
【问题描述】:
这是我的代码。此代码用于管理商店中的水果库存。所以你输入水果的名称和数量。如果水果没有在字典中注册,它会将水果和它的值添加到字典中。如果水果被注册,它会检查它的值是否大于字典中的原始值。如果它更大,它将替换金额,但如果输入的金额小于原始金额,它不会做任何事情。
我使用下面的代码来检查水果的平均值。所以它会计算我买了多少水果并累积起来。这样以后,我就可以用它来找出平均值,方法是用这个数字除以我积累的次数。
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()
【问题讨论】:
-
1) 查看集合模块中的 Counter-class (docs.python.org/2/library/collections.html)。 2)你的缩进似乎很遥远。就像现在一样,您正在递归调用
fruit(),没有破坏条件,并且您正在上下文管理器中重新打开fruits.pickle。 -
@MrGumble 如果您能提供帮助,是否可以改进此代码?
标签: python dictionary pickle