Нужно улучшить код для учебного проекта.Алгоритм должен угадывать число за меньшее количество попыток

import numpy as np

count = 0                           # счетчик попыток
number = np.random.randint(1,101)   # загадали число
print ("Загадано число от 1 до 100")

while True:                        # бесконечный цикл
    predict = int(input())         # предполагаемое число
    count += 1                     # плюсуем попытку
    if number == predict: break    # выход из цикла, если угадали
    elif number > predict: print (f"Угадываемое число больше {predict} ")
    elif number < predict: print (f"Угадываемое число меньше {predict} ")
        
print (f"Вы угадали число {number} за {count} попыток.")    

Ответы (3 шт):

Автор решения: Dark Serius

Например, пользователь загадывает число, а программа должна отгадать за меньшое кол-во попыток.

#!/usr/bin/python3
# -*- coding: utf-8 -*-
import numpy as np

count = 0
NUMBER = int(input("введи число которое ты загадал: "))
min_num = 1
max_num = 101

while 1:
    predict = np.random.randint(min_num, max_num)
    count += 1
    if predict == NUMBER: break
    elif predict < NUMBER:
        min_num = predict
        print (f"Угадываемое число меньше {predict} ")
    elif predict > NUMBER:
        max_num = predict
        print (f"Угадываемое число больше {predict} ")

print (f"Вы угадали число {NUMBER} за {count} попыток.")

Это простой алгоритм поиска (бинарный поиск). Мы урезаем область поиска после каждой попытки, в зависимости о того, больше или меньше число.

→ Ссылка
Автор решения: Влад Дутчак

Алгоритм бинарного поиска как по мне здесь кстати:

import numpy as np

count = 0
number = np.random.randint(1, 101)
print("Загадано число от 1 до 100")
min = 0
max = 100
while True:
    predict = int(input())
    count += 1
    if number == predict:
        break
    elif number > predict:
        min = predict
        print(f"Угадываемое число больше {predict}")
        print(f'Алгоритм бинарного поиска рекомендует вам число:{round((max + min) / 2)}')
    elif number < predict:
        max = predict
        print(f"Угадываемое число меньше {predict}")
        print(f'Алгоритм бинарного поиска рекомендует вам число:{round((max+min)/2)}')


print(f"Вы угадали число {number} за {count} попыток.")

Или автоматизированная версия:

import numpy as np

count = 0
number = np.random.randint(1, 101)
print("Загадано число от 1 до 100")
min = 0
max = 100
while True:
    predict = round((min+max)/2)
    #predict = int(input())
    count += 1
    if number == predict:
        break
    elif number > predict:
        min = predict
        print(f"Угадываемое число больше {predict}")
        print(f'Алгоритм бинарного поиска рекомендует вам число:{round((max + min) / 2)}')
    elif number < predict:
        max = predict
        print(f"Угадываемое число меньше {predict}")
        print(f'Алгоритм бинарного поиска рекомендует вам число:{round((max+min)/2)}')


print(f"Вы угадали число {number} за {count} попыток.")

В среднем выходит 6-7 попыток

→ Ссылка
Автор решения: Master's Time

Есть бинарный поиск у которой в худшем случае найдет цифру за 7 попыток. Для использования к массивам массив должен быть отсортирован. Но этот код для чисел. Код такой:

import random
value = random.randint(1,100)# это загадаемое компьютером число
yourvalue = 0 # это число который компьютер должен угадать
low = 1
high = 100
score = 0
while True:
    score += 1
    if yourvalue == value:
        break
    elif yourvalue <= value:
        low = low + high - high / 2 
    else:
        high = high - 1 - high / 2



print(yourvalue + ' найден число и за ' + score ' попыток!!!')
→ Ссылка