Условия задачи:

 

Ранее в этой главе вы рассмотрели программу card_dealer.py, которая имитирует раздачу игральных карт из колоды на руки. Усовершенст­вуйте программу так, чтобы она имитировала упрощенную версию игры в блек-джек между двумя виртуальными игроками. Карты имеют приведенные ниже значения.
•Числовым картам присвоено значение, которое на них напечатано. Например, значение двойки пик равняется 2, значение пятерки бубей равняется 5. 
•Валетам, дамам и королям присвоено значение 10. 

•Тузам присвоено значение 1 или 11 в зависимости от выбора игрока. 

Программа должна раздавать карты каждому игроку до тех пор, пока карты на руках у одного из игроков не превысят 21 очко. Когда это происходит, другой игрок становит­ся победителем. (Может возникнуть ситуация, когда карты на руках у обоих игроков
превысят 21 очко; в этом случае победителя нет.) Программа должна повторяться до тех пор, пока все карты не будут розданы. 
Если игроку сдан туз, то программа должна определить значение этой карты согласно следующему правилу: туз равняется 11 очкам, если в результате добавления этой карты стоимость комбинации карт на руках у игрока не превысит 21 очко. В противном случае туз равняется 1 очку. 

 

Решение задачи:

import random
pic = 'пик'
dec = {'двойка пик': 2, 'тройка пик': 3, 'четверка пик': 4, 'пятерка пик': 5, 'шестерка пик': 6, 'семерка пик': 7,
       'восьмерка пик': 8, 'девятка пик': 9, 'десятка пик': 10, 'валет пик': 10, 'дама пик': 10, 'король пик': 10,
       'туз пик':[1, 11],
       'двойка крестей': 2, 'тройка крестей': 3, 'четверка крестей': 4, 'пятерка крестей': 5, 'шестерка крестей': 6,
       'семерка крестей': 7, 'восьмерка крестей': 8, 'девятка крестей': 9, 'десятка крестей': 10, 'валет крестей': 10,
       'дама крестей': 10, 'король крестей': 10, 'туз крестей':[1, 11],
       'двойка бубей': 2, 'тройка бубей': 3, 'четверка бубей': 4, 'пятерка бубей': 5, 'шестерка бубей': 6,
       'семерка бубей': 7, 'восьмерка бубей': 8, 'девятка бубей': 9, 'десятка бубей': 10, 'валет бубей': 10,
       'дама бубей': 10, 'король бубей': 10, 'туз бубей':[1, 11],
       'двойка червей ': 2, 'тройка червей': 3, 'четверка червей': 4, 'пятерка червей': 5, 'шестерка червей': 6,
       'семерка червей': 7, 'восьмерка червей': 8, 'девятка червей': 9, 'десятка червей': 10, 'валет червей': 10,
       'дама червей': 10, 'король червей': 10, 'туз червей':[1, 11]}
def player_comp(dec, total1):
    list_tuz = ['туз пик', 'туз крестей', 'туз бубей', 'туз червей']
    kard = random.choice(list(dec))
    if kard in list_tuz:
        if total1 + 11 <= 21:
            return 11
        else:
            return 1
    else:
        return dec[kard]
#print(player_comp(dec))

def player_user(dec,total2):
    list_tuz = ['туз пик', 'туз крестей', 'туз бубей', 'туз червей']
    kard = random.choice(list(dec))
    if kard in list_tuz:
        if total2 + 11 <= 21:
            return 11
        else:
            return 1
    else:
        num = dec[kard]
        return num
#print(player_user(dec))

total1 =0
total2 =0
while total2 <=21 and total1 <=21:
    total2 += player_user(dec,total2)
    total1 += player_comp(dec,total1)
    if total1 > 21 and total2 > 21:
        print('Победителя нет')
    elif total2 > 21:
        print(f'компьютер выиграл счет: компьютер{total1} игрок: {total2}')
    elif total1 > 21:
        print(f'Игрок выиграл счет: компьютер{total1} игрок: {total2}')