1 / 1 / 0
Регистрация: 08.07.2022
Сообщений: 87

Перетасовка и раздача игральных карт

18.09.2022, 13:46. Показов 3695. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день. Есть задача - раздача карманных карт. Смысл в том, чтобы создать колоду карт, перетасовать ее и раздать определенное количество карт определенному количеству игроков. Я составила программу, однако при проверке выдает ошибку о несуществующем индексе. В целом программа работает, но карт всего 52, и если раздать 13 игрокам по 4 карты - вот здесь и вылазит ошибка, при том, что программа всё равно выполняется. Пожалуйста помогите)
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import itertools, random
 
a = int(input('Введите количество игроков: '))
b = int(input('Введите количество карт, раздаваемых одному игроку: '))
 
deck = list(itertools.product([2, 3, 4, 5, 6, 7, 8, 9, 10, 'Валет', 'Дама', 'Король', 'Туз'],
                              ['Пика', 'Черва', 'Бубна', 'Трефа']))
 
random.shuffle(deck)
 
for c in range(a):
    cards_player = []
    for i in range(b):
        cards_player.append(str(deck[i][0]) + str(' ') + str(deck[i][1]))
        deck.remove(deck[i])
    print('Игрок №', c + 1, ' получил: ', cards_player)
Добавлено через 1 минуту
Ошибка: Traceback (most recent call last):
File "C:/Users/Батя/Desktop/Python/Programs/Exercise 126/Exercise 126.py", line 18, in <module>
cards_player.append(str(deck[i][0]) + str(' ') + str(deck[i][1]))
IndexError: list index out of range
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.09.2022, 13:46
Ответы с готовыми решениями:

Сгенерируйте и выведите на экран колоду игральных карт без одной из мастей: три масти от двойки до туза
Сгенерируйте и выведите на экран колоду игральных карт без одной из мастей: три масти от двойки до туза. Масть, которая должна быть...

Простые условия. Старшинство игральных карт
Мастям игральных карт присвоены порядковые номера: 1 — пики, 2 — трефы, 3 — бубны, 4 — червы. Достоинству карт, старше десятки, присвоены...

Раздача игральных карт на 3 человека
Всем добрый вечер. Существует такая чешская игра Марьяж, 1 игроку раздается 12 карт, и двум другим по 10 карт. Масти различаются...

7
2431 / 1474 / 633
Регистрация: 01.11.2021
Сообщений: 2,269
18.09.2022, 14:01
Лучший ответ Сообщение было отмечено lena_torez как решение

Решение

Для последнего игрока, цикл работает от 0 до 4. Но после нескольких итераций в списке deck уже нет 4 карт.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import itertools, random
 
a = int(input('Введите количество игроков: '))
b = int(input('Введите количество карт, раздаваемых одному игроку: '))
 
deck = list(itertools.product([2, 3, 4, 5, 6, 7, 8, 9, 10, 'Валет', 'Дама', 'Король', 'Туз'],
                              ['Пика', 'Черва', 'Бубна', 'Трефа']))
 
random.shuffle(deck)
 
for c in range(a):
    cards_player = []
    for i in range(b-1, -1, -1):
        print(b)
        cards_player.append(str(deck[i][0]) + str(' ') + str(deck[i][1]))
        deck.remove(deck[i])
    print('Игрок №', c + 1, ' получил: ', cards_player)
1
 Аватар для Semen-Semenich
5224 / 3471 / 1173
Регистрация: 21.03.2016
Сообщений: 8,298
18.09.2022, 14:35
у вас допустим 12 карт и 3 игрока. в цикле вы удаляете три карты итого у вас уже 9 карт но при этом переменная b так же содержит значение 12. и вот во втором круге цикла вы пытаетесь забрать из колоды карты с индексами от 10 до 12 но таких индексов уже нет!

Добавлено через 27 минут
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import itertools, random
 
a = int(input('Введите количество игроков: '))
b = int(input('Введите количество карт, раздаваемых одному игроку: '))
 
deck = list(itertools.product(['2', '3', '4', '5', '6', '7', '8', '9', '10', 'Валет', 'Дама', 'Король', 'Туз'],
                              ['Пика', 'Черва', 'Бубна', 'Трефа']))
 
random.shuffle(deck)
 
for c in range(a):
    cards_player = []
    for _ in range(b):
        cards_player.append(' '.join(deck.pop()))      
    print('Игрок №', c + 1, ' получил: ', cards_player)
1
1 / 1 / 0
Регистрация: 08.07.2022
Сообщений: 87
18.09.2022, 14:45  [ТС]
Спасибо за ответы)
0
2431 / 1474 / 633
Регистрация: 01.11.2021
Сообщений: 2,269
18.09.2022, 14:59
Python
1
2
3
4
5
6
7
8
9
10
11
import itertools, random
 
a = int(input('Введите количество игроков: '))
b = int(input('Введите количество карт, раздаваемых одному игроку: '))
 
deck = list(itertools.product([2, 3, 4, 5, 6, 7, 8, 9, 10, 'Валет', 'Дама', 'Король', 'Туз'],
                              ['Пика', 'Черва', 'Бубна', 'Трефа']))
 
for c in range(a):
    cards_player = [' '.join([str(x), y]) for x, y in random.sample(deck, b)]
    print('Игрок №', c + 1, ' получил: ', cards_player)
1
1 / 1 / 0
Регистрация: 08.07.2022
Сообщений: 87
18.09.2022, 16:20  [ТС]
Alexarh, хороший код, но получаются повторения, т.е у 2 игроков может быть одна и та же карта(
1
2431 / 1474 / 633
Регистрация: 01.11.2021
Сообщений: 2,269
18.09.2022, 16:41
Цитата Сообщение от lena_torez Посмотреть сообщение
Alexarh, хороший код, но получаются повторения, т.е у 2 игроков может быть одна и та же карта(
Точно, тут косяк получился)
0
5516 / 2869 / 571
Регистрация: 07.11.2019
Сообщений: 4,759
18.09.2022, 19:53
Python
1
2
3
4
5
6
7
8
9
10
11
12
import itertools, random
 
a = int(input('Введите количество игроков: '))
b = int(input('Введите количество карт, раздаваемых одному игроку: '))
 
deck = list(itertools.product([2, 3, 4, 5, 6, 7, 8, 9, 10, 'Валет', 'Дама', 'Король', 'Туз'],
                              ['Пика', 'Черва', 'Бубна', 'Трефа']))
random.shuffle(deck)
 
for c in range(a):
    cards_player = [' '.join([str(x), y]) for x, y in deck[c*b:(c+1)*b]]
    print('Игрок №', c + 1, ' получил: ', cards_player)
Добавлено через 28 секунд
Alexarh, вот так можно..
3
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.09.2022, 19:53
Помогаю со студенческими работами здесь

Сколькими способами можно из колоды игральных карт (36 карт) раздать двум игрокам по шесть карт?
Задача на комбинаторику с подвохом Сколькими способами можно из колоды игральных карт (36 карт) раздать двум игрокам по шесть карт...

Мастям игральных карт присвоены порядковые номера. Вывести название соответствующих карт
Помогите решить задачу!!! Мастями игральных карт присвоены порядковые номера:1-пики;2-трефы;3-бубны;4-червы.Достоинству карт,старших...

Сколькими способами из 36 игральных карт можно выбрать 5 карт?
Сколькими способами из 36 игральных карт можно выбрать 5 карт так, чтобы выполнялись условия: 1 червная карта, 2 туза, нет крестовых карт. ...

Перетасовка карт
Нужна помощь. Пыталась решить сама , но не получилось. Моя попытка написана ниже . Имитировать перетасовку колоды карт. Каждая...

Перетасовка карт в 52 листа
Имитировать перетасовку ново колоды игральных карт в 52 листа многократным приминением операций сдвига и &quot;врезки&quot; так, чтобы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

Новые блоги и статьи
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru