Python生成扑克牌代码出现卡片集重复添加至card_pack列表两次问题
问题原因
你的代码问题出在while cards <= 52的循环判断逻辑,和内层for循环的执行规则冲突:
- 13种牌面 * 4种花色刚好是52张牌,内层两层for循环完整执行一次就会生成全部52张牌,同时
cards变量会从0累加至52 - 此时while会再次执行条件判断,
52 <=52的结果为真,会再次进入内层循环执行一遍,又新增了52张牌,直到cards累加到104才会退出循环,最终得到两副重复的牌组。
修复方案
方案1(推荐):删除多余的while循环
两层for循环本身就可以完整遍历所有牌面和花色的组合,不需要额外加while控制,修改后代码如下:
numbers = ("A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K") symbols = ("clubs", "diamonds", "hearts", "spades") card_pack = [] for symbol in symbols: for number in numbers: card = number + " " + symbol card_pack.append(card) print("The pack has the following cards:") for card in card_pack: print(card)
方案2:修改while循环的判断条件
如果需要保留while循环的写法,将判断条件改为while cards < 52即可,当cards累加到52时就不会再次进入循环。
优化建议
可以用列表推导式简化牌组生成逻辑,一行代码即可完成牌组生成:card_pack = [f"{number} {symbol}" for symbol in symbols for number in numbers]
内容的提问来源于stack exchange,提问作者Maria G.
相关产品推荐
相关产品推荐

