Прежде чем думать о том, как реализовать это в Python (или любом другом языке) позволяет взглянуть на псевдокоде, который выглядит как довольно хороший план, чтобы решить эту проблему.
Я бы предположил , что одна вещь , которую вы могли бы застрять на путь псевдокод ссылается на переменные , как highи low. Способ понять переменные, чтобы считать их слоты, значения могут быть сохранены. В любой момент времени переменные имеют некоторое значение, как числа 5, или ссылку на открытый файл. Это значение может быть вызвано в любое время, используя его имя, или оно может быть дано новое значение, назначая его, и старое значение будет забыто с новым значением , принимая свое место.
Псевдокод ссылается на три переменные high, lowи tries. Он также сообщает вам , что их начальные значения должны быть. После того , как вторая линия выполнена, эти значения установлены в 1000, 1 и 1, соответственно, но они принимают новые значения по мере продвижения программы.
Еще одна особенность псевдокод является условной цикл, и случай , анализ пользовательского ввода. Ваш перевод петли псевдокода является неправильным. В вашем случае, вы создали новую переменный, iи проинструктировали программу для запуска тела цикла с каждым значением I от 1 до 1000. Очевидно , что это не имеет целые много общего с псевдокодом.
Вместо того, что вы хотите сделать , это бесконечный цикл, пока некоторое условие (которое изменяется в теле цикла) не станет ложным. В питоне, то whileоператор делает это. Если вы знакомы с ifутверждением, whileвыглядит так же, но после того , как тело будет сделано, то условие переоценено и тело выполняются снова , если он по - прежнему верно.
Наконец, анализ случае в теле цикла требует сравнения то ожидаемые значения. Хотя некоторые другие языки имеют ряд способов выражения этого, в питоне мы только if- elif- elseпункты.
Вне преобразования псевдокода в рабочий код, это, вероятно, полезно понять, что программа на самом деле делает. Ключевым моментом здесь является в строке 4, где программа угадает среднее из двух значений. после того, что программа действует как хорошо догадка сработала.
При первом прохождении через петлю, с , highсодержащие 1000 и lowсодержащие 1, в среднем составляет 500 ( на самом деле в среднем составляет 500,5, но так как мы в среднем целых чисел, Python предполагает , что мы хотим , чтобы результат деления также быть целым числом ). Очевидно , что догадка имеет только 0,1% шанс быть правильным, но если это не так, то пользователь должен сообщить нам , если она была слишком высокой или слишком низкой. В любом случае, этот ответ полностью устраняет 50% возможных догадок.
Если, например, пользователь думает о низком числе, тогда, когда программа догадалась 500, пользователь должен сообщить программе, что 500 было слишком высокими, и тогда программа не будет когда-либо предположить, что число было в диапазон 501 через 1000. Это может спасти компьютеру много работы.
Для того, чтобы поместить эту информацию в использовании, программа отслеживает диапазон возможных значений может быть число цели. Когда число угадали слишком высока, программа корректирует ее верхнюю границу вниз, чуть ниже догадка, и если догадка была слишком низкой, программа регулирует ее нижнюю границу вверх чуть выше предположение.
Когда программа угадывает снова, догадка прямо в середине возможного диапазона, снова резка диапазон пополам. Число возможных догадок пошло от оригинальных 1000 до 500 в одном догадке, 250 в двух догадках. Если программа имеет ужасную судьбу, и не может получить его два (которые на самом деле очень вероятно), то по третьей, она имеет только 125 номера осталось беспокоиться. После четвертого догадка, только 62 числа остаются в диапазоне. Это продолжается, и после восьми догадок, только 3 номера остался, а программа пытается средним числом для его девятой догадки. Если это оказывается не так, только один номер слева, и программа угадывает его!
Этот метод разделения диапазона пополам , а затем продолжает более близкую половину называется бисекция и появляется в широком диапазоне тем , представляющий интереса для компьютерной науки.
Как насчет CODE! Так как я не хочу, чтобы лишить вас опыт обучения, я просто дам вам некоторые фрагменты, которые могут помочь вам вместе. питон является языком, разработанным для интерактивного исследования, поэтому запустите интерпретатор и дать этому выстрел. Я буду отправлять примеры с подсказками показанных, не на самом деле типа этого.
Вот пример , используя whileпункт:
>>> x = 1000
>>> while x > 1:
... x = x/2
... print x
...
500
250
125
62
31
15
7
3
1
>>> x
1
Получение консоли ввода от пользователя должно быть сделано с помощью raw_input()функции. Она просто возвращает независимо от типа пользователя. Это немного сложнее , чтобы показать. Чтобы упростить вещи, после каждой строки питона , который требует ввода, я типа «Hello World!» (без кавычек)
>>> raw_input()
Hello World!
'Hello World!'
>>> y = raw_input()
Hello World!
>>> print y
Hello World!
>>>
Как насчет сочетания понятий!
>>> myvar = ''
>>> while myvar != 'exit':
... myvar = raw_input()
... if myvar == 'apples':
... print "I like apples"
... elif myvar == 'bananas':
... print "I don't like bananas"
... else:
... print "I've never eaten", myvar
...
apples
I like apples
mangoes
I've never eaten mangoes
bananas
I don't like bananas
exit
I've never eaten exit
>>>
К сожалению. немного ошибка там. Смотрите, если вы можете это исправить!