gpt4 book ai didi

python - 迭代字典中的值时出现类型错误

转载 作者:太空宇宙 更新时间:2023-11-04 09:36:52 25 4
gpt4 key购买 nike

我正在尝试创建一个程序,为每次掷骰子返回棋盘上的位置(从位置 0 开始)。

我的字典包含键,它们是棋盘上的位置和值(value)观,这是

应该发生的位移。

dictionary = {64: -4, 49: -38, 98: -20, 16: -10, 87: -63, 56: -3, 47: -21, 93: -20, 62: -43, 
95: -20, 80: 20, 1: 37, 51: 16, 4: 10, 21: 21, 71: 20, 9: 22, 28: 56, 36: 8}

例如,当我落在位置 64 时,我在字典中找到键 64,然后从 64 我在棋盘上移动 -4,停在 60 上。

我的当前代码如下。

def location(rolls):
dictionary = {64: -4, 49: -38, 98: -20, 16: -10, 87: -63, 56: -3, 47: -21, 93: -20, 62: -43,
95: -20, 80: 20, 1: 37, 51: 16, 4: 10, 21: 21, 71: 20, 9: 22, 28: 56, 36: 8}

position = 0
list_position = []
for roll in rolls:
position = position + roll

if position not in dictionary:
pass
if position in dictionary:
position = position + dictionary.get(roll)
list_position.append(position)
print(position)

我得到的是部分位置,我相信某些迭代会返回类型错误。

>>> location([1, 4, 5])
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "<input>", line 12, in location
TypeError: unsupported operand type(s) for +: 'int' and 'NoneType'
38
42

# desired output
[38, 42, 26]

从第一次掷骰子开始,我们落在了位置 1。我们在我的字典中找到了 1,并得知我

必须移动 37,停在 38。从第二次掷骰子,我们从 38 移动 4 并着陆

在 42 上。42 不在我的字典中,所以我们在 42 上休息。然后从第三次掷骰子开始,我们移动 5

从 42 开始,落在 47。47 在我的字典中,我从 47 移动 -21,落在 26。

所以我实际上得到了列表中的前两个位置。我不知道为什么第三个

位置未被打印并返回此类型错误。

最佳答案

您的代码存在一些结构问题:

  1. 检查应该是一个大的 if block 而不是 2 个单独的 block :

    if position not in dictionary:
    pass
    else: # <-- use else instead
    position = position + dictionary.get(roll)
    list_position.append(position)
    print(position)

由于这两个条件是相反的,因此您没有必要再进行一次字典中的位置检查。

更好的是 - 因为如果 position 不在字典中,你甚至不需要做任何事情,只需这样做:

if position in dictionary:
position = position + dictionary.get(roll)
list_position.append(position)
# you don't need an else because you don't intend to do anything
  1. dictionary.get(roll) 不受条件控制。您会检查 position in dictionary 但您不确保 roll 也在 dictionary 中。因此,当它不存在时,dict.get() 默认返回 None

您可以设置一个默认值,例如 dictionary.get(roll, 0),或者用您想要定义的所有可能的 roll 填充您的字典,或者检查 roll在字典中

关于python - 迭代字典中的值时出现类型错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53339390/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com