Bisektionssuchspiel

Ich beginne Python zu lernen und versuche, dieses Bisektionssuchspiel zu optimieren.

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

Antwort

Einige Dinge, von denen ich denke, dass sie Ihren Code verbessern würden, was ganz richtig ist:

  • Wenn Sie Variablen für high und low haben, sollten Sie deren Werte in der Öffnung print.
  • Sie sollten // verwenden, um sicherzustellen, dass Sie eine ganzzahlige Division erhalten.
  • Sie können nur einmal, wenn Sie es als erste Zeile in die while -Schleife einfügen.
  • Wenn Sie nach möchten Sie es möglicherweise zuerst in Kleinbuchstaben konvertieren, um sicherzustellen, dass sowohl h als auch H verstanden werden.
  • Passen Sie Ihren Code an PEP8 für Dinge wie Maximum Lin an Die Länge.
  • Mit der Methode format von str können Sie klarer machen, was Sie drucken.

Alles zusammenfügen:

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

Antwort

Zusätzlich zu Jaimes Punkten.

  1. Entfernen Sie das Flag guessing und haben Sie nur eine Endlosschleife mit einer Unterbrechung Erklärung.

  2. pointer ist ein wirklich seltsamer Name für diese Variable, zumal er in anderen Programmiersprachen etwas anderes bedeutet.

Antwort

Vervollständigen Sie die Antwort von Jamie mit einer Bemerkung:

Wenn Sie Geben Sie "c" ein, auch wenn die Nummer nicht die ist, an die Sie denken, druckt immer diesen Teil des Codes print("Game over. Your secret number was {0}."

Um dies zu vermeiden, müssen Sie auch (str(numbers) == str(guess)) im Zweig von (response == "c") testen:

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 

Kommentare

  • Der Sinn dieses Ratespiels ist, dass der Benutzer niemals die tatsächliche Nummer eingibt, da dies ein Geheimnis ist .

Antwort

Zusätzlich zu den anderen Antworten: Wenn ich die Nummer 100 als mein Geheimnis wähle Der Code läuft in eine Endlosschleife und fragt mich wiederholt, wie er mit 99 verglichen wird. Sie können den Bereich nach dem Erhalt weiter einschränken eine Antwort des Benutzers.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.