Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/18: Рейтинг темы: голосов - 18, средняя оценка - 4.72
1 / 1 / 0
Регистрация: 08.07.2022
Сообщений: 87

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

18.09.2022, 13:46. Показов 3690. Ответов 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
5222 / 3469 / 1173
Регистрация: 21.03.2016
Сообщений: 8,295
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
5515 / 2868 / 571
Регистрация: 07.11.2019
Сообщений: 4,758
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
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru