python - 我的字典有什么问题(将值映射到卡片)

标签 python dictionary blackjack

所以游戏是二十一点,我有代码片段来制作一副牌和一手牌。从一副牌中,这是一个列表,我正在尝试构建一个字典,以便根据 Blackjack 的规则,每张牌(一副牌中的一个元组)都有一个映射到它的值。

from random import randint

def make_deck():
    deck = []
    for suit in suits:
        for rank in ranks:
            deck.append((suit,rank))
    return deck

suits = ['spades','hearts','diamonds','clubs']
ranks = ['ace','two','three','four','five','six','seven','eight','nine','ten','jack','queen','king']

deck = make_deck()

def make_hand():
    hand = []
    for k in range(2):
        card = deck.pop(randint(0,51))
        hand.append(card)
    return hand

hand = make_hand()

values = {} #empty dictionary
for card in deck:
    rank = [card[1] for card in deck]
    if rank == 'ace':
        values[card] = 1
    elif rank == 'two':
        values[card] = 2
    elif rank == 'three':
        values[card] = 3
    elif rank == 'four':
        values[card] = 4
    elif rank == 'five':
        values[card] = 5
    elif rank == 'six':
        values[card] = 6
    elif rank == 'seven':
        values[card] = 7
    elif rank == 'eight':
        values[card] = 8
    elif rank == 'nine':
        values[card] = 9
    elif rank == 'ten' or 'jack' or 'queen' or 'king':
        values[card] = 10
 print values

显然,这在很大程度上是通过蛮力创建字典并且缺乏任何优雅,因此任何指向更有效方式的指针将不胜感激。真正的问题是我无法确定我的代码有什么问题,print values 只返回映射到其值的一个元组,而不是整个字典。如果我将 rank 的列表理解移到循环之外,我只会得到一个字典,其中所有内容都映射到值 10。

此外,我刚刚意识到我的 make_hand() 函数有时会导致“弹出索引超出范围”的错误,因此建议尝试一些事情,以便它可以一直工作时间也将不胜感激。

最佳答案

替换行:

rank = [card[1] for card in deck]

与:

rank = card[1]

是的,您可以通过创建一个将值映射到分数的字典来更有效(更优雅)地做到这一点:

mapper = {'ace': 1, 'two': 2, ...}

然后你就不需要 if/elif...else:

for card in deck:
    values[card] = mapper[card[1]]

关于python - 我的字典有什么问题(将值映射到卡片),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29813422/

相关文章:

python - 拟合给定数据的近似多项式

python - 令人困惑的范围变化 - 发生了什么事?

python - dict.setdefault() 如何统计字符数?

dictionary - 为什么 F# map 使用可变操作实现接口(interface)?

arrays - Swift 字典查找导致编译时错误

Java 网格布局 : south-JPanel covers center-JPanel?

python - Django 时区 : feeling a bit confused

java - 二十一点Java : Exception Error

java - 如何获取方法打印的整数?

python - 如何在 Python Cerberus 中将字符串强制转换为日期时间?