【问题标题】:Python 3 code works as intended but i dont understand whyPython 3 代码按预期工作,但我不明白为什么
【发布时间】:2017-04-13 18:50:03
【问题描述】:

代码:

inv = {'arrow': 12, 'gold coin': 42, 'rope': 1, 'torch': 6, 'dagger': 1}

def show_inv():
    print('inventory:')
    item_total = 0
    for k, v in inv.items():
        print(str(v)+ ' ' + (k))
        item_total = item_total + v
    print('total number of items: ' + str(item_total))

show_inv()

结果(如预期):

库存:

12 箭头

42金币

1 根绳子

6 手电筒

1 把匕首

项目总数:62

但是如何

item_total = item_total + v

给我正确的总值?

编辑:为什么单独 print(str(v)) 总是给我“匕首”键的值?

【问题讨论】:

  • 只是将字典的值相加得到总数。
  • 每次迭代,它会将当前项目的数量添加到运行的项目总数item_total + v,然后将更新后的值存储回item_total = ...
  • 如果您对 item_total 被分配给 item_total + v 这一事实感到困惑 - 在分配发生之前首先评估分配的右侧,因此一切都按您的意愿进行。
  • 您可以简单地使用sum 函数并完全省略item_total,例如:sum(v for k, v in inv.items())
  • 不,但看看为什么 print(str(v)) 单独总是给我“匕首”键的值?

标签: python python-3.x


【解决方案1】:

这里重要的几行是:

for k, v in inv.items():
  # do stuff

当您在字典的 items 迭代器上使用 for 循环时,它将遍历该字典的 keys 和 values。由于您有一个从名称到值的字典,因此 values (v) 将是每个项目的值。将它们全部相加即可得到正确的总值。

线

item_total = item_total + v 

为库存中的每个项目运行一次,因为它位于在库存中运行的for-循环中。

阅读 Iterators in Python 可能会帮助您了解其工作原理。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-21
    • 1970-01-01
    • 1970-01-01
    • 2017-06-08
    • 2020-11-10
    • 2021-12-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多