Jogo de pesquisa de bissecção

Estou começando a aprender Python e estou tentando otimizar este jogo de pesquisa de bissecção.

high = 100 low = 0 guess = (high + low)/2 print("Please think of a number between 0 and 100!") guessing = True while guessing: print("Is your secret number " + str(guess) + "?") pointer = 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 pointer == "h": high = guess guess = (low + guess)/2 elif pointer == "l": low = guess guess = (high + guess)/2 elif pointer == "c": guessing = False else: print("Sorry, I did not understand your input.") print("Game over. Your secret number was: " + str(guess)) 

Resposta

Algumas coisas que acho que melhorariam seu código, o que é bastante correto:

  • Tendo variáveis para high e low, você não deve “codificar permanentemente seus valores na abertura print.
  • Você deve usar // para ter certeza de que está obtendo uma divisão inteira.
  • Você pode escrever guess = (low + high) // 2 apenas uma vez, se você colocá-lo como a primeira linha dentro do while loop.
  • Ao verificar pointer, você pode querer primeiro convertê-lo para minúsculas, para se certificar de que ambos h e H foram compreendidos.
  • Faça com que seu código esteja em conformidade com PEP8 em coisas como o lin máximo e comprimento.
  • Usar o método format de str pode deixar mais claro o que você está imprimindo.

Juntando tudo:

high, low = 100, 0 print("Please think of a number between {0} and {1}!".format(low, high)) guessing = True while guessing: guess = (low + high) // 2 print("Is your secret number {0}?".format(guess)) pointer = 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.").lower() if pointer == "h" : high = guess elif pointer == "l" : low = guess elif pointer == "c": guessing = False else: print("Sorry, I did not understand your input.") print("Game over. Your secret number was {0}.".format(guess)) 

Resposta

Além dos pontos de Jaime.

  1. Livre-se do sinalizador guessing e tenha um loop infinito com uma pausa demonstração.

  2. pointer é um nome realmente estranho para essa variável, especialmente porque significa outra coisa em outras linguagens de programação.

Resposta

Completar a resposta dada por Jamie, com uma observação:

Quando você digite "c", mesmo que o número não seja o que você pensa, sempre imprime esta parte do código print("Game over. Your secret number was {0}."

Portanto, para evitar isso, você deve testar também (str(numbers) == str(guess)) no branch de (response == "c"):

high, low = 100, 0 guess = (low + high) // 2 numbers = raw_input("Please think of a number between {0} and {1}!".format(low, high)) guessing = True while guessing: print("Is your secret number {0}?".format(guess)) response = 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.").lower() if response == "h" : high = guess elif response == "l" : low = guess elif (response == "c") and (str(numbers) == str(guess)) : print("Game over. Your secret number was {0}.".format(guess)) break else: print("Sorry, I did not understand your input.") guess = (low + high) // 2 

Comentários

  • O objetivo desse jogo de adivinhação é que o usuário nunca insere o número real, pois é um segredo .

Resposta

Além das outras respostas: quando eu escolho o número 100 como meu segredo , o código entrará em um loop infinito, perguntando repetidamente como ele se compara a 99. Você pode restringir mais o intervalo depois de obter uma resposta do usuário.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *