我正在创建一类客户购物车,所以我创建了一类产品,然后用购物篮创建了添加,删除和清空篮子的方法。 现在我想用BOGOF报价计算一篮子的价格总和。 我的问题在于'总计'方法,错误是'全局名称x未定义'。
我的问题是我需要编写代码,因为购物车中的东西是产品类实例的名称属性。我无法找到另一种方法将产品附加到购物车上。或列出所以希望我没有在那里犯错。我不明白为什么会出现这样的错误,而不是“添加项目”中的错误。我使用item.quantity的方法。
我的猜测是,不同之处在于该项是该函数域的一部分,但x不是。我不认为我的总方法需要任何其他输入。我只需要自我,因为每个人都有一个篮子,这就是我所需要的。
感谢您的帮助
class products:
def __init__(self,name,price,quantity):
self.price=price
self.quantity=quantity
self.productname=name
class ShoppingBasket:
def __init__(self,name,basket=[]):
self.name=name
self.basket=basket[:]
def additems(self,*items):
for item in items:
if item.quantity>0:
self.basket.append(item.productname)
item.quantity-=1
print "%s has been added to %s's basket"%(item.productname, self.name)
else:
print "sorry item is not in stock"
def removeitems(self,*items):
for item in items:
if item.productname in self.basket:
self.basket.remove(item.productname)
item.quantity+=1
print "%s has been removed from %s's basket"%(item.productname,self.name)
else: print "not in basket"
def empty(self):
self.basket[:]=[]
print "%s's basket is empty"%(self.name)
def total(self):
total=0
for x.productname in self.basket:
z=[s for s in self.basket if s==x.productname ]
if len(z)%2==0:
price=x.price*(len(z)/2)
else:
price=x.price*(len(z)//2)+item.price
total+=price
return total
答案 0 :(得分:2)
您不能像这样
迭代循环中的属性for x.productname in self.basket:
您必须分配对象,然后获取它。
for x in self.basket:
z=[s for s in self.basket if s==x.productname]
我没有遵循这个逻辑,但这似乎是一种非常低效的方式来整合所有产品。
例如,这将添加购物篮中物品的所有价格
return sum(x.price for x in self.basket)
注意:item
在循环中也未定义
要实施BOGOF优惠,我建议尝试不将项目添加到购物篮中(如果已经存在),尽管购买两件以上相同的商品可能效果不佳。 /> 我的观点是,如图所示,实际上只需要一条线来计算总数。在将项目添加到购物篮时,可以完成仅将奇数项目保持为总数的逻辑
答案 1 :(得分:0)
我找到了让它成功的方法。我已经定义了一个新属性:secretbasket用于保存所有类实例,而basket保存其名称(为了消费者的利益)。我的功能现在可以使用并处理BOGOF!
def total(self):
total=0
for x in self.secretbasket:
z=[s for s in self.secretbasket if s==x]
if len(z)%2==0:
price=x.price*(len(z)/2)
self.secretbasket=[s for s in self.secretbasket if s!=x ]
else:
price=x.price*(len(z)//2)+x.price
self.secretbasket=[s for s in self.secretbasket if s!=x ]
print price
total+=price
return total