Код не дорабатывает указанные задачи до конца
Имеется следующий код на Python. Это код бота, и задачи этого кода следующие:
Код создает стол, а также вставляет карты на изображение. Карты генерируются перед наложением на стол.
Вся проблема заключается в том, что код генерирует 10 карт, но при этом первый цикл генерации он обрабатывает некорректно, и может упустить несколько карт. Как это исправить?
q = 0
tables = []
while q < 2:
# Размеры игрального стола
table_width = 1280
table_height = 720
# Размеры карт
card_width = 179
card_height = 250
# Создаем изображение игрального стола
table_image = Image.open("Pictures/stol.png")
# Загружаем изображения карт
cards6 = ['6c', '6b', '6k', '6p']
cards7 = ['7c', '7b', '7k', '7p']
cards8 = ['8c', '8b', '8k', '8p']
cards9 = ['9c', '9b', '9k', '9p']
cards10 = ['10c', '10b', '10k', '10p']
cardsK = ['Kc', 'Kb', 'Kk', 'Kp']
cardsQ = ['Qc', 'Qb', 'Qk', 'Qp']
cardsJ = ['Jc', 'Jb', 'Jk', 'Jp']
cardsA = ['Ac', 'Ab', 'Ak', 'Ap']
cards = {"6": cards6, "7": cards7, "8": cards8, "9": cards9, "10": cards10, "K": cardsK, "Q": cardsQ, "J": cardsJ,
"A": cardsA}
appcard = []
c = 0
print(list(cards))
while c <= 11:
ca = random.choice(list(cards))
carst = random.choice(cards[ca])
print(carst)
c = c + 1
appcard.append(carst)
await asyncio.sleep(3)
le = {}
for i in appcard:
le[i] = False
tables.append([rnd, appcard, le])
q = q + 1
return tables
Функция вызывается один раз.
Ответы (1 шт):
Ваш метод, выбирающий карты из колоды по одной, может выбрать несколько раз одну и ту же карту. Вы не проверяете, что карта уже была выбрана. Далее, словарь не может содержать одинаковые элементы, поэтому в итоговом словаре будет меньше карт, чем нужно, если были повторы одной и той же карты.
Проще всего выбрать нужное количество карт из колоды за один присест, просто перетасовав предварительно колоду и выбрав сверху из неё нужное число карт.
Пример кода:
from random import shuffle
cards = [f'{n}{s}' for n in ['7','8','9','10','J','Q','K','A'] for s in 'cbkp']
shuffle(cards)
choice = cards[:11]
print(choice)
Пример вывода (он случайный):
['Jb', 'Kb', '9b', 'Ap', '9k', 'Jp', 'Kp', 'Qc', '10c', '8p', 'Ab']