【问题标题】:Getting unresolved reference [duplicate]获得未解决的参考[重复]
【发布时间】:2021-01-02 18:40:06
【问题描述】:

由于某种原因,我在 python 3.9.x 中收到未解决的引用“i”错误

如何修改我的代码以使其正常运行?

 for card in range(len(cards)):
    card = cards[i]
    print(f"{i+1} - {card}")

# get choice
choice = get_int_input(1, len(cards))
# get card
return cards[choice-1] if choice else None

'''

【问题讨论】:

  • 看看你的for循环。 i 应该是什么?它从何而来?现在取出card = cards[i] 线,看看会发生什么。您已经在循环中创建cardfor card in...。无需索引到cards

标签: python


【解决方案1】:

Python 是对的。你没有i 变量。你在哪里看到的?

如果卡片包含 4 个元素,您的 card 将依次为 0123。所以像这样改变你的 for 循环:

for i in range(len(cards)):
    card = cards[i]
    print(f"{i+1} - {card}")

但是做你想做的最好的方法是这样的:

for i, card in enumerate(cards):
    print(f"{i+1} - {card}")

enumerate 函数将创建一个包含(key, value) 元组的可迭代变量。例如:

>>> print(list(enumerate(['a', 'b', 'c'])))
[(0, 'a'), (1, 'b'), (2, 'c')]

在同一个例子中,这个循环:

for i, letter in enumerate(['a', 'b', 'c'])

将依次采用这个变量: |迭代 |我 |信 | | ---- | ------ | ----- | | 1 | 0 | '一个' | | 2 | 1 | 'b' | | 3 | 2 | 'c' |

【讨论】:

  • 更惯用的应该是for i, card in enumerate(cards, start=1):
  • @chepner 是的,我只是添加它;)
【解决方案2】:

您无需为您的 card 值编制索引。

您需要像这样调整循环的第一行:

for i in range(len(cards)):
    card = cards[i]
    print(f"{i+1} - {card}")

但这不是最 Pythonic 的方式。相反,您可以做的只是直接调用卡片,并在需要索引时使用枚举。

for index, card in enumerate(cards):
    print(f"{index+1} - {card}")

【讨论】:

    【解决方案3】:

    尝试将 for 循环更改为:

    for i in range(len(cards)):

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-07
      • 2018-03-27
      • 1970-01-01
      • 2021-04-21
      • 1970-01-01
      相关资源
      最近更新 更多