【问题标题】:Problem with list value (ValueError) in python 3python 3中的列表值(ValueError)问题
【发布时间】:2019-09-25 03:15:00
【问题描述】:

我正在尝试为学校创建一个简单的纸牌游戏,我正处于编写游戏中游戏玩法的编码阶段,并且在尝试从列表中删除值时遇到 ValueError

我已经尝试过更改我的list.remove(x) 语法,到目前为止我已经尝试过list.remove(list[x])list.remove([x])list.remove(x),但所有这些都返回了ValueError。

import random, time #imports required modules for the code

cardDeck = []
player1 = []
player1CardsWon = []
player2 = []
player2CardsWon = [] #all these lists/arrays are needed later on in the code

def deckCreator(): #creates all the needed embedded lists inside the cardDeck 2D Array
  for color in ["yellow", "red", "black"]:
    for number in [1,2,3,4,5,6,7,8,9,10]:
      cardDeck.append([color, number])

'''test 1 - to check if deckCreator function is working
deckCreator()
print(cardDeck)
'''

def deckShuffle(): #shuffles the cardDeck 2D Array
  random.shuffle(cardDeck)

'''test 2 - to check if the deckShuffle function is working
deckCreator()
print(cardDeck)
deckShuffle()
print(cardDeck)
'''

def gamePlay(): #plays a round of the game
  while len(cardDeck) > 0:
    time.sleep(2)
    player1 = cardDeck.pop(0)
    player2 = cardDeck.pop(0)
    print("Player 1 holds card", player1[0], player1[1], "for this round")
    print("Player 2 holds card", player2[0], player2[1], "for this round")
    if player1[0] == "yellow":
      if player2[0] == "red": #Yellow beats red
        player1CardsWon.append(player1)
        player1CardsWon.append(player2)
        player1.remove(0)
        player1.remove(1)
        player2.remove(0)
        player2.remove(1)
        print("Player 1 wins!")
      elif player2[0] == "black": #Black beats yellow
        player2CardsWon.append(player1)
        player2CardsWon.append(player2)
        player1.remove(0)
        player1.remove(1)
        player2.remove(0)
        player2.remove(1)
        print("Player 2 wins!")
      elif player2[0] == "yellow":
        if player1[1] > player2[1]:
          player1CardsWon.append(player1)
          player1CardsWon.append(player2)
          player1.remove(0)
          player1.remove(1)
          player2.remove(0)
          player2.remove(1)
          print("Player 1 wins!")
        else:
          player2CardsWon.append(player1)
          player2CardsWon.append(player2)
          player1.remove(0)
          player1.remove(1)
          player2.remove(0)
          player2.remove(1)
          print("Player 2 wins!")
    if player1[0] == "red":
      if player2[0] == "red":
        if player1[1] > player2[1]:
          player1CardsWon.append(player1)
          player1CardsWon.append(player2)
          player1.remove(0)
          player1.remove(1)
          player2.remove(0)
          player2.remove(1)
          print("Player 1 wins!")
        else:
          player2CardsWon.append(player1)
          player2CardsWon.append(player2)
          player1.remove(0)
          player1.remove(1)
          player2.remove(0)
          player2.remove(1)
          print("Player 2 wins!")
      elif player2[0] == "black": #Red beats black
        player1CardsWon.append(player1)
        player1CardsWon.append(player2)
        player1.remove(0)
        player1.remove(1)
        player2.remove(0)
        player2.remove(1)
        print("Player 1 wins!")
      elif player2[0] == "yellow": #Yellow beats black
        player2CardsWon.append(player1)
        player2CardsWon.append(player2)
        player1.remove(0)
        player1.remove(1)
        player2.remove(0)
        player2.remove(1)
        print("Player 2 wins!")
    if player1[0]== "black":
      if player2[0] == "red": #Red beats black
        player1.remove(0)
        player1.remove(1)
        player2.remove(0)
        player2.remove(1)
        print("Player 2 wins!")
      elif player2[0] == "black":
        if player1[1] > player2[1]:
          player1CardsWon.append(player1)
          player1CardsWon.append(player2)
          player1.remove(0)
          player1.remove(1)
          player2.remove(0)
          player2.remove(1)
          print("Player 1 wins!")
        else:
          player2CardsWon.append(player1)
          player2CardsWon.append(player2)
          player1.remove(0)
          player1.remove(1)
          player2.remove(0)
          player2.remove(1)
          print("Player 2 wins!")
      elif player2[0] == "yellow": #Black beats yellow
        player1CardsWon.append(player1)
        player1CardsWon.append(player2)
        player1.remove(0)
        player1.remove(1)
        player2.remove(0)
        player2.remove(1)
        print("Player 1 wins!")

'''test 3 - to check if the gamePlay function is working
deckCreator()
print(cardDeck)
deckShuffle()
print(cardDeck)
tempHold1 = cardDeck.pop(0)
tempHold2 = cardDeck.pop(0)
player1.append(tempHold1)
player2.append(tempHold2)
gamePlay()
'''

deckCreator()
deckShuffle()
gamePlay()

我希望控制台输出:

Player 1 holds card red 9 for this round
Player 2 holds card black 8 for this round
Player 1 wins!

但它当前正在输出:

Player 1 holds card red 9 for this round
Player 2 holds card black 8 for this round
Traceback (most recent call last):
  File "/tmp/sessions/99a7da0a0b9fd10f/main.py", line 152, in <module>
    gamePlay()
  File "/tmp/sessions/99a7da0a0b9fd10f/main.py", line 92, in gamePlay
    player1.remove(0)
ValueError: list.remove(x): x not in list

(编辑 - 这是从朋友的帐户发布的,我不拥有该帐户)

【问题讨论】:

  • 请尽可能多地从问题中删除代码,同时仍然能够复制问题。见How to create a Minimal, Complete, and Verifiable example。如果要筛选的代码更少,那么其他人(包括您)会更容易发现问题。
  • 你想用删除做什么?您指定 player1 指的是从牌堆中弹出的一张牌。 '0' 和 '1' 是什么,你为什么希望它们出现在 player1 中?
  • 就此而言,我不确定您为什么需要在这里使用“删除”。在下一轮,player1 会从牌库中得到一张新牌,它会参考这张牌。

标签: python python-3.x list if-statement


【解决方案1】:
list.remove(x)

从列表中删除值为x元素(使用相等匹配来查找要删除的内容)

list.remove 抛出 ValueError 每当列表中不存在 您要删除的内容

您正在创建一个列表列表。每个元素都是[color, number]。所以一旦你从牌组中弹出,你就会有一个像[color, number] 这样的元素。但是您正在尝试删除 0 (这不是列表),因此您会收到错误消息。我不知道你为什么要在那里打电话给remove。无论如何,这些变量将在下一个循环中重新分配。您也没有使用修改后的变量。因此,只需尝试删除这些行。

【讨论】:

  • "元素 x" 看起来还是有点模棱两可。也许是“具有 value x 的元素”?
【解决方案2】:

您的问题是您使用remove 的方式。当您需要传递元素本身时,您正在使用索引作为 remove 的参数。

例子:

lst = [1,'yellow']
# If you want to remove yellow call
lst.remove('yellow')
# and not
lst.remove(1)
# If you want to remove 1 call
lst.remove(1)
# and not
lst.remove(0)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-12
    • 1970-01-01
    • 1970-01-01
    • 2022-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多