【问题标题】:Error: TypeError: 'str' object cannot be interpreted as an integer while trying to pick a random winner (Python)错误:TypeError:“str”对象在尝试选择随机获胜者时无法解释为整数(Python)
【发布时间】:2018-12-27 23:23:56
【问题描述】:

我是编程新手,我一直在尝试使用 Python .我还尝试删除代码选择的获胜者并将新名称添加到“获胜者”列表中,但它似乎不起作用。这是我现在的短代码。

winners = ["Wane", "Trevor", "Franklin", "Martoz"]
winner = random.choice(winners)
winners.pop(winner)
winners.append("Michael")
print(winners)

【问题讨论】:

  • 将错误回溯发布为单独的代码块。这让我们更容易发现错误所在。
  • pop() 需要项目在列表中的位置,而不是项目的值。即它想要pop(0)pop(5) 之类的东西。

标签: python string random


【解决方案1】:

如果您想从列表中删除一个项目,请使用 .remove() 函数,如下所示:

>>> winners = ["a", "b", "c"]
>>> winners.remove("b")
>>> winners
['a', 'c']

.pop() 用于根据给定的索引从列表中提取元素,并返回从列表中移除的元素。出现您的错误是因为您尝试根据列表中的元素(名称)而不是其索引(其在列表中的位置)弹出。

如果你想坚持使用pop,也许不要选择随机名称,而是选择列表中的随机索引:

winners = ["Wane", "Trevor", "Franklin", "Martoz"]
winner = winners.pop(random.randrange(len(winners)))

【讨论】:

    【解决方案2】:

    如果您为方法list.pop 提供参数,则该参数必须是整数类型并且表示列表中元素的索引。

    因为你的电话看起来像

    winners.pop(winner)
    

    winner 是一个字符串,你会得到上面提到的错误

    TypeError: 'str' 对象不能被解释为整数

    另外,我不确定您真正想要做什么,但您可能需要有两个列表 participantswinners。以下示例从列表中抽取两名获胜者:

    import random
    
    participants = ["Wane", "Trevor", "Franklin", "Martoz"]
    winners = []
    
    print("Participants before:", participants)
    print("Winners before:", winners)
    
    winner = random.choice(participants)
    winners.append(winner)
    participants.remove(winner)
    
    winner = random.choice(participants)
    winners.append(winner)
    participants.remove(winner)
    
    print("Participants after:", participants)
    print("Winners after:", winners)
    

    哪些打印:

    Participants before: ['Wane', 'Trevor', 'Franklin', 'Martoz']
    Winners before: []
    Participants after: ['Wane', 'Trevor']
    Winners after: ['Martoz', 'Franklin']
    

    【讨论】:

      【解决方案3】:

      不要使用.pop(),而是使用remove()

      winners = ["Wane", "Trevor", "Franklin", "Martoz"]
      winner = random.choice(winners)
      winners.remove(winner)
      winners.append("Michael")
      print(winners)
      

      【讨论】:

        【解决方案4】:

        如果您想使用pop() 函数,您应该在winners 列表中提供winner 的索引。这可以通过使用winners.index(winner)来完成

        winners = ["Wane", "Trevor", "Franklin", "Martoz"]
        winner = random.choice(winners)
        winners.pop(winners.index(winner))
        winners.append("Michael")
        print(winners)
        

        结果:

        ['Wane', 'Trevor', 'Martoz', 'Michael']
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-06-19
          • 1970-01-01
          • 2017-08-01
          • 1970-01-01
          • 2020-04-21
          • 2020-11-13
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多