Игра "Угадай число"

Скачайте программу (правой кнопкой мышки на ссылке, выберите "Сохранить как" и сохраните готовым файлов, не стоит открывать и копипастить текст).

Она реализует игру "Угадай число". В этой игре компьютер загадывает число от 1 до 50, а пользователь может предлагать гипотезы (например, число 43), программа ответит - загаданное число больше, меньше или равно тому, которое предложил пользователь. Задача игрока - как можно быстрее угадать загаданное число.

Эту программу можно запустить и поиграть.

Выполните последовательно следующие задания:

  1. В коде функции do_game() есть закомментированная строчка #print_debug_info(max_allow_number, secret_number, checks, check_res). Если убрать знак решеточки, то строчка будет выполняться, и печатать на каждом ходе отладочную информацию - это может помочь в процессе отладки программы понимать, правильно ли все работает. Хотя, конечно, предполагается, что в финальной версии игры эта строчка закомментирована. Собственно, задание: попробуйте раскомментировать эту строчку, посмотрите, что произойдет, закомментируйте обратно.
  2. Сейчас программа очень непонятно печатает ответ. Когда она печатает, например, значок > - непонятно, это загаданное число больше, или то, которое предложил пользователь больше. Улучшите эту часть, сделайте, например, чтобы программа словами писала "загаданное число больше".
  3. Сделайте, чтобы когда число отгадано, программа бы писала, что число угадано за столько-то ходов.
  4. Поменяйте программу, чтобы она загадывала число не от 1 до 50, а, например, от 1 до 20.
  5. Поменяйте программу, чтобы в момент, когда она хочет загадать число, она бы спрашивала пользователя о том, из какого диапазона загадывать число.
  6. В программе есть функция make_suggest, которая получает всю информацию, которая есть у пользователя - какие предыдущие ходы делались, какие ответы на них были даны, а какое максимальное число может быть загадано. Сейчас эта функция возвращает 0, и подсказка не печатается. Если функция будет возвращать какое-то натуральное число, то подсказка будет печататься (посмотрите, как это будет, например, поменяв 0 в функции на что-то другое). Сделайте так, чтобы эта подсказка генерировалась более-менее разумно по какому-то алгоритму и подсказывала пользователю, о каком числе ему стоит сейчас спросить.
  7. Уберите из основного цикла программы вызов функции, которая спрашивает ход пользователя, и замените ее на то, чтобы в качестве хода учитывалось число, которое вы выдали в качестве подсказки. После этого должно получиться, что компьютер сам играет в эту игру (впрочем, если вы написали подсказки плохо, игра может оказаться бесконечной).
  8. В коде есть функция make_cheat, а ее вызов в основном теле игры пока закомментирован. Уберите комментарий с ее вызова (пока что все останется по-прежнему). А теперь напишите код функции так, чтобы компьютер, который задумывает число, мог "читерить" - менять задуманное число в процессе игры, но так, чтобы новое задуманное число не противоречило всем уже данным к этому моменту ответам и правилам игры, но при этом игра длилась бы как можно дольше. Например, игра могла бы быть устроена так:
    Компьютер выбирает число от 1 до 50, и загадывает 43.
    Пользователь проверяет число 25, и узнает, что загаданное число больше
    Пользователь проверяет число 43 (случайно угадал, нравится ему это число), но компьютер вместо ответа "угадал", читерит, и перезагадывает число, например, на 35. И говорит "меньше".
    Пользователь говорит 36, компьютер говорит "меньше".
    Пользователь говорит 34, компьютер волнуется, и перезагадывает число на 27, говорит "меньше".
    Пользователь говорит 27, компьютер перезагадывает на 26, и говорит "меньше".
    Пользователь говорит 26, компьютеру некуда деваться (потому что про 25 он уже говорил, что больше, а про 27 - что меньше), и он говорит "угадал".