Joc de căutare bisectivă

Încep să învăț Python și încerc să optimizez acest joc de căutare bisectivă.

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

Răspuns

Unele lucruri cred că ar îmbunătăți codul dvs., ceea ce este destul de corect:

  • Având variabile pentru high și low, nu ar trebui să le codificați valorile în deschiderea print.
  • Ar trebui să utilizați // pentru a vă asigura că primiți divizii întregi.
  • Puteți scrie guess = (low + high) // 2 o singură dată, dacă îl plasați ca prima linie în bucla while.
  • Când verificați pointer, poate doriți mai întâi să îl convertiți cu litere mici, pentru a vă asigura că atât h cât și H sunt înțelese.
  • Configurați codul conform cu PEP8 pentru lucruri precum linia maximă Lungimea e.
  • Folosind metoda format a str puteți clarifica ce tipăriți.

Reunind totul:

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

Răspuns

În plus față de punctele lui Jaime.

  1. Scăpați de steagul guessing și pur și simplu aveți o buclă infinită cu o pauză afirmație.

  2. pointer este un nume cu adevărat mai bogat pentru acea variabilă, mai ales că înseamnă altceva în alte limbaje de programare.

Răspuns

Completarea răspunsului dat de Jamie, cu o remarcă:

Când tastați "c", chiar dacă numărul nu este cel la care vă gândiți, tipăriți întotdeauna această parte a codului print("Game over. Your secret number was {0}."

Deci, pentru a evita acest lucru, trebuie să testați și (str(numbers) == str(guess)) pe ramura (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 

Comentarii

  • Scopul acestui joc de ghicit este că utilizatorul nu introduce niciodată numărul real, deoarece acesta este un secret .

Răspuns

Pe lângă celelalte răspunsuri: când aleg numărul 100 ca secret al meu , codul va rula într-o buclă nesfârșită, întrebându-mă în mod repetat cum se compară cu 99. Puteți restrânge mai mult intervalul după ce obțineți un răspuns de la utilizator.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *