TypeError:'NoneType'对象不可迭代
这里有一段我写的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
里面了。