Форум сайта python.su
Выдаёт
загадал 39
предполагаю 50
range(0, 50)
перелёт
проверяю в диапазоне range(0, 50)
предполагаю 24
range(24, 50)
недолёт
проверяю в диапазоне range(24, 50)
предполагаю 36
range(50, 50)
Последний выведенный диапазон должен быть (36,50), а не (50,50). Подскажите пожалуйста где я ошибся.
import random as rnd zag = rnd.randint(0,100) print('загадал '+str(zag)) shot=50 diap=range(100) for i in range(10): if shot > zag: print('предполагаю ' + str(shot)) diap=diap[:shot] print(diap) shot=round(max(diap)/2) print('перелёт ''\nпроверяю в диапазоне ' + str(diap)) if shot < zag: print('предполагаю ' + str(shot)) diap=diap[shot:] print(diap) shot=round(min(diap)+((max(diap)-min(diap))/2)) print('недолёт''\nпроверяю в диапазоне ' + str(diap)) if shot==zag: print('предполагаю '+ str(shot) + '\nпопадание ''\nпобеда') break
Отредактировано Aturo (Окт. 28, 2017 12:24:34)
Офлайн
эмм. Зачем ты заставляешь компьютер угадывать число если он его и так знает?
zag = rnd.randint(0,100) print(str(zag), "Уря! Я такой умний комп что смог угадать число которое и так знаю!" )
Отредактировано python335 (Окт. 28, 2017 13:58:17)
Офлайн
python335Очевидно же что это не моя прихоть. Преподаватель по информатике дал задание написать программу, которая загадывает число в диапазоне от 0 до 100 и потом сама же его угадывает. Код должен быть именно такой упоротый, другой он не примет. В данном случае я не могу понять почему блок
эмм. Зачем ты заставляешь компьютер угадывать число если он его и так знает?
print('предполагаю ' + str(shot)) diap=diap[shot:] print(diap) shot=round(min(diap)+((max(diap)-min(diap))/2))
Отредактировано Aturo (Окт. 28, 2017 14:17:25)
Офлайн
зачем создавать список и потом путаться в срезах? проще изменять начало и конец диапазона поиска
from random import randint zag = randint(0,100) print('загадал '+str(zag)) start , end = 0,100 diap = randint(start,end) while zag != diap: print('предполагаю ' + str(diap)) if diap > zag: end = diap else: start = diap diap=randint(start,end) print('предполагаю '+ str(diap) + '\nпопадание ''\nпобеда')
Отредактировано marvellik (Окт. 28, 2017 19:18:57)
Офлайн
marvellikТакое вот наркоманское задание. Вот попытался графически изобразить как должно работать.
зачем создавать список и потом путаться в срезах?
Отредактировано Aturo (Окт. 28, 2017 19:38:35)
Офлайн
zag = randint(0,100) это уже подразумевает прямую- диапазон поиска а diap = randint(start,end) в цикле это и есть поиск в срезах диапазона. вам же явно не указано создать список от 0 до 100 и искать по срезам
Офлайн
diap = randint(start,end) использует случайные значения, насколько я понял. Мне же нужно взять отрезок длинной 100 и половинить до тех пор, пока не найду ответ. А списки взял т.к. ничего другого пока не знаю+мы их только прошли и требуется именно с их помощью реализовать. Я только поступил в универ и сразу требуют знание языка, а я в принципе с программированием впервые сталкиваюсь.
Офлайн
теперь понятно
Двоичный (бинарный) поиск элемента в массиве
Офлайн
Aturoнагляднее так
Такое вот наркоманское задание. Вот попытался графически изобразить как должно работать.
Офлайн
Таки со всем разобрался. Срезало неверно т.к. режет от начала по кол-ву членов, а не по числу. Проще говоря, если у меня список с диапазоном (50,100) и я хочу получить (75,100), то срезать нужно было не
[75:]
[25:]
from random import randint zag = randint(0,100) print('загадал '+str(zag)) shot=50 i=0 sum1=0 de=50 while i==0: if shot<zag: print('проверяю '+str(shot)) shot=round(shot+de) de/=2 sum1+=1 if shot>zag: print('проверяю '+str(shot)) shot=round(shot-de) de/=2 sum1+=1 if shot==zag: print('проверяю '+str(shot)+'\nзагадано число '+str(shot)+'\nнайдено с '+str(sum1)+' попытки') i+=1
Отредактировано Aturo (Окт. 30, 2017 14:23:20)
Офлайн