'''Угадайка чисел
Описание проекта: программа генерирует случайное число в диапазоне от 11 до 100100 и просит пользователя угадать это
число. Если догадка пользователя больше случайного числа, то программа должна вывести сообщение 'Слишком много,
попробуйте еще раз'. Если догадка меньше случайного числа, то программа должна вывести сообщение 'Слишком мало,
попробуйте еще раз'. Если пользователь угадывает число, то программа должна поздравить его и вывести сообщение
'Вы угадали, поздравляем!'.

Составляющие проекта:

Целые числа (тип int);
Переменные;
Ввод / вывод данных (функции input() и print());
Условный оператор (if/elif/else);
Цикл while;
Бесконечный цикл;
Операторы break, continue;
Работа с модулем random для генерации случайных чисел.'''


'''Оптимальная стратегия угадывания числа
Чтобы гарантированно угадать задуманное число от 11 до 100100 потребуется не более 77 попыток.

Оптимальный алгоритм угадывания: положим left = 1 и right = 100.

Называем число, равное middle = (left + right) // 2;
Если число middle равно задуманному числу, то мы угадали!;
Если число middle меньше задуманного числа, то положим left = middle + 1 и продолжим алгоритм;
Если число middle больше задуманного числа, то положим right = middle - 1 и продолжим алгоритм.
Поскольку на каждой итерации мы отбрасываем половину чисел, то гарантировано угадаем задуманное число за величину, 
равную \log_2 nlog 
2
​	
 n (двоичный логарифм) округленную до целого в большую сторону. При n=100n=100 получаем 77 попыток.

Примечание 1. Почитать подробнее о двоичном логарифме можно тут.

Примечание 2. Модуль math содержит функцию, вычисляющую двоичный логарифм.'''


'''Тимур и его числа
Тимур загадал число от 11 до nn. За какое наименьшее количество вопросов (на которые Тимур отвечает "больше" или 
"меньше") Руслан может гарантированно угадать число Тимура?

Формат входных данных
На вход программе подается натуральное число nn.

Формат выходных данных
Программа должна вывести наименьшее количество вопросов, которых гарантированно хватит Руслану, чтобы угадать 
число Тимура.

Sample Input 1:

8
Sample Output 1:

3
Sample Input 2:

20
Sample Output 2:

5
Sample Input 3:

100
Sample Output 3:

7'''


# n = int(input())
# k = 0
# m = 1
# while m < n :
#     m = m *2
#     k += 1
# print(k)
#
# from math import *
# print(ceil(log2(int(input()))))

''' Функция проверки корректности введенных данных
Пользователь потенциально может ввести неверные данные, например, не число, или число превышающее 
100100. Важно предусмотреть такую возможность, чтобы программа продолжала правильно работать. Обработка такого рода ситуаций называется защитой от дурака.

Напишите функцию is_valid() в которую передается один строковый аргумент. Функция возвращает значение True если переданный аргумент является целым числом от 11 до 100100 и False в противном случае. '''
# import random
# print('Добро пожаловать в угадайку')
#
#
# def is_valid(digit):
#     return digit.isdigit() and 1 <= int(digit) <= 100
#
#
# print(is_valid(input()))
#
# while True:
#     if int(input()) == random.randrange(1,100):
#         print('Угадал')
#     else: print('Не угадал')
#     print('Продолжить игру? Y/N')
#     if input() == 'N':
#         break

'''Основной цикл программы
Организуйте цикл, который будет запрашивать у пользователя данные (цикл может быть бесконечным (while True) или 
может использовать сигнальную метку с последующим переключением, после угадывания числа);
Запросите у пользователя число от 11 до 100100;
Проверьте введенные данные с помощью функции is_valid():
если данные некорректны, выведите текст: 'А может быть все-таки введем целое число от 1 до 100?' и перейдите к
 следующей итерации основного цикла;
если данные корректны, преобразуйте их к целому числу для удобства дальнейшей работы.'''

# import random
# print('Добро пожаловать в угадайку')
#
# def is_valid():
#    if (n.isdigit() == True) and ((int(n) >= 1) and (int(n) <= 100)):
#        return True
#    else:
#        return False
#
# while True:
#     n = input()
#     if is_valid() == True:
#         n = int(n)
#         print(n)
#         break
#     else:
#         print('А может быть все-таки введем целое число от 1 до 100?')
#
# while True:
#     if int(input()) == random.randrange(1,100):
#         print('Угадал')
#     else: print('Не угадал')
#     print('Продолжить игру? Y/N')
#     if input() == 'N':
#         break


# from random import *
#
#
# def is_valid():
#     if (n.isdigit() == True) and ((int(n) >= 1) and (int(n) <= 100)):
#         return True
#     else:
#         return False
#
#
# rand = randint(1, 100)
# while True:
#     n = input()
#     if is_valid() == True:
#         n = int(n)
#         if n < rand:
#             print('Ваше число меньше загаданного, попробуйте еще разок')
#         elif n > rand:
#             print('Ваше число больше загаданного, попробуйте еще разок')
#         else:
#             print('Вы угадали, поздравляем!')
#             break
#
# import random
# num = random.randint(1, 100)
# print('Добро пожаловать в числовую угадайку!\nВведите число от 1 до 100:\n')
#
# def is_valid(n):
#     return n.isdigit() and 1 <= int(n) <= 100
#
# def input_num():
#     while True:
#         guess = input()
#         if is_valid(guess):
#             return int(guess)
#         else:
#             print('А может быть все-таки введем целое число от 1 до 100?')
#
# def compare_num():
#     while True:
#         n = input_num()
#         if n < num:
#             print('Ваше число меньше загаданного, попробуйте еще разок')
#         elif n > num:
#             print('Ваше число больше загаданного, попробуйте еще разок')
#         else:
#             print('Вы угадали, поздравляем!')
#             break
#
# compare_num()
#
# import random
#
# def is_valid(n): # проверка на соответствие введенного значения условию
#     return n.isdigit() and float(n) - int(float(n)) == 0 and 1 <= int(n) <= 100
#
#
# def input_num(): # ввод данных
#     while True:
#         guess = input()
#         if is_valid(guess):
#             return int(guess)
#         else:
#             print('А может быть все-таки введем целое число от 1 до 100?')
#
#
# def compare_num(down_num, up_num): # Сравнение введенного значения с загаданным
#     num = random.randint(down_num, up_num)
#     total = 0
#     while True:
#         n = input_num()
#         total += 1
#         if n < num:
#             print('Не угадали, попробуйте число побольше')
#         elif n > num:
#             print('Мимо, назовите число поменьше')
#         else:
#             print('Победа!!! Вы угадали ответ за', total,  'попыток, поздравляем!' )
#             break
#
#
# def continue_game(): # Предложение продолжить игру
#     ans = input('Хотите продолжить ("д"/"н")?\n')
#     while True:
#         if ans not in ('y', 'д', 'n', 'н'):
#             ans = input('Вроде, взрослый человек, а на простой вопрос ответить не может...\nПродолжим ("д"/"н")?\n')
#         elif ans in ('n', 'н'):
#             print('До новых встреч!!!')
#             return False
#         else:
#             return True
#
#
# def game(): # Запуск игры
#     print('Добро пожаловать в числовую угадайку!')
#     while True:
#         print('Укажите, в каком диапазоне Вы готовы угадывать числа\n(В пределах от 1 до 100):\n')
#         x, y = input_num(), input_num()
#         if x > y:
#             x, y = y, x
#         print('Введите число от', x, 'до', y, '\n')
#         compare_num(x, y)
#         if continue_game():
#             continue
#         else:
#             break
#
#
# game() # Вызов игры