Как получить значение ключа в игре Python Blackjack

Я только что начал проект игры в блэкджек. До сих пор я создал карты и функцию создания рук. Как вы можете видеть из моего кода ниже, я выбираю свою руку с помощью функции 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

Мне было интересно, получает ли этот код свои значения, а если нет, то как я могу получить их значения? Также это хороший подход для кодирования игры в блэкджек.


person Berke Şentürk    schedule 16.05.2020    source источник
comment
Комментарий к правилам блэкджека: значение туза по умолчанию равно 11. На странице BlackJack в Википедии: Рука с тузом, равным 11, называется мягкий, что означает, что рука не сломается, взяв дополнительную карту. Значение туза станет равным единице, чтобы рука не превышала 21. В противном случае рука называется сложной.   -  person Wippo    schedule 16.05.2020
comment
одна проблема, которую я вижу, заключается в том, что может быть игра, в которой у двух игроков есть одна и та же карта. чтобы решить эту проблему, я предлагаю удалить карты, которые первый игрок получил от ramk, прежде чем выбирать карты для второго игрока.   -  person Gal    schedule 16.05.2020


Ответы (2)


Переменная values ни с чем не связана, поэтому при попытке сослаться на нее вы получите NameError.

Списки your_hand и opponent_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

person Samwise    schedule 16.05.2020

Передача dict в list() возвращает список ключей. Итак, 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)]

(Кстати, это проект, взывающий к ООП-подходу. Просто мои 2 цента.)

person SimonR    schedule 16.05.2020