【问题标题】:Function thinks an int is a list函数认为 int 是一个列表
【发布时间】:2021-05-22 19:07:53
【问题描述】:

我定义了一个使用列表长度作为输入的函数。它看起来像这样:

lhand = len(hand)
def roll(lhand):
    global hand
    ndice = 5 - sum(lhand)
    for i in range(ndice):
        newhand = random.randint(1, 6)
        hand = hand.append(newhand)
    return hand

现在,由于某种原因,我收到一条错误消息,指出不允许在列表和字符串之间使用运算符 -。这让我很困惑,因为我知道 lhand 应该是一个 int。我试图通过将 int() 放在很多地方来解决它,但我仍然遇到同样的错误。即使我将函数中的 lhand 更改为数字,我仍然遇到同样的错误。我如何解决这个问题(我认为)是在函数中使用 sum(lhand) 。这似乎有效,因为它不再给我一个错误。我仍然想知道为什么会出现这个错误,或者我的代码中可能有其他问题导致它失败。

谢谢

【问题讨论】:

  • 请修正格式,这样是看不懂代码的。为什么hand是全局并返回?
  • 这段代码似乎不可能导致该错误。在修复缩进的同时,请显示完整的错误回溯。
  • 请提供预期见MRE - Minimal, Reproducible Example。显示中间结果与预期结果的偏差。我们应该能够将您的代码块粘贴到文件中,运行它并重现您的问题。这也让我们可以在您的上下文中测试任何建议。

标签: python list function integer


【解决方案1】:

您的问题可能出在这一行 - ndice = 5 - sum(lhand)。您的 lhand 是一个数字,您不能在整数上使用 sum
你也应该避免使用global,它总是错误的。

【讨论】:

    【解决方案2】:

    除了 BoobyTrap 关于避免使用 global 的评论之外,我建议修复此代码的方法如下:将 hand 作为参数而不是 lhand

    def roll(hand):
        ndice = 5 - len(hand)
        for i in range(ndice):
            hand.append(random.randint(1, 6))
        return hand
    

    请注意,当您调用 hand.append() 时,append 方法会修改 hand 但返回 None,因此您不想将 hand 重新分配给它的结果。

    【讨论】:

      猜你喜欢
      • 2022-12-05
      • 2010-12-05
      • 2019-05-08
      • 1970-01-01
      • 1970-01-01
      • 2016-06-28
      • 1970-01-01
      • 1970-01-01
      • 2016-04-05
      相关资源
      最近更新 更多