我正在尝试编写一个基于某些列表计算账单的小程序。其中一个要求是根据取出的内容更改库存。我按照以下方式编写了代码,至少在概念上讲,我觉得我的想法很合适。
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
两者之间的主要区别是什么,为什么第二个有效?究竟什么“ - =”呢?我能理解这是否是一种让同样的事情发挥作用的不同方法,但它们并不等同于让我感到困惑。任何意见都会非常感激,并为我的无知/愚蠢提前道歉。
答案 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中,但是可能是第一个是递减指针(即实际数组)而第二个是递减存储在指针中的值。
检查的一种方法是在项目变量所在的位置以固定值发布输出。