2015-04-12 8 views
-1

Я знаю, что я повторно разместил вопрос, похожий, но я изменил код, и у меня возникли проблемы с угадыванием высокого или низкого уровня. Когда я получаю вывод, он уходит после третьего предположения и дает большее число или даже меньшее число, чем раньше. мой номер 8, и он угадает 12, и я говорю его Высокий и дает 25 в качестве следующего предположения. Как я могу это исправить? Как подсчитать количество догадок, потому что это не считается?Угадайте игру для comupter, фиксируя высокие или низкие номера

from random import randint 

def computer_guess(num): 

    low = 1 
    high = 100 
    newGuess = 0 
    guess = randint(1,100) 
    while guess != num: 
     newGuess = randint(low,high) 
     print("The computer takes a guess...", newGuess) 
     ans = input("Is the number L for low, H for High, or C for correct? ") 
     if (ans == "H" or ans == "h"): 
      if(high/2 > num): 
       high = high/2 
      else: 
       high = high-1    


     elif (ans == "L" or ans == "l"): 
      if(low*2 < num): 
       low = low*2 
      else: 
       low = low +1 
     elif (ans == "C" or ans == "c"): 
      ans = "Correct" 
      guess = num; 
      print(str(high) + "|" + str(low) + "|" + str(newGuess)) 


    print("The computer guessed", guess, "and it was correct!") 
    print(" I computron won the battle") 


def main(): 

    num = 0 
    print("I am computron, I accept your guessing game!") 
    num = int(input("\n\nChoose a number for the computer to guess: ")) 
    if num < 1 or num > 100: 
     print("Must be in range [1, 100]") 
    else: 
     computer_guess(num) 

    print("guesses count: " + str(num)) 


    play_again = input("would you like to play again(yes or no)? ") 
    if play_again == "yes" or play_again == "y" or play_again == "Y": 
     main() 
    if play_again == "no" or play_again == "n" or play_again == "N": 
     exit() 



if __name__ == '__main__': 
main() 

ответ

0

Что происходит, что ваш первоначальный высокой переменной устанавливается равным 100. После догадке 12 (используя ваш пример), он делит его на 2. новый максимум 50. Поэтому, 25 по-прежнему Допустим. То, что вы должны сделать, это сбросить новую высокие переменный его догадку:

if(ans == "H" or ans == "h"): 
    high = newGuess 

Это гарантирует, что следующая догадка падает ниже, чем его предыдущее предположение. Аналогичная вещь должна быть сделана с низкой переменной, когда она догадается низкой:

elif(ans == "L" or ans == "l"): 
    low = newGuess 
+0

спасибо! Он исправил проблему. Что я могу сделать для счета? – get2thechopper

+0

Установите счетчик. Объявите переменную int перед циклом while и установите ее в 0. После этого каждый цикл в начале добавит 1 к переменной, выполнив (например, если переменная i): i + = 1. Вы можете также функция возвращает значение подсчета, и вы можете печатать в main() или просто распечатывать ее после выигрыша в функции. – MLavrentyev

+0

Хорошо, спасибо за руководство и сделаем! – get2thechopper

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