使用random.shuffle()后出现TypeError: 'NoneType'对象不可迭代问题
错误原因与解决办法
核心问题
random.shuffle()是原地修改型函数:它直接对传入的列表进行洗牌操作,不会返回新的列表,函数的返回值是None。
你写的deck = random.shuffle(deck),本质是把None赋值给了deck变量。后续遍历deck时,自然会触发TypeError——因为None不是可迭代对象,无法用for...in循环遍历。同理play_deck = random.shuffle(deck)也会让play_deck变成None,导致同样的错误。
修正后的代码
只需要直接调用random.shuffle(deck),不需要给变量赋值,原列表会被直接修改:
import random deck = list() suits = ['hearts', 'clubs', 'diamonds', 'spades'] # 用for循环替代while,更简洁 for suit in suits: for j in range(1, 14): card = {'suit': suit, 'faceval': str(j)} deck.append(card) # 直接执行洗牌,不赋值 random.shuffle(deck) for card in deck: print(card['suit']) print(card['faceval'])
额外优化
- 原代码里的
i变量没有实际作用,可以直接删除 - 用
range(1,14)替代while循环生成牌面值,代码更简洁易读
内容的提问来源于stack exchange,提问作者Sabresong
相关产品推荐
相关产品推荐

