Juego de búsqueda de bisecciones

Estoy empezando a aprender Python y estoy tratando de optimizar este juego de búsqueda de bisecciones.

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)) 

Respuesta

Algunas cosas que creo que mejorarían su código, lo cual es bastante correcto:

  • Si tiene variables para high y low, no debe «codificar sus valores en la apertura print.
  • Debe usar // para asegurarse de obtener la división de enteros.
  • Puede escribir guess = (low + high) // 2 solo una vez, si lo coloca como la primera línea dentro del ciclo while.
  • Al buscar pointer, es posible que desee convertirlo primero a minúsculas, para asegurarse de que se entienden tanto h como H.
  • Haga que su código se ajuste a PEP8 en cosas como el límite máximo e longitud.
  • El uso del format método de str puede dejar más claro lo que está imprimiendo.

Poniéndolo todo junto:

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)) 

Respuesta

Además de los puntos de Jaime.

  1. Deshágase de la bandera guessing y solo tenga un bucle infinito con un descanso declaración.

  2. pointer es un nombre realmente extraño para esa variable, especialmente porque significa algo más en otros lenguajes de programación.

Responder

Completando la respuesta de Jamie, con un comentario:

Cuando escriba "c", incluso si el número no es el que piensa, siempre imprime esta parte del código print("Game over. Your secret number was {0}."

Entonces, para evitar eso, debes probar también (str(numbers) == str(guess)) en la rama 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 

Comentarios

  • El objetivo de este juego de adivinanzas es que el usuario nunca ingresa el número real ya que es un secreto .

Respuesta

Además de las otras respuestas: cuando elijo el número 100 como mi secreto , el código se ejecutará en un bucle sin fin, preguntándome repetidamente cómo se compara con 99. Puede restringir el rango más después de obtener una respuesta del usuario.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *