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
ylow
, no debe «codificar sus valores en la aperturaprint
. - 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 ciclowhile
. - Al buscar
pointer
, es posible que desee convertirlo primero a minúsculas, para asegurarse de que se entienden tantoh
comoH
. - 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 destr
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.
-
Deshágase de la bandera
guessing
y solo tenga un bucle infinito con un descanso declaración. -
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.