Ik “begin Python te leren en probeer dit zoekspel in twee delen te optimaliseren.
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))
Antwoord
Sommige dingen zouden volgens mij je code verbeteren, wat heel correct is:
- Met variabelen voor
high
enlow
, zou je hun waarden niet hard moeten coderen in de openingprint
. - U moet
//
gebruiken om ervoor te zorgen dat u een deling met gehele getallen krijgt. - U kunt slechts één keer, als je het als eerste regel binnen de
while
lus plaatst. - Bij het controleren op
pointer
, misschien wil je het eerst naar kleine letters converteren, om er zeker van te zijn dat zowelh
alsH
begrepen worden. - Zorg ervoor dat uw code overeenkomt met PEP8 voor zaken als maximum lin e lengte.
- Door de
format
-methode vanstr
te gebruiken, kun je duidelijker maken wat je afdrukt.
Alles bij elkaar:
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))
Antwoord
Naast Jaimes punten.
-
Verwijder de
guessing
vlag, en maak gewoon een oneindige lus met een pauze uitspraak. -
pointer
is echt een rare naam voor die variabele, vooral omdat het iets anders betekent in andere programmeertalen.
Antwoord
Het antwoord van Jamie aanvullen met een opmerking:
Wanneer je typ "c"
, zelfs als het nummer niet het nummer is waar je aan denkt, print altijd dit deel van de code print("Game over. Your secret number was {0}."
Om dit te voorkomen, moet u dus ook (str(numbers) == str(guess))
testen op de tak van (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
Reacties
- Het punt van dit raadspel is dat de gebruiker nooit het werkelijke getal invoert, aangezien dat een geheim .
Antwoord
Naast de andere antwoorden: wanneer ik het getal 100 kies als mijn geheim , zal de code een eindeloze lus tegenkomen en me herhaaldelijk vragen hoe het zich verhoudt tot 99. U kunt het bereik verder beperken nadat u een antwoord van de gebruiker.