Как я могу исправить "TypeError: объект типа 'NoneType' не имеет len ()"? - PullRequest
0 голосов
/ 01 апреля 2019

В настоящее время я пытаюсь закодировать Uno на python для своего школьного курса по основам информатики, и я создал определение, чтобы вытягивать карты из колоды в руку игрока, и всякий раз, когда я запускаю код, я получаю эту ошибку. Мне было просто интересно, как это исправить, потому что я попробовал пару вещей и ничего не получил.

Я пытался добавить предметы в руку игрока (который начинается пусто). Я пытался использовать кортежи. Я попытался сделать переменную рисования списком. x определяет, какая это рука игрока, а y - это количество, которое они вытягивают, а z - это то, какие карты находятся в колоде.

import random
import time
import sys

def draw_cards(x,y,z):
  for q in range(y):
    draw = random.choice(z)
    x = x.insert(0,draw)
    z = z.remove(draw)
  return x,z

cards_in_deck = ["red 0","red 1", "red 2", "red 3", "red 4", "red 5","red 6","red 7", "red 8", "red 9", "red skip", "red reverse","red +2","wild","yellow 0","yellow 1", "yellow 2", "yellow 3", "yellow 4", "yellow 5","yellow 6","yellow 7", "yellow 8", "yellow 9", "yellow skip", "yellow reverse","yellow +2","wild","green 0","green 1", "green 2", "green 3", "green 4", "green 5","green 6","green 7", "green 8", "green 9", "green skip", "green reverse","green +2","wild","blue 0","blue 1", "blue 2", "blue 3", "blue 4", "blue 5","blue 6","blue 7", "blue 8", "blue 9", "blue skip", "blue reverse","blue +2","wild","red 1", "red 2", "red 3", "red 4", "red 5","red 6","red 7", "red 8", "red 9", "red skip", "red reverse","red +2","wild +4","yellow 1", "yellow 2", "yellow 3", "yellow 4", "yellow 5","yellow 6","yellow 7", "yellow 8", "yellow 9", "yellow skip", "yellow reverse","yellow +2","wild +4","green 1", "green 2", "green 3", "green 4", "green 5","green 6","green 7", "green 8", "green 9", "green skip", "green reverse","green +2","wild +4","blue 1", "blue 2", "blue 3", "blue 4", "blue 5","blue 6","blue 7", "blue 8", "blue 9", "blue skip", "blue reverse","blue +2","wild +4"]

player_hand = []
ai_dusty_hand = []
ai_cutie_hand = []
ai_smooth_hand= []

draw_cards(ai_dusty_hand,7,cards_in_deck)
draw_cards(ai_cutie_hand,7,cards_in_deck)
draw_cards(ai_smooth_hand,7,cards_in_deck)
draw_cards(player_hand,7,cards_in_deck)

Я ожидал, что в результате каждый игрок получит стартовую руку, но результат заканчивается ошибкой,

Ответы [ 2 ]

1 голос
/ 01 апреля 2019

Списки в Python являются изменяемыми.Поэтому, когда вы манипулируете списком (даже в рамках функции), он будет отражать всюду, на которую ссылается этот список.

x = x.insert(0,draw)
z = z.remove(draw)

Эти строки кода назначают возврат вызовов метода в списке.Оба этих вызова методов ничего не возвращают (поэтому они возвращают None).

Удаляют назначения списков в вашей функции.

0 голосов
/ 01 апреля 2019

Проблема возникает из этих двух строк, потому что удаление не возвращает список:

x = x.insert(0, draw)
z = z.remove(draw)

insert и remove ничего не возвращают. Не переназначайте x и z, и это должно работать:

x.insert(0, draw)
z.remove(draw)

Кроме того, вы должны вернуть z, чтобы сохранить оставшиеся карты:

def draw_cards(x,y,z):
  for q in range(y):
    draw = random.choice(z)
    x.insert(0,draw)
    z.remove(draw)
return z

cards_in_deck = draw_cards(ai_dusty_hand,7,cards_in_deck)
cards_in_deck = draw_cards(ai_cutie_hand,7,cards_in_deck)
cards_in_deck = draw_cards(ai_smooth_hand,7,cards_in_deck)
cards_in_deck = draw_cards(player_hand,7,cards_in_deck)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...