мои извинения, если я задаю глупый вопрос, но я немного смущен ... Я делал курс MIT6.00X в edx, и одно из упражнений - использовать алгоритм поиска пополам, чтобы найти секретное число. Это заняло у меня около 4 часов, чтобы закончить упражнение (Да я нуб), но мне удалось построить этот код:Является ли мой алгоритм поиска бисекции настолько неправильным?
numGuesses = 0
lo = 0
hi = 100
mid = (hi + lo)/2
num = raw_input("Input a number between 0 and 100 ")
if num > 0 or num < 100:
while mid != num:
print ("Is your number " + str(mid) + "?")
userinput = raw_input("Enter 'h' to indicate the guess is too high. Enter 'l' to indicate the guess is too low. Enter 'c' to indicate I guessed correctly. ")
if userinput == 'h':
hi = mid
mid = (hi + lo)/2
elif userinput == 'l':
lo = mid
mid = (hi + lo)/2
elif userinput == 'c':
print ("Game over. Your secret number was:" + str(mid))
break
else:
print ("Sorry, I did not understand your input.")
else:
print ("You should use a number between 0 and 100")
Во время тестирования его вручную она работает просто отлично, хотя в упражнении есть несколько вопросов, которые не проходят в основном потому, что сайт вместо того, чтобы угадывать, если он выше или ниже, иногда он нажимает неправильный ключ, и я не выполняю упражнение.
После попытки изменить код я не смог закончить курс, поэтому я видел ответ, и это было, если я ошибался, я должен был использовать логическое значение для того, чтобы код продолжался до тех пор, пока он не найдет правильный номер.
Мой вопрос: Является ли мой код неправильным? Также есть ли какая-либо ошибка, которую я сделал, что мешает сайту нажимать правильное письмо? Просто любопытно
Большое спасибо
Я смущен. Что такое «сайт», который «нажимает [неверный ключ]»? Является ли пользователь этого сценария роботом, который вы также создали с именем «Сайт», и вы хотите знать, как заставить ваш скрипт работать с ошибками в вашем пользовательском роботе? (Если это так, ответ зависит от того, сколько лазеров вы встроили в робота.) – abarnert
Оператор if может принимать значения больше 100 и меньше 0. Вы говорите «если val> 0 или val <100» .. если val = 300, то он больше нуля, но не менее 100 ... так как у вас есть или нет ... он все равно будет оценивать true. Вместо этого используйте ИО. –
Кроме того, если вы пытаетесь обеспечить лучшую обработку ошибок для пользователей, которые вводят что-то невозможное (например, вы знаете hi == mid == low == 49, и вы спрашиваете 49, и они говорят «h»), вы можете либо проверьте, что в коде 'if'/elif' /' elif', и отклоните невозможные ответы, или проверьте в верхней части цикла while и выйдите, как только вы попадете в невозможную ситуацию. – abarnert