Язык кода Python. Игра «Компьютер угадывает число»
Поменяйте мальчика и компьютер из задачи местами. Теперь мальчик загадывает число между 1 и 100 (включительно). Компьютер может спросить у мальчика: «Твое число равно, меньше или больше, чем число N?», где N — число, которое хочет проверить компьютер. Мальчик отвечает одним из трёх чисел: 1 — равно, 2 — больше, 3 — меньше.
Напишите программу, которая с цепочки таких вопросов и ответов мальчика угадывает число.
Дополнительно: сделайте так, чтобы можно было гарантированно угадать число за семь попыток.
import random
right_ans = int(input('Введите число от 1 до 100: '))
a = 1
b = 101
right = False
tries = 1
while not right:
comp_answer = random.randint(a, b)
if comp_answer > right_ans:
b = comp_answer
elif comp_answer < right_ans:
a = comp_answer + 1
else:
print(f'Yes, thats it, computer guessed with {tries} attempts')
right = True
tries += 1
class Finder:
def __init__(self):
self.current_range = range(1, 101)
def condition(self, user_select):
if user_select == '1':
return True
elif user_select == '2':
self.current_range = range(int(self.current_half + self.current_range.start), self.current_range.stop)
return False
elif user_select == '3':
self.current_range = range(self.current_range.start, int(self.current_half + self.current_range.start))
return False
@property
def current_half(self) -> int:
return int((self.current_range.stop - self.current_range.start) / 2)
finder = Finder()
while True:
user_select = input(f'Это {finder.current_half + finder.current_range.start}?\n')
result = finder.condition(user_select)
if result:
break
1. Сначала нам нужно создать переменные для хранения значений верхней и нижней границ загадываемого числа. В данной задаче эти значения равны 1 и 100 соответственно.
```python
lower_bound = 1
upper_bound = 100
```
2. Затем мы можем начать процесс угадывания числа. Мы будем использовать метод бинарного поиска, который позволяет нам сокращать диапазон поиска вдвое на каждой попытке.
```python
while True:
# Вычисляем середину диапазона
guess = (lower_bound + upper_bound) // 2
```
3. Теперь компьютер может задать мальчику вопрос о загаданном числе.
```python
response = int(input("Твое число равно, меньше или больше, чем число " + str(guess) + "? (1 - равно, 2 - больше, 3 - меньше): "))
```
4. Нам нужно проверить ответ мальчика и соответствующим образом обновить границы диапазона.
```python
if response == 1:
# Мальчик сказал, что число угадано
print("Компьютер угадал число! Оно равно", guess)
break
elif response == 2:
# Мальчик сказал, что число больше
lower_bound = guess + 1
elif response == 3:
# Мальчик сказал, что число меньше
upper_bound = guess - 1
```
5. Повторяем шаги 3-4 до тех пор, пока компьютер не угадает число или пока не исчерпается максимальное количество попыток. Для гарантированного угадывания числа за семь попыток, нужно выполнить цикл не более семи раз.
```python
if lower_bound > upper_bound:
print("Компьютер не смог угадать число в заданном диапазоне.")
break
```
Полный код программы выглядит следующим образом:
```python
lower_bound = 1
upper_bound = 100
while True:
guess = (lower_bound + upper_bound) // 2
response = int(input("Твое число равно, меньше или больше, чем число " + str(guess) + "? (1 - равно, 2 - больше, 3 - меньше): "))
if response == 1:
print("Компьютер угадал число! Оно равно", guess)
break
elif response == 2:
lower_bound = guess + 1
elif response == 3:
upper_bound = guess - 1
if lower_bound > upper_bound:
print("Компьютер не смог угадать число в заданном диапазоне.")
break
```
Теперь компьютер будет спрашивать мальчика вопросы и угадывать загаданное число, и он сможет его угадать за семь попыток или сообщить, что число не найдено.