Leikkaushakupeli

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 ja low, sinun ei pitäisi koodata niiden arvoja aukkoon print.
  • Käytä // -toimintoa varmistaaksesi, että saat kokonaislukujakauman.
  • Voit kirjoittaa guess = (low + high) // 2 vain kerran, jos sijoitat sen ensimmäiseksi riviksi while -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 avulla str 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.

  1. Päästä eroon guessing -lipusta ja sinulla on vain ääretön silmukka, jossa on tauko. lausunto.

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

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *