库存[item] - = 1和库存[item] =库存[item] - 1之间的差异?

时间:2016-07-07 20:28:20

标签: python

我正在尝试编写一个基于某些列表计算账单的小程序。其中一个要求是根据取出的内容更改库存。我按照以下方式编写了代码,至少在概念上讲,我觉得我的想法很合适。

shopping_list = ["banana", "orange", "apple"]

stock = {
"banana": 6,
"apple": 0,
"orange": 32,
"pear": 15
}

prices = {
"banana": 4,
"apple": 2,
"orange": 1.5,
"pear": 3
}

def compute_bill(food):
    total = 0
    for item in food:
        if stock[item] > 0:
            total += prices[item]
            stock[item] = stock[item] - 1
            return total
        else:
            return "Sorry: Out of Stock"
    return total

不幸的是它不起作用。我已经找到了一个潜在的解决方案,并找到了一个这样的解决方案。

groceries = ["banana", "orange","apple"]

stock = {"banana": 6,
"apple": 0,
"orange": 32,
"pear": 15
}

prices = {"banana": 4,
"apple": 2,
"orange": 1.5,
"pear": 3
}

def computeBill(food):
    total = 0
    for item in food:  
        if stock[item] > 0: 
            total += prices[item] 
            stock[item] -= 1
    return total

print computeBill(groceries)

我看到的主要区别在于这些代码:

stock[item] = stock[item] - 1

stock[item] -= 1

两者之间的主要区别是什么,为什么第二个有效?究竟什么“ - =”呢?我能理解这是否是一种让同样的事情发挥作用的不同方法,但它们并不等同于让我感到困惑。任何意见都会非常感激,并为我的无知/愚蠢提前道歉。

4 个答案:

答案 0 :(得分:1)

对于数值变量,运算符-=与分配小于当前值的运算符完全相同。但是这两个版本之间存在另一个区别:只要检查购物清单中的一个元素,您的解决方案就会返回一个值。返回会终止该功能,因此只有在您完成计算时才会执行此操作。

答案 1 :(得分:1)

问题可能是这样的:

for item in food:
    if stock[item] > 0:
        total += prices[item]
        stock[item] = stock[item] - 1
        return total

在这里,您将在循环中间返回,因此它只会处理来自food的一个项目。在第二个示例中,唯一的return语句位于循环的末尾。

答案 2 :(得分:0)

有什么更好的方法可以向您展示差异,但运行一个能够展示差异的程序?尝试运行以下程序并注意它打印到屏幕上的内容。

 <form action="<?php $_SERVER['PHP_SELF'] ?>" method="post">
        <label>
            <input pattern=".{3,}"   required title="3 characters minimum" name="url" class="urlinput" type="text">
        </label>
        <input name="submit" class="urlsub" type="submit">
</form>
<?php
IF($_POST['submit']) {
    include('include/functions.php');

    // IP OF THE USER
    $ip = $_SERVER['REMOTE_ADDR'];
    // URL TO PUT IN Database
    $url = $_POST['url'];
    // MAKE SIMPLE URL EG: HTTPS://WWW.GOOGLE.COM -> GOOGLE.COM
    $surl = surl($url);
    // RUN SCRIPT
    CIURLE($surl, $ip);
}
?>

第一个操作可能会改变对象。第二个操作将创建一个新对象并替换旧对象。请注意,这是您的问题的答案,但不能解决您的问题。

答案 3 :(得分:-3)

我不确定在python中,但是可能是第一个是递减指针(即实际数组)而第二个是递减存储在指针中的值。

检查的一种方法是在项目变量所在的位置以固定值发布输出。