Zoekspel in twee delen

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 en low, zou je hun waarden niet hard moeten coderen in de opening print.
  • 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 zowel h als H begrepen worden.
  • Zorg ervoor dat uw code overeenkomt met PEP8 voor zaken als maximum lin e lengte.
  • Door de format -methode van str 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.

  1. Verwijder de guessing vlag, en maak gewoon een oneindige lus met een pauze uitspraak.

  2. 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.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *