Андрей
Высший разум
(469943)
3 года назад
import random
heap = [int(input('первая куча ')), int(input('вторая куча '))]
while True:
~~# ход ИИ
~~if heap[0] == heap[1]: n, s = random.randint(0, 1), 1
~~else: n, s = heap[1] > heap[0], max(heap) - min(heap)
~~heap[n] -= s
~~print(n + 1, s, *heap)
~~if sum(heap) == 0:
~~~~print('ИИ выиграл')
~~~~exit()
~~# ход человека
~~while True:
~~~~n, s = int(input('номер кучи ')), int(input('кол-во камней '))
~~~~if 1 <= n <= 2 and 0 < s <= heap[n - 1]: break
~~~~print('Некорректный ход')
~~heap[n - 1] -= s
~~print(n, s, *heap)
~~if sum(heap) == 0:
~~~~print('вы выиграли')
~~~~exit()
Напишите программу с «искусственным интеллектом» (ИИ), которая играет против пользователя и выигрывает, если может. Исходное количество камней в кучах задаёт пользователь, программа всегда ходит первой. Выигрывает забравший последний камень, и при окончании игры нужно объявить победителя.
Алгоритм игры выглядит следующим образом:
Сначала пользователь вводит количества камней в кучах (натуральные числа, каждое на новой строке).
Затем первый ход делает программа и выводит через пробел четыре числа: из какой кучи взяты камни; сколько камней взято; сколько камней осталось в кучах, сначала в первой, затем во второй.
Затем ход делает пользователь: вводит на отдельных строках номер кучи и количество камней, которые он хочет взять.
Если ход некорректный, например, пользователь пытается взять камней больше, чем есть в куче, программа должна вывести: Некорректный ход: <куча> <кол-во камней> и ожидать нового ввода пользователя.
После каждого корректного хода игрока или ИИ нужно выводить четыре числа, как и после первого хода ИИ.
Если выигрывает игрок, то надо вывести фразу: Вы выиграли!, а если ИИ – фразу: ИИ выиграл!
Все сообщения программы должны строго соответствовать условию.
Формат ввода
Для старта игры вводятся два натуральных числа.
Пример диалога игры:
10
10
2 1 10 9
1
15
Некорректный ход: 1 15
2
10
Некорректный ход: 2 10
2
7
2 7 10 2
1 8 2 2
2
1
2 1 2 1
1 1 1 1
1
1
1 1 0 1
2 1 0 0
ИИ выиграл!
Есть вот такой код:
cushka1 = 0
cushka2 = 0
while cushka1 <= 0 or cushka2 <= 0:
cushka1 = int(input())
cushka2 = int(input())
if cushka1 <= 0 or cushka2 <= 0:
print("Некорректный ход:", cushka1, cushka2)
if cushka1 < 2:
print("1", cushka1, "0", cushka2)
cushka1 = 0
else:
print("1", cushka1 - 1, "1", cushka2)
cushka1 = cushka1 - (cushka1 - 1)
while cushka1 != 0 or cushka2 != 0:
cushka = int(input())
chislo = int(input())
if cushka <= 0:
print("Некорректный ход:", cushka, chislo)
elif chislo <= 0:
print("Некорректный ход:", cushka, chislo)
elif cushka == 1 and chislo <= cushka1:
print(cushka, chislo, cushka1 - chislo, cushka2)
cushka1 = cushka1 - chislo
# ИИ
if cushka2 > 1:
print("2", cushka2, cushka1, "0")
cushka2 = 0
print("Вы выиграли!")
elif cushka1 != 0 and cushka2 != 0:
print("1", cushka1, "0", cushka2)
cushka1 = 0
print("Вы выиграли!")
cushka2 = 0
elif cushka1 == 0 and cushka2 == 0:
print("Вы выиграли!")
else:
print("2", cushka2, "0", "0")
cushka2 = 0
cushka1 = 0
print("ИИ выиграл!")
elif cushka == 2 and chislo <= cushka2:
print(cushka, chislo, cushka1, cushka2 - chislo)
cushka2 = cushka2 - chislo
# ИИ
if cushka2 > 1:
print("2", cushka2, cushka1, "0")
cushka2 = 0
elif cushka1 != 0 and cushka2 != 0:
print("1", cushka1, "0", cushka2)
cushka1 = 0
print("Вы выиграли!")
cushka2 = 0
elif cushka1 == 0 and cushka2 == 0:
print("Вы выиграли!")
else:
print("2", cushka2, "0", "0")
cushka2 = 0
cushka1 = 0
print("ИИ выиграл!")
else:
print("Некорректный ход:", cushka, chislo)
Но он не засчитывается:
ИИ не сообщил о некорректном ходе: 1 2
Вы не обязаны использовать мой код. Это просто вот такой пример, куда надо двигаться.