【发布时间】:2021-08-27 14:53:44
【问题描述】:
CATALOGUE = {("table", 9999, 20), ("chair", 2999, 5), ("lamp", 1999, 10)}
def add_item_to_order(name, quantity, order):
number=0
lookup=[]
new={}
catlist=list(CATALOGUE)
for item in name, quantity, order:
for item in order:
lookup=list(order)
for cat in catlist:
if name==lookup[0][0]:
newnumber=number+quantity+lookup[0][1]
new={(lookup[0][0],newnumber,lookup[0][2],lookup[0][3])}
elif name in cat and len(lookup)!=0:
new={(lookup[0][0],lookup[0][1],lookup[0][2],lookup[0][3]),(cat[0],quantity,cat[1],cat[2])}
elif name in cat and len(lookup)==0:
new={(cat[0],quantity,cat[1],cat[2])}
return new
else:
raise KeyError
add_item_to_order("table", 1, set())
我有一个任务,其中一个包含名称、数量和顺序(一组)的元组被输入到一个函数中。根据订单是否与名称匹配,该函数返回一个新集合,例如{("table"(name),1 (quantity), 9999(price in pence), 20 (weight)},这里更新了数量。 如果名称与顺序不匹配并且名称与目录匹配,则生成一组两个元组,例如{('chair', 1, 2999, 5), ('table', 1, 9999, 20)} .如果按顺序输入的集合为空,则返回 CATALOG 中与输入中的名称匹配的一个元组的集合,例如对于上面的代码应该返回 {("table", 1, 9999, 20}。上面的代码能够在第一个两个条件下工作,但是如果输入中有一个空的 order 集,则返回 Nonetype,如输入。我想知道如何解决这个问题?
【问题讨论】:
-
new={}创建一个空字典,而不是一个空集。使用new=set()创建一个空集。 -
您总是在
for循环的第一次迭代中从函数返回。这可能不是你想要的。 -
我不明白第二种情况。为什么只是添加
table,结果中会出现chair?
标签: python list function set tuples