TypeError:'NoneType'对象不可迭代

2 投票
3 回答
7809 浏览
提问于 2025-04-16 21:28

这里有一段我写的Python代码,用来生成一副随机的扑克牌手牌,纯粹是为了好玩或者挑战一下自己。但是当我尝试运行这段代码时,在“if card in hand”这一行出现了错误。到底发生了什么,为什么会这样,尤其是这一行并没有在循环中?

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 个回答

0

list.append这个方法并不会返回一个新的列表,而是直接在原来的列表上添加一个值,然后返回的是None,也就是没有返回任何东西。你可以这样做:

else:
hand.append(card) ...

3

列表的 append() 方法并不会返回这个列表,而是直接在原来的列表上进行修改。所以,当你用 hand = hand.append(card) 添加第一张牌时,实际上 hand 被设置成了 append() 的返回值,而这个返回值是 None(因为没有特别指定返回值的函数默认返回 None)。你应该把这行代码改成 hand.append(card),这样就可以正确地添加牌了。

7

这段代码是说,hand = hand.append(card) 这行代码其实是错误的。因为 append 这个方法并不会返回任何东西,所以你不需要把它的结果再赋值给 hand

正确的写法应该是直接用 hand.append(card),这样就可以把 card 加到 hand 里面了。

撰写回答