2014-12-11 4 views
-2
facevalue={'A':1,'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9':9,'10':10,'J':10,'Q':10,'K':10} 
deck = [key for key in self.facevalue.keys()]*4 
card_values = [value for value in self.facevalue.values()]*4 

Это предположительная колода карт, а именно одна в блэкджеке. Нужна помощь в определении функции hand_value.Словарь - сопоставление рандомизированных ключей с соответствующими значениями

import random 
shuffled_deck = random.sample(deck, len(deck)) 

Когда я открываю две карты, как я могу получить их соответствующие значения? Проблема в том, что ключи и значения больше не объединены после перетасовки. Скажем

def hand_value(): 
    hand = [] 
    for i in range(2): 
     hand.append(shuffled_deck.pop()) 
    score = ??? 
    return score 

Какие ценности, которые соответствуют hand[0] и hand[1]?

Позвольте мне перефразировать это - после разрыва словаря есть способ сопоставления прежних ключей со своими соответствующими значениями?

+0

Это было бы гораздо проще с объектом 'Card', который держал лицо и значение вместе ... – jonrsharpe

+0

Если вы не хотите, чтобы снова LookUp , вы можете рассмотреть возможность хранения его в виде кортежей. Кроме того, пожалуйста, взгляните на 'shuffle' для ... перетасовки. – user189

ответ

2

deck состоит только из ключей; чтобы получить номинальные значения, чтобы они совпадали, просто посмотрите их снова:

[facevalue[card] for card in hand] 

Это производит список значений для выбранной руки; Вы можете также использовать sum() и выражение генератора, чтобы произвести их общее:

score = sum(facevalue[card] for card in hand) 
+0

Я думал, что как только я сломаю словарь, я не смог бы вернуться к нему, но работает, хотя - спасибо. –

+0

@AlvinLepik: все, что вы сделали, было * extract * информация из словаря; вы никогда не изменяли сам словарь или не теряли ссылку на него. –

Смежные вопросы