Før tenke på hvordan å implementere dette i python (eller hvilket som helst språk) kan se på pseudokode, som ser ut som en ganske god plan for å løse problemet.
Jeg vil gjette at en ting du kan bli sittende fast på er måten pseudo refererer variabler , som highog low. Den måten å forstå variabler er å vurdere dem spilleautomater at verdier kan lagres. Til enhver tid, har en variabel viss verdi, for eksempel antall 5, eller en referanse til en åpen fil. At verdien kan bli innkalt når som helst ved å bruke sitt navn, eller det kan gis en ny verdi ved å tildele til den, og den gamle verdien vil bli glemt med den nye verdien tar sin plass.
Den pseudo refererer tre variabler, high, lowog tries. Den forteller deg også hva deres opprinnelige verdier skal være. Etter at den andre linjen er utført, blir disse verdiene satt til 1000, 1 og 1, respektivt, men de tar på nye verdier etter hvert som programmet skrider frem.
Et annet trekk ved den pseudokode er en betinget løkke, og et tilfelle analyse av brukerinndata. Din oversettelse av pseudo loop er feil. I ditt tilfelle, har du laget en ny variabel, iog har instruert programmet til å kjøre loopen kroppen med hver verdi av i mellom 1 og 1000. Selvfølgelig er dette ikke har en hel masse å gjøre med pseudokode.
I stedet hva du ønsker å gjøre er å sløyfe evig, inntil noen tilstand (som endres i loopen kroppen) blir falskt. I python, det whilegjør uttalelsen dette. Hvis du er kjent med en ifuttalelse, whileser det samme, men etter at kroppen er ferdig, er tilstanden vurderes på nytt og kroppen er henrettet på nytt hvis det er fortsatt sant.
Til slutt, når det gjelder analyse i kroppen av løkken som sammenligner krever noe til forventede verdier. Selv om noen andre språk har en rekke måter å uttrykke dette i python vi bare har if- elif- elseklausuler.
Utenfor transpseudokode for å jobbe kode, er det sannsynligvis nyttig å forstå hva programmet faktisk gjør. Nøkkelen her er på linje 4, der programmet gjetter gjennomsnittet av to verdier. etter at programmet virker på hvor godt gjetning utdrevet.
I det første løp gjennom løkken, og highinneholdende 1000 og lowinneholdende 1, er den gjennomsnittlige 500 (faktisk gjennomsnitts er 500,5, men siden vi i snitt hele tall, python tipsene som vi ønsker resultatet av divisjonen også være et heltall ). Tydeligvis at gjetning bare har en 0,1% sjanse for å være rett, men hvis det er feil, blir brukeren forventes å fortelle oss om det var for høyt eller for lavt. Uansett, det svaret helt eliminerer 50% av de mulige gjetninger.
Hvis, for eksempel, ble brukeren tenker på et lavt tall, så når programmet gjettet 500, brukeren ville fortelle programmet at 500 var for høy, og så programmet ville ikke trenger å gjette at tallet var i utvalg av 501 gjennom 1000. det kan spare datamaskinen mye arbeid.
For å sette denne informasjonen til å bruke, holder programmet styr på omfanget av mulige verdier i mål nummer kan være. Når antallet gjettet er for høy, justerer programmet dens øvre grense nedad, like under gjetning, og hvis gjetning var for lavt, justerer programmet sin nedre grense oppover til like over gjetning.
Når programmet gjetter igjen, gjetning rett i midten av mulig spekter, kutte området i to igjen. Antallet mulige gjetninger gikk fra den opprinnelige 1000-500 i en gjetning, til 250 i to gjetninger. Hvis programmet har forferdelig flaks, og kan ikke få det to (som faktisk er ganske sannsynlig), så av den tredje, den har bare 125 numre igjen å bekymre seg for. Etter den fjerde gjetning, bare 62 tall er fortsatt innen rekkevidde. Dette fortsetter, og etter åtte gjetninger, fortsatt bare tre tall, og programmet prøver det midterste tallet for sin niende gjetning. Hvis det viser seg å være feil, er bare ett tall igjen, og programmet gjetter det!
Denne teknikken for å splitte et utvalg i to og deretter fortsetter til nærmere halvparten er kalt Halverings og vises i et bredt spekter emner av interesse for informatikk.
Hva med litt CODE! Siden jeg ikke ønsker å frata deg av læringsprosessen, vil jeg bare gi deg noen utdrag som kan hjelpe deg med. python er et språk designet for interaktiv utforskning, så fyre opp tolk og gi dette en sjanse. Jeg skal legge ut eksempler med instruksjonene som vises, ikke egentlig skrive det.
Her er et eksempel med whileklausul:
>>> x = 1000
>>> while x > 1:
... x = x/2
... print x
...
500
250
125
62
31
15
7
3
1
>>> x
1
Får konsollen input fra brukeren bør gjøres gjennom raw_input()funksjon. Den returnerer bare hva brukeren typer. Dette er litt vanskeligere å vise. For å forenkle ting, etter hver linje av python som krever inndata, vil jeg skrive "Hello World!" (uten anførselstegn)
>>> raw_input()
Hello World!
'Hello World!'
>>> y = raw_input()
Hello World!
>>> print y
Hello World!
>>>
Hva om noen sammenslåing av konsepter!
>>> myvar = ''
>>> while myvar != 'exit':
... myvar = raw_input()
... if myvar == 'apples':
... print "I like apples"
... elif myvar == 'bananas':
... print "I don't like bananas"
... else:
... print "I've never eaten", myvar
...
apples
I like apples
mangoes
I've never eaten mangoes
bananas
I don't like bananas
exit
I've never eaten exit
>>>
Oops. litt av en feil der. Se om du kan fikse det!