【问题标题】:Python test andelaPython测试安德拉
【发布时间】:2017-08-02 03:15:12
【问题描述】:

HST2:面向对象的编程实验室 创建一个名为 ShoppingCart 的类。

创建一个不带参数并将总属性设置为零的构造函数,并初始化一个名为 items 的空 dict 属性。

创建需要 item_name、数量和价格参数的方法 add_item。此方法应将已添加项目的成本添加到总计的当前值中。它还应该向 items dict 添加一个条目,以便 key 是 item_name 并且 value 是 item 的数量。

创建一个方法 remove_item,它需要与 add_item 类似的参数。它应该删除已添加到购物车且不需要的项目。此方法应从当前总数中扣除已删除项目的成本,并相应地更新项目字典。

如果要移除的商品数量超过购物车中该商品的当前数量,则假定该商品的所有条目都将被移除。

创建一个方法 checkout 接受 cash_paid 并从付款中返回余额值。如果 cash_paid 不足以支付总额,则返回“Cashpaid not enough”。

创建一个名为 Shop 的类,该类有一个不带参数的构造函数,并将一个名为 quantity 的属性初始化为 100。

确保 Shop 继承自 ShoppingCart。

在 Shop 类中,重写 remove_item 方法,这样在不带参数的情况下调用 Shop 的 remove_item 会将数量减一。

# OOP Lab

class ShoppingCart(object):
  def __init__(self):
    total = 0
    item = {}
    self.total = total
    self.item = item
  def add_item(item_name, quantity, price):
    cost = quantity * price
    self.total += cost
    self.item = {"item_name":quantity}
  def remove_item(item_name,quantity,price):
    cost = quantity * cost
    self.total -= cost
    for i in self.item:
        if quantity > self.item[i]:
            del self.item["item_name"]
    def checkout(cash_paid):
        if cash_paid < self.total:
            return "Cash paid not enough"
class Shop(ShoppingCart):
    def __init__(self):
        quantity = 100
        self.quantity = quantity
    def remove_item():
        self.quantity -= 1

#! Error State the following: my add_item is having four argument instead of three each time i run this code:

请我需要有关此代码的帮助,我是 python 新手,我将不胜感激任何 Python 编程天使现在来拯救我。

【问题讨论】:

  • 请不要只在此处粘贴您的家庭作业。
  • @LazarLjubenović 通常我尽量不回答家庭作业请求,因为总的来说你是对的,他们只是放弃他们的作业。但是在这种情况下,OP 确实尝试解决了问题,展示了他们的工作,并且非常接近解决方案,因此在我看来,朝着正确方向前进并不是不合理的。
  • 你是对的,@cory
  • 有趣的是,我自己解决了 4 圈测试剩下的 2 圈,没有在平台上寻求帮助,如果我没有弄错平台应该可以帮助解决问题......让我想知道是否你曾经在你的生活中解决过一个问题@CoryKramer 你真的应该学习如何为开源开发做出贡献

标签: python


【解决方案1】:

类方法应该接受 self 作为第一个参数,例如

def add_item(self, item_name, quantity, price):

而不是

def add_item(item_name, quantity, price):

传递的“第 4 个参数”隐含为 self,这就是为什么参数的数量比您预期的多一个。

【讨论】:

  • 谢谢你太好了,这有助于消除错误,但仍然有另一个......根据测试结果,响应代码返回:您的代码中存在错误/BUG 结果:请重新阅读说明并检查您的代码是否有未实现的功能。确保在提交之前完成所有这些。这是堆栈跟踪的相关部分:KeyError('Mango',),
【解决方案2】:

试试这个,应该没问题:

class ShoppingCart(object):
    def __init__(self):
        self.total = 0
        self.items = {}

    def add_item(self, item_name, quantity, price):
        self.total += quantity * price
        if type(item_name) == str and quantity > 0:
            self.items.update({item_name: quantity})

    def remove_item(self, item_name, quantity, price):
        if quantity >= self.items[item_name] and quantity >= 1:
            items_cost = price * self.items[item_name]
            self.total -= items_cost
            del self.items[item_name]
        else:
            self.total -= quantity * price
            self.items[item_name] -= quantity

    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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-21
    • 1970-01-01
    相关资源
    最近更新 更多