2013-02-16 2 views
0

мои извинения, если я задаю глупый вопрос, но я немного смущен ... Я делал курс 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") 

Во время тестирования его вручную она работает просто отлично, хотя в упражнении есть несколько вопросов, которые не проходят в основном потому, что сайт вместо того, чтобы угадывать, если он выше или ниже, иногда он нажимает неправильный ключ, и я не выполняю упражнение.

После попытки изменить код я не смог закончить курс, поэтому я видел ответ, и это было, если я ошибался, я должен был использовать логическое значение для того, чтобы код продолжался до тех пор, пока он не найдет правильный номер.

Мой вопрос: Является ли мой код неправильным? Также есть ли какая-либо ошибка, которую я сделал, что мешает сайту нажимать правильное письмо? Просто любопытно

Большое спасибо

+0

Я смущен. Что такое «сайт», который «нажимает [неверный ключ]»? Является ли пользователь этого сценария роботом, который вы также создали с именем «Сайт», и вы хотите знать, как заставить ваш скрипт работать с ошибками в вашем пользовательском роботе? (Если это так, ответ зависит от того, сколько лазеров вы встроили в робота.) – abarnert

+2

Оператор if может принимать значения больше 100 и меньше 0. Вы говорите «если val> 0 или val <100» .. если val = 300, то он больше нуля, но не менее 100 ... так как у вас есть или нет ... он все равно будет оценивать true. Вместо этого используйте ИО. –

+0

Кроме того, если вы пытаетесь обеспечить лучшую обработку ошибок для пользователей, которые вводят что-то невозможное (например, вы знаете hi == mid == low == 49, и вы спрашиваете 49, и они говорят «h»), вы можете либо проверьте, что в коде 'if'/elif' /' elif', и отклоните невозможные ответы, или проверьте в верхней части цикла while и выйдите, как только вы попадете в невозможную ситуацию. – abarnert

ответ

-1
lo = 0 
hi = 100 
mid = (hi + lo)/2 
print 'Please think of a number between 0 and 100!' 
while True: 
    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.") 
+0

Пожалуйста, попытайтесь объяснить свой ответ! – Hoppo

0

это один из пальца упражнения MITx, что я просто наконец-то решена сегодня. вот мой метод:

print('Please think of an integers BETWEEN 0 and 100!') 
#Define variable 
x=100 
low=0 
high=x 
ans=0 
#Guessing code part 
while ans<=x: 
    print'Is your secret number:', str((low+high)/2), '?' 
    s=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 s!='h' and s!='l' and s!='c': 
     print'Sorry I did not understand your input.' 
    elif s=='h': 
     high=(low+high)/2 
    elif s=='l': 
     low=(low+high)/2 
    elif s=='c': 
     print'Game over. Your secret number is:', str((low+high)/2) 
     break 
+0

Могу ли я предложить установить что-то вроде 'middle = (low + high)/2' в верхней части цикла, так что вам не нужно повторять это выражение несколько раз? –

Смежные вопросы