Forvandle spill pseudokode i python

stemmer
1

Gjøre datamaskinen gjette et tall som brukeren velger mellom 1 og 1000 i ikke mer enn 10 guesses.This oppdrag bruker en algoritme som kalles en binær søk. Etter hver gjetning, kutt algoritmen antall mulige svar for å søke i halvparten. Pseudokode for hele programmet er gitt nedenfor; din oppgave er å gjøre det til en fungerende python program. Programmet skal starte ved å skrive instruksjoner på skjermen, forklarer at brukeren skal velge et tall mellom 1 og 1000, og maskinen vil gjette det ikke mer enn 10 prøver. Det begynner da å gjøre gjetninger, og etter hvert antar det ber brukeren om tilbakemelding. Brukeren bør få beskjed om å gå inn -1 hvis gjetning må være lavere, 0 hvis det var riktig, og en hvis den trenger å være higher.When programmet gjetter riktig, bør det rapportere hvor mange gjetninger var nødvendig. Hvis brukeren angir et ugyldig svar, bør instruksjonene gjentas og brukeren lov til å prøve på nytt.

pseudo

- Print instructions to the user  
-Start with high = 1000, low = 1, and tries = 1 
- While high is greater than low   
  - Guess the average of high and low  
  - Ask the user to respond to the guess  
  - Handle the four possible outcomes:  
    - If the guess was right, print a message that tries guesses were required and quit the program
    - If the guess was too high, set high to one less than the guess that was displayed to the user and increment tries  
    - If the guess was too low, set low to one more than the guess that was displayed to the user and increment tries
    - If the user entered an incorrect value, print out the instructions again
- high and low must be equal, so print out the answer and the value of tries

Jeg trenger litt seriøs hjelp! Jeg forstår ikke noen av disse tingene i det hele tatt! Dette er alt jeg har

def main(x, nums, low, high):
        input(Enter -1 if the guess needs to be lower, 0 if the guess was right, or 1 if the guess needs to be higher: )
    for i in range (1, 1001):

main()

og jeg vet ikke engang om det er riktig!

Publisert på 14/06/2009 klokken 03:28
kilden bruker
På andre språk...                            


7 svar

stemmer
4

Du er tydeligvis veldig nytt for programmering, og jeg antar det er en av grunnene til en forsinket reaksjon fra samfunnet. Det er tøft å bestemme hvor du skal begynne og hvordan å guide deg gjennom hele denne øvelsen.

Så, før du får et godt svar her som inkluderer gjør du forstår hva som skjer der, og veilede deg gjennom å bygge løsningen selv (helst!) Jeg foreslår at du besøker denne siden for å prøve å få en forståelse av selve problemet selv.

http://www.openbookproject.net/pybiblio/gasp/course/4-highlow.html

I mellomtiden, se på alle svarene i denne tråden og holde redigere innlegget ditt, slik at vi vet at du får det.

Svarte 14/06/2009 kl. 03:37
kilden bruker

stemmer
1

Ok, den fine delen om å bruke Python er at det er nesten pseudo uansett.

Nå, la oss tenke på de enkelte trinnene:

  1. Hvordan får du gjennomsnittlig mellom høy og lav?

  2. Hvordan gjør du spør brukeren om answerr er riktig

  3. Hva gjør "hvis" uttalelser se ut i Python, og hvordan ville du skrive pseudo ut som om uttalelser?

Her er en annen hint - du kan kjøre python som tolk og prøve individuelle uttalelser sammen, så, for eksempel, kan du gjøre

high=23
low=7

deretter beregne hva du synes bør være gjennomsnittlig eller midtpunktet mellom dem (hint: 15)

Svarte 14/06/2009 kl. 03:42
kilden bruker

stemmer
11

Jeg forstår ikke noen av disse tingene i det hele tatt!

Det er ganske problematisk, men, greit, la oss gjøre ett skritt om gangen! Din hjemmelekse begynner:

Skriv ut instruksjoner til brukeren

Så du ikke forstår noen av sakene, sier du, så det betyr at du ikke forstår denne delen heller. Vel: "brukeren" er den personen som kjører programmet. "Instruksjoner" er engelske setninger som forteller ham eller henne hva du skal gjøre for å spille spillet, i henhold til følgende sitat fra dette utmerket klar og detaljert oppgave:

Programmet skal starte ved å skrive instruksjoner på skjermen, forklarer at brukeren skal velge et tall mellom 1 og 1000, og maskinen vil gjette det ikke mer enn 10 prøver.

" print" Er en Python instruksjon som sender ut informasjon; for eksempel prøve et program som bare inneholder

print "some information"

for å se hvordan det fungerer. OK, kan du være så snill å redigere ditt svar å vise oss at du har fått dette punktet, slik at vi kan flytte til den neste? Føl deg fri til å kommentere her med flere spørsmål hvis noen ord eller begreper jeg bruker er fortsatt for avansert for deg, og jeg skal prøve å forklare!

Svarte 14/06/2009 kl. 03:43
kilden bruker

stemmer
14

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!

Svarte 14/06/2009 kl. 04:17
kilden bruker

stemmer
0

Her er noen tips for å komme i gang:

Gjennomsnittlig = Verdi + Verdi + verdi [...] / antall verdier; (For eksempel, ((2 + 5 + 3) / (3))

Mange programmeringsspråk bruke annen operatør forrang. Når jeg er programmering, Jeg bruker alltid parentes når jeg er usikker på om operatør forrang. I mitt eksempel ovenfor, hvis du bare hadde 2 + 5 + 3/3, programmet vil gjøre divisjoner før tillegg - så det ville evaulate til 2 + 5 + (3/3), eller 2 + 5 + 1 == 7 .

Hopp over dette for python brukere / * For det andre: de tidligste programmene kan dra nytte av const korrekthet ( her er en god forklaring på hva det er og hvorfor det er ekstremt god praksis). Vennligst les gjennom denne og forstå hvorfor du bør bruke konstanter (eller hva python tilsvarende er). Også se opp "magiske tall", som er et stort område hvor konstantene blir brukt. * /

Google "kan du unnskylde min kjære tante Sally" (MERK: dette bare avtaler med matematiske operatorer, og det meste gjelder for programmeringsspråk, for en mer omfattende studie av operatør forrang, se opp ditt valgte språk dokumentasjon for presedens - også oppmerksom på at de fleste programmer ikke har innebygde strøm operatører, men de fleste standard bibliotekene har pow funksjoner).

Snakker av standard bibliotek: Bli kjent med standard biblioteksfunksjoner (Jeg har aldri brukt Python, jeg vet ikke hvordan det implementerer en SL, men jeg vil bli svært overrasket om et språk som populær ikke har en godt utviklet SL). Hvis du ikke vet hva det er, og boken / opplæringen ikke har det, få en ny. En ressurs som ikke refererer til en standard bibliotek er ikke verdt tiden.

Til slutt: mens dette innlegget kan se ut som jeg vet hva jeg snakker om, jeg er fortsatt i en tidlig fase av læring, akkurat som deg. Et par ting du kanskje ønsker å bli vant til tidlig (når jeg hoppet over disse delene, det bremset min lærer mye): Bruk av referanser og pekere (Q for kommentarer: Har Python har pekere?), Forskjellen mellom data i en minneplass og det faktiske minne (ofte ganger, vil plasseringen av verdien i minnet være mer nyttig enn selve verdien, i det minste ved skriving av datastrukturer). Spesielt blir vant til standard bibliotek; ser for kopi, finne, etc. typen funksjoner som er nyttige i streng manipulasjon.

Egentlig rereading din opprinnelige innlegget, jeg var ikke klar over at dette var en lekser typen oppdrag. Hvis du ikke gjør dette for moro skyld, vil du sannsynligvis aldri ta mitt råd. Bare husk at programmering kan være ekstremt morsomt, hvis du ikke gjør det et ork - og ikke bli frustrert når koden ikke kompilere (eller ... tolke), eller du får uventede resultater, osv

Svarte 14/06/2009 kl. 04:24
kilden bruker

stemmer
1

Velkommen til Stack Overflow!

Trikset her er å innse at Python-programmet skal se ut nesten som pseudokode.

Først la oss prøve å forstå nøyaktig hva pseudokode gjør. Hvis vi hadde til å samhandle med programmet beskrevet av pseudo, ville det se omtrent slik ut:

Think of a number between 1 and 1000 and press Enter.
>>> 
Is it 500? Enter -1 if it's lower, 0 if I guessed right, or 1 if it's higher.
>>> 1
Is it 750? Enter -1 if it's lower, 0 if I guessed right, or 1 if it's higher.
>>> -1
Is it 625? Enter -1 if it's lower, 0 if I guessed right, or 1 if it's higher.

etc.

Når vi først tenker på våre tall, kjenner programmet bare at det er mellom 1 og 1000. Det representerer denne kunnskapen ved å sette variabelen 'lav' til en og den variable 'høy' til 1000. Den første gjetning er gjennomsnittet av disse tall, som er 500.

Etter at vi forteller programmet at våre tall er større enn 500, det oppdaterer verdien av 'lav' til 501. Med andre ord programmet da vet at våre tall er mellom 501 og 1000. Det gjetter da gjennomsnittet av 501 og 1000, som er 750. Vi forteller det at våre tall er lavere, slik at programmet oppdaterer verdien av 'høy' til 749 og gjetter gjennomsnittet av 501 og 749 neste, og så videre til den gjetter riktig, eller det har falt mulig rekkevidde ned til et enkelt tall (som betyr sin neste gjetning vil være rett).

Så tilbake til å skrive programmet i Python: Vi i utgangspunktet bare sette pseudo linje for linje. For eksempel vårt program sløyfe bør se ut akkurat som det gjør i pseucode:

while high > low:
  # Guess (high + low) / 2 and ask user to respond
  # Handle user response

Det er ikke behov for en for-løkke som du har i koden din.

Å ta inn kan vi gjøre noe som dette:

guess = (high + low) / 2
response = input('Is it ' + str(guess) + '? Enter -1 if it's lower, 0 if I guessed right, or 1 if it's higher.')

Nå kan brukeren inndata lagres i variabelen 'svar', og vi kan behandle mulighetene med if-setninger som 'hvis reaksjon == -1:' f.eks.

Bare husk å skrive ut instruksjonene og sette 'høy' og 'lav' til sine opprinnelige verdier før vi går i mens loop, og du bør være klar.

Lykke til!

Svarte 14/06/2009 kl. 05:59
kilden bruker

stemmer
2

Samsvarer ikke med psudocode nøyaktig, men det fungerer. lol;)

Jeg vet dette er en ond gammelt innlegg, men dette er det samme oppdraget fikk jeg også. Her er hva jeg endte opp med:

high = 1000
low = 1
print "Pick a number between 1 and 1000."
print "I will guess your number in 10 tries or less."
print "Or at least i'll try to.  ;)"
print "My first guess is 500."
guess = 500
tries = 0
answer = 1
print "Enter 1 if it's higher."
print "Enter -1 if it's lower."
print "Enter 0 if I guessed it!"
print ""
while (answer != 0):
    answer = int(raw_input("Am I close?"))
    if answer == 1:
        tries = tries + 1
        low = guess
        guess = (high + low) / 2
        print "My next guess is:"
        print guess
    elif answer == -1:
        tries = tries + 1
        high = guess
        guess = (high + low) / 2
        print "My next guess is:"
        print guess
    elif answer == 0:
        tries = tries + 1
        print "Your number is:"
        print guess
        print "Yay! I got it! Number of guesses:"
        print tries
Svarte 25/09/2010 kl. 19:02
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more