Aloitan Pythonin oppimisen ja yritän optimoida tätä leikkaushakupeliä.
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))
Vastaa
Joitakin asioita luulen parantavan koodiasi, mikä on oikein:
- Jos sinulla on muuttujia
high
jalow
, sinun ei pitäisi koodata niiden arvoja aukkoonprint
. - Käytä
//
-toimintoa varmistaaksesi, että saat kokonaislukujakauman. - Voit kirjoittaa
guess = (low + high) // 2
vain kerran, jos sijoitat sen ensimmäiseksi riviksiwhile
-silmukan sisään. - Kun tarkistetaan
pointer
, sinun kannattaa muuntaa se ensin pieniksi kirjaimiksi varmistaaksesi, että sekäh
ettäH
ymmärretään. - Tee koodistasi PEP8 mukainen esimerkiksi maksimilinjan suhteen e pituus.
-
format
-menetelmän avullastr
voidaan tehdä selvemmäksi tulostamasi sisältö.
Kaiken yhdistäminen:
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))
vastaus
Jaimen pisteiden lisäksi.
-
Päästä eroon
guessing
-lipusta ja sinulla on vain ääretön silmukka, jossa on tauko. lausunto. -
pointer
on tälle muuttujalle todella outo nimi, varsinkin kun se tarkoittaa jotain muuta muilla ohjelmointikielillä.
Vastaus
Viimeistelemällä Jamien antaman vastauksen huomautuksella:
Kun kirjoita "c"
, vaikka numero ei olekaan ajatellut, tulostaa aina tämän koodin osan print("Game over. Your secret number was {0}."
Joten tämän välttämiseksi sinun on testattava myös (str(numbers) == str(guess))
(response == "c")
-haarassa:
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
Kommentit
- Tämän arvauspelin tarkoitus on, että käyttäjä ei koskaan anna todellista lukua, koska se on salaisuus .
Vastaa
Muiden vastausten lisäksi: kun valitsen salaisuudeksi numeron 100 , koodi juoksee loputtomiin silmukoihin, kysyen toistuvasti, miten se vertaa 99: een. Voit rajoittaa aluetta enemmän saatuasi käyttäjän vastaus.