Вызов функции локально в теле другой функции

Всех приветствую! Решил, что моих знаний Python`а достаточно, чтобы правдами неправдами написать консольную карточную игру "Дурак". Системно разбил написание кода на этапы - 1 - подготовка к игре, 2- сам процесс игры и 3 - подсчет результатов, переход к новой игре. На этапе 1 столкнулся с проблемой: оформил блок в функцию desk_announcement(pic_list) для передачи в колоду всех комбинаций карт (номинал - масть). Параметром назначил список ['Туз', 'Король', 'Дама', 'Валет']. При определении права первого пытаюсь вызвать desk_announcement(pic_list) и передать ей новый список локально, чтобы сохранить первоначальные данные о колоде. Не понимаю, почему функция не принимает новый список - в список check_list, использующийся для выбора наименьшего козыря, поступают данные типа str, чего быть не должно. Подскажите, где я мог ошибиться. Код следующий:

# Подключаем библиотеку дял работы со случайными элементами

import random

# Создаем элементы наполнения карточной колоды
# Для будущего сравнения карт между собой, для картинок создаем словарь и 
# список из численных значений оставшихся карт

pic_list = ['Туз', 'Король', 'Дама', 'Валет']
numb_list = [6, 7, 8, 9, 10]
suit_list = ['Черви', 'Пики', 'Крести', 'Бубны']

# Для упрощения сравнения карт создадим функцию для переприсвоения списку картинок
    # численных значений
   
  
# Создаем места хранения данных о всей колоде, карт игрока и карт компьютера

card_desk = []
comp_cards_list = []
player_cards_list = []

# Добавляем в список колоды все возможные комбинации масти и номинала карт

def desk_announcement(pic_list):
    card_desk_rnfc_pic = []
    [card_desk_rnfc_pic.extend([[item_p, item_s] for item_s in suit_list]) for item_p in pic_list]
    card_desk_rnfc_num = []
    [card_desk_rnfc_num.extend([[numb, item_s2] for item_s2 in suit_list]) for numb in numb_list]
    
    for ev1 in card_desk_rnfc_num:
        card_desk.append(ev1)
    for ev2 in card_desk_rnfc_pic:       
        card_desk.append(ev2)
        
desk_announcement(pic_list)

# Сохраним колоду в целях проверки на право первого хода, так как 
# pic_list будет переприсвоен список из чисел

card_desk_repository  = card_desk

# Определяем принцип раздачи карт
# и после раздачи карт поочередно удаляем их из колоды

def cards_distribution(card_desk):
    for comp_cards in range(6):
        comp_cards = random.choice(card_desk)
        comp_cards_list.append(comp_cards)
        card_desk.remove(comp_cards)
        
    for player_cards in range(6):
        player_cards = random.choice(card_desk)
        player_cards_list.append(player_cards)
        card_desk.remove(player_cards)

cards_distribution(card_desk)

# Сохраним раздачу карт в целях проверки на право первого хода, так как 
# pic_list будет переприсвоен список из чисел

cc_list = comp_cards_list
pl_list = player_cards_list

# Выводим на экран карты игрока 

print('Ваши карты: \n')

def playcardsapperance():
    count_cards = [1, 2, 3, 4, 5, 6]
    for n, (a, b) in zip(count_cards, player_cards_list):
        print(f'{n}. {a} {b}')
  
playcardsapperance()

# Определяем принцип объявления козыря и козырную масть
# Если козырем выпадает туз, меняем козырь
# Если при повторном выборе козыря выпадает не туз, продолжаем выполнение программы

trump = random.choice(card_desk)

def trumpannouncement(card_desk):
    for (i, j) in card_desk:
        if trump == (i, j) and i == 'Туз':
            continue 
    print(f'\nКолоду держит {trump[0]} {trump[1]}')
    print(f'\nКозыри - {trump[1]}')

trumpannouncement(card_desk)

# Определяем механизм передачи права первого хода
# по наличию наименьшего по значению козыря

print(comp_cards_list)

check_list = []

def firstmoveright():
    desk_announcement([14, 13, 12, 11])
    cards_distribution(card_desk)
    trumpannouncement(card_desk)
    for (pl1, pl2) in pl_list:
        if pl2 == trump[1]:
            check_list.append(pl1)
    for (cp1, cp2) in cc_list:
        if cp2 == trump[1]:
            check_list.append(cp1)
    if min(check_list) in pl_list:
        print('У вас младший козырь.')
        print('\nВаш ход.')
        
    else:
        print('Первый ход за вашим оппонентом.')


firstmoveright()

Заранее благодарен за любую помощь.


Ответы (1 шт):

Автор решения: do8rolyuboff

Присвой ['Тузу', 'Королю', 'Даме', 'Вальту'] порядковый номер, функция min не сработает, если check_list будет иметь вид типа:

['Валет', 6, 'Туз', 14, 9, 'Дама']

min не сможет сравнить строку с числом...

Так же странно выглядит

if min(check_list) in pl_list:

pl_list - многомерный массив, будет вида [int, str], тогда ты сможешь проверить наличие наименьшей карты в pl_list'е следующим образом:

if min(check_list) in dict(pl_list).keys():
# Первое что пришло на ум... Наверно есть более красивое решение
→ Ссылка