Нужно улучшить код для учебного проекта.Алгоритм должен угадывать число за меньшее количество попыток
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 ' попыток!!!')