"TypeError: аргумент типа 'NoneType' не повторяется"? - PullRequest
2 голосов
/ 14 июля 2011

Вот некоторый код Python, который я написал для генерации случайной покерной руки, просто ради этого / для вызова, но когда я пытаюсь его запустить, я получаю сообщение об ошибке выше в строке «если карта в руке»».Что происходит и почему это происходит, тем более что эта строка не повторяется?

import random
def pokerHand():
    hand = ["This is your hand:"]
    x = 0
    while x < 5:
        cardNum = random.randrange(13) + 1
        if cardNum == 1:
            cardNum = "Ace of "
        elif cardNum == 11:
            cardNum = "Jack of "
        elif cardNum == 13:
            cardNum = "King of "
        elif cardNum == 12:
        cardNum = "Queen of "
        else:
            cardNum = str(cardNum) + " of "
        cardSuit = random.randrange(4)
        if cardSuit == 0:
            cardSuit = "Clubs"
        elif cardSuit == 1:
            cardSuit = "Diamonds"
        elif cardSuit == 3:
            cardSuit = "Hearts"
        elif cardSuit == 2:
            cardSuit = "Spades"
        card = cardNum + cardSuit
        if card in hand: #<the line of error
            pass
        else:
            hand = hand.append(card)
            x = x + 1
    for xx in hand:
        print xx

Ответы [ 3 ]

7 голосов
/ 14 июля 2011

hand = hand.append(card)

append ничего не возвращает. Измените его на:

hand.append(card)

3 голосов
/ 14 июля 2011

метод append() списка не возвращает список, он изменяет его на месте. таким образом, после добавления первой карты (с hand = hand.append(card)), hand устанавливается на возвращаемое значение append(), которое равно None (возвращаемое значение методов без явного return). Вы должны изменить его на hand.append(card)

0 голосов
/ 14 июля 2011

list.append не возвращает список с добавленным значением, а скорее добавляет значение к списку на месте и возвращает None.Сделайте это вместо:

else:<br> hand.append(card) ...

...