Python技术问题:get_deck函数仅返回16张红桃,如何生成完整52张牌组
解决扑克牌组只生成红桃牌的问题
嘿,我来帮你搞定这个问题!你的get_deck()函数只返回16张红桃牌,问题出在两个地方:一是只遍历了红桃这一种花色,没包含方块、黑桃、梅花;二是牌面数量不对——标准扑克牌每个花色只有13张(A到K),不是16张哦。
修改思路
要生成完整的52张牌组,你需要:
- 定义所有4种扑克牌花色
- 定义每个花色对应的13种牌面值(A、2-10、J、Q、K)
- 通过嵌套循环,把每个花色和每个牌面值组合起来,生成所有牌
完整修改后的代码
def get_deck(): # 定义所有花色和标准牌面 suits = ['Hearts', 'Diamonds', 'Spades', 'Clubs'] ranks = ['A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K'] deck = [] # 嵌套循环生成每一张牌 for suit in suits: for rank in ranks: # 组合成"X of 花色"的格式,你也可以用元组比如(rank, suit) deck.append(f"{rank} of {suit}") return deck
验证与洗牌
生成牌组后,你可以用random模块的shuffle()方法随机洗牌,示例如下:
import random # 获取完整牌组 full_deck = get_deck() # 确认牌数:应该输出52 print(len(full_deck)) # 洗牌 random.shuffle(full_deck) # 打印前5张看看洗牌效果 print("洗牌后的部分牌:", full_deck[:5])
为什么之前的代码只返回红桃?
大概率是你之前的代码只针对Hearts写了单循环,而且错误地生成了16个牌面(比如从1到16)。现在替换成上面的嵌套循环,就能覆盖所有4种花色的13张牌,刚好52张。
内容的提问来源于stack exchange,提问作者Christina
相关产品推荐
相关产品推荐

