You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中Deck类生成的卡牌索引0结果不稳定问题求助

问题原因
  • 你定义suits和ranks时用了集合(set),集合是无序数据结构,每次程序运行时,迭代集合的顺序都不固定,所以生成卡牌列表的顺序也会随机变化,导致索引0的卡牌不固定。
解决方案

把suits和ranks改成有序的列表(list),并按你期望的顺序排列,这样每次迭代的顺序就固定了。修改后的代码如下:

suits = ['Hearts', 'Diamonds', 'Spades', 'Clubs']
ranks = ['Two', 'Three', 'Four', 'Five', 'Six', 'Seven', 'Eight', 'Nine', 'Ten', 'Jack', 'Queen', 'King', 'Ace']
values = {'Two':2, 'Three':3, 'Four':4, 'Five':5, 'Six':6, 'Seven':7, 'Eight':8, 
            'Nine':9, 'Ten':10, 'Jack':11, 'Queen':12, 'King':13, 'Ace':14}
#card class 
class Card():
    def __init__(self,suit,rank):
        self.suit=suit
        self.rank=rank
        self.value=values[rank]
    def __str__(self):
        return self.rank + ' of ' + self.suit
#deck class 
class Deck():
    def __init__(self):
        self.all_cards = []
        for suit in suits:
            for rank in ranks:
                self.all_cards.append(Card(suit,rank))
new_deck=Deck()
print(new_deck.all_cards[0])  # 现在每次都会输出'Two of Hearts'
额外说明
  • 列表是有序容器,迭代时会严格按照定义的顺序遍历,这样生成的卡牌列表顺序就完全可控了。
  • 如果需要保留集合的去重特性但又要固定顺序,Python 3.7+的普通字典会保留插入顺序,也可以用collections.OrderedDict,但这里直接用列表是最简洁的方案。

内容的提问来源于stack exchange,提问作者Karan Verma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 11:10:58