Î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
șilow
, nu ar trebui să le codificați valorile în deschidereaprint
. - 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 buclawhile
. - Când verificați
pointer
, poate doriți mai întâi să îl convertiți cu litere mici, pentru a vă asigura că atâth
cât șiH
sunt înțelese. - Configurați codul conform cu PEP8 pentru lucruri precum linia maximă Lungimea e.
- Folosind metoda
format
astr
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.
-
Scăpați de steagul
guessing
și pur și simplu aveți o buclă infinită cu o pauză afirmație. -
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.