Python 为什么可以';我不能从函数中打印结果吗?

Python 为什么可以';我不能从函数中打印结果吗?,python,function,printing,Python,Function,Printing,我正在CodeAcademy学习初级Python课程。这是其中一个练习的一部分,您正在一家杂货店“结账”,但我想修改代码以打印最终账单/“总计”,而不仅仅是返回“总计”。我不明白为什么不打印。我试着把它放在迭代之后的末尾,和这里一样,放在递归中(在返回总数之前),看看它是否会在每个步骤之后打印出来。当我运行此代码时,不会显示任何内容 shopping_list = ["banana", "orange", "apple"] stock = { "banana": 6, "app

我正在CodeAcademy学习初级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
}


food = shopping_list

def compute_bill(food):
    total = 0
    for item in food:
        if stock[item]>0:
            total += prices[item]

            stock[item] -=1
    print total
    return total
编辑: 这些也没有给我一个读数:

def compute_bill(food):
  total = 0
  for item in food:
    if stock[item]>0:
        total += prices[item]
        stock[item] -=1
  print "Total is $",total #tried 0-5 indentations, same blank result
然而

返回

Total is $ 5.5
5.5
虽然-我确实找到了解决办法

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

  return total

print "Total is $",compute_bill(food)
返回 总共是5.5美元
…但我不明白为什么我不能直接打印变量total,它应该已经更新了。为什么它在那里工作,但不是函数中的提要。这只是一个练习中的问题,但我很难弄清楚它为什么会这样做。

在您的第一个示例中

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

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

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


food = shopping_list

def compute_bill(food):
    total = 0
    for item in food:
        if stock[item]>0:
            total += prices[item]

            stock[item] -=1
    print total
    return total

您可以定义一个函数
def compute\u bill
。你永远不会调用那个函数。函数在调用时执行,例如,在第一个示例中,
compute\u bill([“banana”])

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

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

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


food = shopping_list

def compute_bill(food):
    total = 0
    for item in food:
        if stock[item]>0:
            total += prices[item]

            stock[item] -=1
    print total
    return total

您可以定义一个函数
def compute\u bill
。你永远不会调用那个函数。函数在被调用时执行,例如,
compute\u bill([“banana”])
我不确定我是否完全理解这个问题,但是你说

但是我不明白为什么我不能直接打印变量total,它应该已经更新了

如果您试图从函数外部打印
total
,它将不起作用,因为
total
变量仅在函数内部声明。当您
返回总计时
允许代码的其余部分从函数外部获取数据,这就是为什么
打印计算机票据(食品)
可以工作的原因

编辑,如果您想在每次迭代时打印总数,您的代码:

def compute_bill(food):
  total = 0
  for item in food:
    if stock[item]>0:
        total += prices[item]
        stock[item] -=1
        print "Total is $",total

当然应该有这个缩进,这意味着每次在
for
循环中迭代时都要打印(如果保持原样,它只会在
for
之后打印)

我不太清楚这个问题,但你说

但是我不明白为什么我不能直接打印变量total,它应该已经更新了

如果您试图从函数外部打印
total
,它将不起作用,因为
total
变量仅在函数内部声明。当您
返回总计时
允许代码的其余部分从函数外部获取数据,这就是为什么
打印计算机票据(食品)
可以工作的原因

编辑,如果您想在每次迭代时打印总数,您的代码:

def compute_bill(food):
  total = 0
  for item in food:
    if stock[item]>0:
        total += prices[item]
        stock[item] -=1
        print "Total is $",total

当然应该有这个缩进,这意味着每次在
for
循环中迭代时都要打印(如果保持原样,它只会在
for
之后打印)

print语句是函数compute\u bill(..)的一部分,除非调用函数compute\u bill(..),否则它不会执行


print语句是函数compute_bill(..)的一部分,除非调用函数compute_bill(..),否则不会执行它


谢谢你!教程中没有明确说明这一点,因为它们似乎让我们在不调用函数的情况下创建函数。谢谢!教程中没有明确说明这一点,因为它们似乎让我们在不调用函数的情况下创建函数。