为什么我不能在函数中打印结果?

时间:2017-05-03 04:41:28

标签: python function printing

我正在使用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

然而

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
  return total

print compute_bill(food)

返回

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。为什么它在那里工作,但不是作为功能的馈送。这只是练习中的一个问题,但我无法弄清楚为什么会这样做。

3 个答案:

答案 0 :(得分:1)

在你的第一个例子中,

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。你从不称呼这个功能。如果被调用,则执行该函数,例如, compute_bill(["banana"])

答案 1 :(得分:1)

我不确定我是否完全理解这个问题,但是你说

  

但是我很困惑为什么我不能只打印变量total,它应该已经更新。

如果您尝试从函数外部打印total,它将无效,因为total变量仅在函数内声明。当您return total时,您允许其余代码从您的函数外部获取数据,这就是print computeBill(food)可行的原因。

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

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之后打印)。

答案 2 :(得分:1)

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

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

compute_bill(food) # call the function it has the print statement