Проблема со значением списка (ValueError) в Python 3 - PullRequest
1 голос
/ 07 мая 2019

Я пытаюсь создать простую карточную игру для школы, я нахожусь на этапе программирования того, как игровой процесс работает в игре, и получаю ошибку 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

(редактировать - это сообщение отправлено от друга, у меня нет учетной записи)

Ответы [ 2 ]

2 голосов
/ 07 мая 2019
list.remove(x)

Удаляет из списка элемент , значение которого x (используя равенство, чтобы найти, что удалить)

list.remove выбрасывает ValueError всякий раз, когда вещь, которую вы хотите удалить , не существует в списке.

Вы создаете список списков. Каждый элемент [color, number]. Поэтому, как только вы выскочите из колоды, у вас появится элемент, подобный [color, number]. Но вы пытаетесь удалить 0 (который не является списком), следовательно, вы получаете ошибку. Я не уверен, почему вы хотите позвонить туда remove. Эти переменные все равно будут переназначены в следующем цикле. Вы также не используете измененные переменные. Так что просто попробуйте удалить эти строки.

1 голос
/ 07 мая 2019

Ваша проблема в том, как вы используете удалить .Вы используете индекс в качестве аргумента для удаления, в то время как вам нужно передать сам элемент.

Пример:

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...