【问题标题】:How to get value of key in Python Blackjack game如何在 Python Blackjack 游戏中获取键的值
【发布时间】:2020-09-02 13:22:57
【问题描述】:

我刚刚开始了一个二十一点游戏项目。到目前为止,我已经创建了卡片和手创建者功能。正如您从下面的代码中看到的那样,我通过 pick() 函数选择了我的手,我得到了排名字典的键。

rank={'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9':9,'10':10,'J':10,
   'K':10,'Q':10,'A':1}
your_hand=[]
opponent_hand=[]
def pick():    
    your_hand =  random.sample(list(rank),2) 
    opponent_hand = random.sample(list(rank),2) 
    print(your_hand[values])
    print(opponent_hand)
def count():
    pass

我想知道这段代码是否获取了它们的值,如果没有,我如何获取它们的值?这也是编写二十一点游戏的好方法吗?

【问题讨论】:

  • 关于二十一点规则的评论:ace值默认为11。来自wikipedia BlackJack pageA 点数为 11 的手牌称为“软牌”,这意味着这手牌不会因多拿一张牌而爆牌。 ace的值将变为1,以防止手牌超过21。否则,手牌被称为“硬”。
  • 我看到的一个问题是,可能有一个游戏,两个玩家都拥有同一张牌。为了解决这个问题,我建议先删除第一个玩家从 ramk 收到的牌,然后再为第二个玩家挑选牌

标签: python list dictionary random blackjack


【解决方案1】:

变量values 没有连接到任何东西,所以当你尝试引用它时你会得到一个NameError

your_handopponent_hand 列表包含字符串列表(rank 中的键)。要将这些转换为来自rank 的值,您需要使用键进行查找,例如:

your_hand_values = [rank[card] for card in your_hand]

这将为您提供ints 的列表。如果你想得到总和,你可以使用sum:

your_hand_total = sum(rank[card] for card in your_hand)

关于更大的问题,这种方法的一个问题是,一手牌不可能有超过一张具有相同等级的牌,而真正的一副牌有 4 个花色。

由于构建二十一点游戏是一个非常常见的初学者编码问题,我将这篇文章添加为书签,以备有人问我如何做时使用。 :) https://codereview.stackexchange.com/questions/234880/blackjack-21-in-python3/234890#234890

【讨论】:

    【解决方案2】:

    将 dict 传递给 list() 会返回 keys 的列表。所以 your_hand 是一个列表,包含排名字典的键。获取对应的

    your_hand_values = [rank[card] for card in your_hand]
    

    您可以考虑从一开始就将卡片及其价值存储在 your_hand 列表中,如下所示:

    your_hand =  [(card, value) for card, value in random.sample(rank.items(), 2)]
    

    (顺便说一句,这是一个迫切需要 OOP 方法的项目。只需我的 2 美分。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-03-08
      • 1970-01-01
      • 1970-01-01
      • 2013-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多