Kezdem megtanulni a Pythont, és megpróbálom optimalizálni ezt a felező keresési játékot.
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))
Válasz
Néhány dolog szerintem javítaná a kódodat, ami nagyon helyes:
- Ha a
high
és alow
változók vannak, akkor nem szabad keményen kódolniuk értékeiket aprint
. - Használja a
//
parancsot, hogy megbizonyosodjon róla, hogy egész szám osztást kap. - Írhat
guess = (low + high) // 2
csak egyszer, ha az első sorként awhile
ciklusba helyezi. - A , először konvertálhatja kisbetűvé, hogy megbizonyosodjon a
h
és aH
megértéséről. - Tegye a kódot a PEP8 szabványnak megfelelővé, például a maximális lin e hossza.
- A
format
metódus használatávalstr
egyértelműbbé teheti a nyomtatottakat.
Az összes összerakása:
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))
Válasz
Jaime pontjai mellett.
-
Megszabadulni a
guessing
zászlótól, és csak egy végtelen hurokot kell megszakítani nyilatkozat. -
iv
pointer
egy nagyon furcsa név ennek a változónak, főleg, hogy mást jelent más programozási nyelvekben.
Válasz
A Jamie által adott válasz kiegészítése egy megjegyzéssel:
Amikor írja be a "c"
típust, még akkor is, ha a szám nem az, amire gondol, mindig a print("Game over. Your secret number was {0}."
Ennek elkerülése érdekében a (str(numbers) == str(guess))
-t is tesztelnie kell a (response == "c")
ágon:
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
Megjegyzések
- A találgatás lényege, hogy a felhasználó soha nem írja be a tényleges számot, mivel ez titkos .
Válasz
A többi válasz mellett: amikor a 100-as számot választom titoknak , a kód végtelen ciklusba fog futni, többször megkérdezve, hogy hasonlít a 99-hez. a felhasználó válasza.