Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/37: Рейтинг темы: голосов - 37, средняя оценка - 4.73
38 / 39 / 7
Регистрация: 13.11.2020
Сообщений: 678

Игра Ним

31.12.2020, 20:43. Показов 8021. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Игра ним для двух игроков с одной кучей и ограничением на количество забираемых камней: за один ход можно взять не больше трёх камней.
Напишите программу с «искусственным интеллектом» (ИИ), которая играет против пользователя и выигрывает, если может. Исходное количество камней в куче задаёт пользователь, программа всегда ходит первой. После каждого хода пользователя и программы необходимо сообщать, сколько камней взято и сколько осталось. В конце необходимо сообщить, кто выиграл.
Пользователь в свой ход вводит количество камней до тех пор, пока не введёт разрешённое число — от одного до трёх (или меньше — если камней осталось меньше).
При вводе некорректного значения необходимо вывести фразу: Некорректный ход: <кол-во камней> и заново потребовать вводить данные.
После хода игрока или ИИ необходимо вывести два числа: сколько камней было взято и сколько камней осталось в куче.
Если выигрывает игрок, то надо вывести фразу: Вы выиграли!, а если ИИ - фразу: ИИ выиграл!
Все сообщения программы должны строго соответствовать условию.

Формат ввода
Для старта игры вводится натуральное число.
Пример диалога игры:

9
1 8
4
Некорректный ход: 4
3
3 5
1 4
4
Некорректный ход: 4
-1
Некорректный ход: -1
2
2 2
2 0
ИИ выиграл!

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import random
wins = [4]
bul = int(input())
while True:
    if bul == 0: 
        print('Вы выиграли!')
        break
    for i in wins:
        comp = bul - i
        if 0 < comp < 3: 
            break
        else: 
            comp = random.randint(1, 3)
    if bul <= 3:
        comp = bul
        print(comp, bul) 
        print('ИИ выиграл!') 
        break
    bul -= comp
    print(comp, bul)
    while True:
        chel = int(input())
        if 0 < chel < 4:
            break
        else:
            print('Некорректный ход:', chel)
    bul -= chel
    print(chel, bul)
немного не так работает программа, при первом же тесте проваливается и неправильно выводит
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
31.12.2020, 20:43
Ответы с готовыми решениями:

Игра «Ним»
Помогите, пожалуйста, написать программу для следующей задачи на python. Игра «Ним». Нем - игра для двух...

Игра ним для двух игроков
Игра ним для двух игроков с одной кучей и ограничением на количество забираемых камней: за один ход можно взять не больше трёх камней. ...

Игра ним для двух игроков с одной кучей и ограничением на количество забираемых камней
Игра ним для двух игроков с одной кучей и ограничением на количество забираемых камней: за один ход можно взять не больше трёх камней. ...

13
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
01.01.2021, 01:01
Ychenyi, с 8-й по 13-ю строки замени на
Python
1
comp = 1
1
38 / 39 / 7
Регистрация: 13.11.2020
Сообщений: 678
01.01.2021, 02:10  [ТС]
Gdez, все равно выдает ошибку
Миниатюры
Игра Ним  
0
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
01.01.2021, 02:47
Ychenyi,
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
bul = int(input())
while True:
    if bul == 0: 
        print('Вы выиграли!')
        break
    comp = 1
    if bul <= 3:
        comp = bul
        print(comp, bul - comp)
        print('ИИ выиграл!') 
        break
    bul -= comp
    print(comp, bul)
    while True:
        chel = int(input())
        if 0 < chel < 4:
            break
        else:
            print('Некорректный ход:', chel)
    bul -= chel
    print(chel, bul)
1
38 / 39 / 7
Регистрация: 13.11.2020
Сообщений: 678
01.01.2021, 11:55  [ТС]
Gdez, опять тоже самое выводит что и выше
0
38 / 39 / 7
Регистрация: 13.11.2020
Сообщений: 678
01.01.2021, 18:07  [ТС]
Gdez,

Не по теме:

я завтра уточню тогда у учителя , что не так и напишу вам



Добавлено через 3 минуты
Gdez, а как еще сделать, чтобы взявший последний камень не выиграл а проиграл?

Добавлено через 3 минуты
я еще заметил что игрок всегда выигрывает если камней 4, как это тоже исправить?
0
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
01.01.2021, 18:28
Ychenyi,
Gdez, а как еще сделать, чтобы взявший последний камень не выиграл а проиграл?
А по условию взявший последний камень разве проигрывает?
0
38 / 39 / 7
Регистрация: 13.11.2020
Сообщений: 678
01.01.2021, 18:30  [ТС]
Gdez, выигрывает, но в другой задаче, проигрывает

Добавлено через 36 секунд
Кстати насчёт числа 4,возможно поэтому программа и работает некорректно,потому что все сводится к 4 ,а на 4 он проигрывает
0
3582 / 2182 / 571
Регистрация: 02.09.2015
Сообщений: 5,510
01.01.2021, 18:52
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
In [1]: def solution():
    ...:     def ai():
    ...:         result = max(1, n % 4)
    ...:         print(result, n - result)
    ...:         return result
    ...:     def player():
    ...:         while not (1 <= (result := int(input())) <= 3 and result <= n):
    ...:             print(f"Некорректный ход: {result}")
    ...:         return result
    ...:     n = int(input())
    ...:     while n:
    ...:         n -= ai()
    ...:         if not n:
    ...:             print("ИИ выиграл!")
    ...:             return
    ...:         n -= player()
    ...:     print("Вы выиграли!")
    ...:
 
In [2]: solution()
9
1 8
4
Некорректный ход: 4
3
1 4
4
Некорректный ход: 4
-1
Некорректный ход: -1
2
2 0
ИИ выиграл!
1
38 / 39 / 7
Регистрация: 13.11.2020
Сообщений: 678
01.01.2021, 19:45  [ТС]
Arsegg, выдает ошибку при первом же тесте
Миниатюры
Игра Ним  
0
3582 / 2182 / 571
Регистрация: 02.09.2015
Сообщений: 5,510
01.01.2021, 20:23
Лучший ответ Сообщение было отмечено Ychenyi как решение

Решение

Ychenyi, попробуй этот вариант:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
In [1]: def solution():
   ...:     def show(result):
   ...:         print(result, n - result)
   ...:     def ai():
   ...:         result = max(1, n % 4)
   ...:         show(result)
   ...:         return result
   ...:     def player():
   ...:         while not (1 <= (result := int(input())) <= 3 and result <= n):
   ...:             print(f"Некорректный ход: {result}")
   ...:         show(result)
   ...:         return result
   ...:     n = int(input())
   ...:     while n:
   ...:         n -= ai()
   ...:         if not n:
   ...:             print("ИИ выиграл!")
   ...:             return
   ...:         n -= player()
   ...:     print("Вы выиграли!")
   ...:
 
In [2]: solution()
9
1 8
4
Некорректный ход: 4
3
3 5
1 4
4
Некорректный ход: 4
-1
Некорректный ход: -1
2
2 2
2 0
ИИ выиграл!
1
38 / 39 / 7
Регистрация: 13.11.2020
Сообщений: 678
01.01.2021, 20:31  [ТС]
Arsegg, спасибо , сработало
а как еще сделать чтобы кто последний взял камень проигрывал?
0
3582 / 2182 / 571
Регистрация: 02.09.2015
Сообщений: 5,510
01.01.2021, 20:52
Лучший ответ Сообщение было отмечено Ychenyi как решение

Решение

Цитата Сообщение от Ychenyi Посмотреть сообщение
а как еще сделать чтобы кто последний взял камень проигрывал?
Тут уже совершенно другая задача - алгоритм решения другой будет:
При n = 1 - проигрывает первый игрок;
При n = 2 - проигрывает второй игрок (первый берет 1 камень);
При n = 3 - проигрывает второй игрок (первый берет 2 камня);
При n = 4 - проигрывает второй игрок (первый берет 3 камня);
При n = 5 - проигрывает первый игрок (первый берет k камней (где 1 <= k <= 3), второй - 4 - k);
...
При (n - 1) % 4 == 0 - проигрывает первый игрок;
В остальных случаях (при правильной игре первого игрока) - второй.

P. S. Правильная игра первого игрока заключается в том, чтобы результирующее количество камней в куче после его хода было кратно 4 (с остатком 1).
1
38 / 39 / 7
Регистрация: 13.11.2020
Сообщений: 678
07.01.2021, 14:29  [ТС]
Arsegg, можно ведь проще просто изменить предложение "Вы выиграли!" на "ИИ выиграл" и наоборот

Добавлено через 4 минуты
Цитата Сообщение от Ychenyi Посмотреть сообщение
Пример диалога игры:
9
1 8
4
Некорректный ход: 4
3
3 5
1 4
4
Некорректный ход: 4
-1
Некорректный ход: -1
2
2 2
2 0
ИИ выиграл!
Arsegg, я сделал как написал в предыдущем сообщении и проверил на вот этих данных и все работает

Добавлено через 26 минут

Не по теме:

Arsegg, все равно большое спасибо :)



Добавлено через 1 час 8 минут
а нет все таки недостаточно просто текст поменять, нужно поменять способ вычисления кол-ва взятых камней при ходе
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
07.01.2021, 14:29
Помогаю со студенческими работами здесь

Игра "Ним" с двумя кучами для одного игрока
Игра Ним с двумя кучами для одного игрока без ограничений на количество забираемых камней. На первой и второй строках указывается...

Игра ним с двумя кучами камней, начальное количество камней в кучах задаёт пользователь
Игра ним с двумя кучами камней, начальное количество камней в кучах задаёт пользователь. Компьютер (ИИ) играет против пользователя и...

Игра "Ним" с тремя кучами камней
Игра ним с тремя кучами камней, начальное количество камней в кучах задаёт пользователь. Компьютер (ИИ) играет против пользователя и ходит...

Игра Ним с двумя кучами для одного игрока
Задача: Игра Ним с двумя кучами для одного игрока без ограничений на количество забираемых камней. На первой и второй строках...

Игра ним для двух игроков с двумя кучами и без ограничения на количество забираемых камней
Игра ним для двух игроков с двумя кучами и без ограничения на количество забираемых камней. Напишите программу с «искусственным...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
Программный отбор значений справочника
Maks 21.03.2026
Установка программного отбора значений справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит предопределенное значение перечислений. Процедура. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru