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
undlow
haben, sollten Sie deren Werte in der Öffnungprint
. - 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 auchH
verstanden werden. - Passen Sie Ihren Code an PEP8 für Dinge wie Maximum Lin an Die Länge.
- Mit der Methode
format
vonstr
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.
-
Entfernen Sie das Flag
guessing
und haben Sie nur eine Endlosschleife mit einer Unterbrechung Erklärung. -
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.