python编程中的OOP
大家好,我是python语言编程新手,希望能得到你们的帮助。问题是:python编程中的OOP,python,Python,大家好,我是python语言编程新手,希望能得到你们的帮助。问题是: 创建一个名为ShoppingCart的类 创建一个不接受任何参数并设置总数的构造函数 属性设置为零,并初始化名为 项目 创建一个add\u item方法,该方法需要item\u名称、数量和价格 论据。此方法应将添加项目的成本添加到 总计的当前值。它还应该为项目添加一个条目 dict使键为项名称,值为 物品的数量 创建一个方法remove_项,该项需要与 添加项目。它应该删除已添加到中的项 购物车和购物车是不需要的。此方法应扣除
class ShoppingCart(object):
def __init__(self):
self.total = 0
self.items = dict()
def add_item(self, item_name, quantity, price):
if item_name != None and quantity >= 1:
self.items.update({item_name: quantity})
if quantity and price >= 1:
self.total += (quantity * price)
def remove_item(self, item_name, quantity, price):
self.total -= (quantity * price)
try:
if quantity >= self.items[item_name]:
self.items.pop(item_name, None)
self.items[item_name] -= quantity
except(KeyError, RuntimeError):
pass
def checkout(self, cash_paid):
balance = 0
if cash_paid < self.total:
return "Cash paid not enough"
balance = cash_paid - self.total
return balance
class Shop(ShoppingCart):
def __init__(self):
self.quantity = 100
def remove_item(self):
self.quantity -= 1
现在,运行unitest后,我收到以下错误消息:
“150!=160:删除项目后购物车总数不正确”
任何愿意帮忙的人都会感谢您的指导。您的测试是错误的。在这里,您的代码检查购物车总数是否为170现金:
self.assertEqual(self.cart.total, 170, msg='Cart total not correct after removing item')
然后删除2项,每项10现金:
self.cart.remove_item('Mango', 2, 10)
然后检查是否还有160现金:
self.assertEqual(self.cart.total, 160, msg='Cart total not correct after removing item')
但是它没有,它有150现金,这是任何人都会期望的(
170-20=150
)。你的测试是错误的。在这里,您的代码检查购物车总数是否为170现金:
self.assertEqual(self.cart.total, 170, msg='Cart total not correct after removing item')
然后删除2项,每项10现金:
self.cart.remove_item('Mango', 2, 10)
然后检查是否还有160现金:
self.assertEqual(self.cart.total, 160, msg='Cart total not correct after removing item')
但是它没有,它有150个现金,这是任何人都会期望的(
170-20=150
)。看起来像是在remove\u item
类属性中,在确定是否要移除更多的物品之前更新购物车的总价值
如果您修改它,那么您首先检查项目数量,然后减去可用总数(如果少于要删除的总数)。。。它应该可以解决这个问题
def remove_item(self, item_name, quantity, price):
try:
if quantity >= self.items[item_name]:
self.total -= (self.items[item_name] * price)
self.items.pop(item_name, None)
else:
self.items[item_name] -= quantity
self.total -= (quantity * price)
看起来像是在
remove\u item
类属性中,您更新购物车的总价值,然后再确定是否要删除比您拥有的更多的项目
如果您修改它,那么您首先检查项目数量,然后减去可用总数(如果少于要删除的总数)。。。它应该可以解决这个问题
def remove_item(self, item_name, quantity, price):
try:
if quantity >= self.items[item_name]:
self.total -= (self.items[item_name] * price)
self.items.pop(item_name, None)
else:
self.items[item_name] -= quantity
self.total -= (quantity * price)
问题在于您的
add_item
方法没有更新项目,因此每次添加相同的项目时,它都不会更新,只会再次放弃item_name
和quantity
并忘记以前的值,因此这就是add_item
方法的外观:
def add_item(self, item_name, quantity, price):
self.total += price*quantity
self.items.update({item_name: quantity})
问题在于您的
add_item
方法没有更新项目,因此每次添加相同的项目时,它都不会更新,只会再次放弃item_name
和quantity
并忘记以前的值,因此这就是add_item
方法的外观:
def add_item(self, item_name, quantity, price):
self.total += price*quantity
self.items.update({item_name: quantity})
这应该行得通
class ShoppingCart(object):
def __init__(self):
self.total = 0
self.items = dict()
def add_item(self, item_name, quantity, price):
if item_name != None and quantity >= 1:
self.items.update({item_name: quantity})
if quantity and price >= 1:
self.total += (quantity * price)
def remove_item(self, item_name, quantity, price):
try:
if quantity >= self.items[item_name]:
self.total -= (self.items[item_name] * price)
self.items.pop(item_name, None)
else:
self.items[item_name] -= quantity
self.total -= (quantity * price)
except IOError:
print
"Error: can\'t find file or read data"
def checkout(self, cash_paid):
balance = 0
if cash_paid < self.total:
return "Cash paid not enough"
balance = cash_paid - self.total
return balance
class Shop(ShoppingCart):
def __init__(self):
self.quantity = 100
def remove_item(self):
self.quantity -= 1
类ShoppingCart(对象):
定义初始化(自):
self.total=0
self.items=dict()
def添加项目(自身、项目名称、数量、价格):
如果项目名称!=无,数量>=1:
self.items.update({item\u name:quantity})
如果数量和价格>=1:
self.total+=(数量*价格)
def删除项目(自身、项目名称、数量、价格):
尝试:
如果数量>=自身项目[项目名称]:
self.total-=(self.items[项目名称]*价格)
self.items.pop(项目名称,无)
其他:
self.items[项目名称]-=数量
self.total-=(数量*价格)
除IOError外:
打印
“错误:找不到文件或读取数据”
def结帐(自助、现金支付):
余额=0
如果支付的现金
这应该可以正常工作
class ShoppingCart(object):
def __init__(self):
self.total = 0
self.items = dict()
def add_item(self, item_name, quantity, price):
if item_name != None and quantity >= 1:
self.items.update({item_name: quantity})
if quantity and price >= 1:
self.total += (quantity * price)
def remove_item(self, item_name, quantity, price):
try:
if quantity >= self.items[item_name]:
self.total -= (self.items[item_name] * price)
self.items.pop(item_name, None)
else:
self.items[item_name] -= quantity
self.total -= (quantity * price)
except IOError:
print
"Error: can\'t find file or read data"
def checkout(self, cash_paid):
balance = 0
if cash_paid < self.total:
return "Cash paid not enough"
balance = cash_paid - self.total
return balance
class Shop(ShoppingCart):
def __init__(self):
self.quantity = 100
def remove_item(self):
self.quantity -= 1
类ShoppingCart(对象):
定义初始化(自):
self.total=0
self.items=dict()
def添加项目(自身、项目名称、数量、价格):
如果项目名称!=无,数量>=1:
self.items.update({item\u name:quantity})
如果数量和价格>=1:
self.total+=(数量*价格)
def删除项目(自身、项目名称、数量、价格):
尝试:
如果数量>=自身项目[项目名称]:
self.total-=(self.items[项目名称]*价格)
self.items.pop(项目名称,无)
其他:
self.items[项目名称]-=数量
self.total-=(数量*价格)
除IOError外:
打印
“错误:找不到文件或读取数据”
def结帐(自助、现金支付):
余额=0
如果支付的现金