Transformarea joc de cod pseudo în Python

voturi
1

Asigurați-vă computerul ghici un număr pe care utilizatorul alege între 1 și 1000, în nu mai mult de 10 guesses.This de atribuire utilizează un algoritm numit căutare binară. După fiecare ghici, algoritmul reduce numărul de răspunsuri posibile pentru a căuta în jumătate. Pseudocod pentru programul complet este prezentată mai jos; Sarcina ta este să-l transforme într-un program de lucru Python. Programul ar trebui să înceapă prin imprimarea instrucțiuni pe ecran, explicând că utilizatorul trebuie să alegeți un număr între 1 și 1000 și computerul va ghici în nu mai mult de 10 încercări. Apoi începe să facă presupuneri, iar după fiecare ghici acesta cere utilizatorului pentru feedback-ul. Utilizatorul trebuie instruiți să intre -1 dacă ghici trebuie să fie mai mic, 0 dacă ar avea dreptate, și 1 în cazul în care aceasta trebuie să fie higher.When programul ghiceste corect, ar trebui să raporteze modul în care au fost necesare mai multe presupuneri. În cazul în care utilizatorul introduce un răspuns incorect, instrucțiunile trebuie repetată, iar utilizatorul este permis să încerce din nou.

Pseudo cod

- 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

Am nevoie de ajutor serios! Nu înțeleg lucrurile astea, la toate! Acest lucru este tot ce am

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()

și eu nici măcar nu știu dacă e bine!

Întrebat 14/06/2009 la 04:28
sursa de către utilizator
În alte limbi...                            


7 răspunsuri

voturi
4

Ești, evident, foarte nou pentru programare, și cred că este unul dintre motivele pentru care un răspuns întârziat din partea comunității. Este greu de a decide unde să înceapă și cum să vă ghida prin tot acest exercițiu.

Deci, înainte de a primi un răspuns bun aici, care include a face să înțelegeți ce se întâmplă acolo, și te ghida prin construirea soluției le (în mod ideal!) Aș sugera să accesați această pagină pentru a încerca pentru a obține o înțelegere a problemei în sine.

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

Între timp, uita-te la toate răspunsurile în acest thread și să păstreze editarea postarea astfel încât să știm că o primesc.

Publicat 14/06/2009 la 04:37
sursa de către utilizator

voturi
1

Bine, partea bună despre utilizarea Python este că este aproape pseudocod oricum.

Acum, să ne gândim la etapele:

  1. Cum se obține media, între mare și mică?

  2. Cum se cere utilizatorului dacă answerr este corectă

  3. Ce „dacă“ declarații arata ca în Python, și cum ați scrie pseudocod ca în cazul în care declarațiile?

Iată un alt indiciu - puteți rula Python ca interpret și să încerce declarații individuale de-a lungul, astfel încât, de exemplu, ai putea face

high=23
low=7

apoi calcula ce credeți că ar trebui să fie media sau punctul de mijloc între ele (indiciu: 15)

Publicat 14/06/2009 la 04:42
sursa de către utilizator

voturi
11

Nu înțeleg lucrurile astea, la toate!

Asta e destul de problematică, dar, bine, să facem un pas la un moment dat! Tema dvs. începe temele:

Print instrucțiuni pentru utilizator

Așa că nu înțeleg nici de lucruri, vă spun, astfel că înseamnă că nu înțeleg această parte, fie. Ei bine: „utilizatorul“ este persoana care execută programul. „Instrucțiunile“ sunt propoziții în engleză care el sau spune-i ce să facă pentru a juca jocul, ca pe următorul citat din această atribuire excelent clară și detaliată:

Programul ar trebui să înceapă prin imprimarea instrucțiuni pe ecran, explicând că utilizatorul trebuie să alegeți un număr între 1 și 1000 și computerul va ghici în nu mai mult de 10 încercări.

print“ Este o instrucțiune Python care emite informații; de exemplu, încercați un program care conține numai

print "some information"

pentru a vedea cum funcționează. OK, poate vă modificați răspunsul pentru a ne arăta că ai ajuns la acest punct, astfel încât să putem trece la următorul? Simțiți-vă liber să comenteze aici cu întrebări suplimentare, dacă orice cuvinte sau concepte Utilizez sunt încă prea avansat pentru tine, și voi încerca să clarifice!

Publicat 14/06/2009 la 04:43
sursa de către utilizator

voturi
14

Înainte de gândire despre cum să pună în aplicare acest lucru în Python (sau orice limbă) vă permite uita-te la pseudocod, care arată ca un plan destul de bun pentru a rezolva problema.

Mi - ar ghici ca un lucru s-ar putea fi obtinerea blocat pe este modul în care face referire la pseudocod variabile , cum ar fi highși low. Modul de a înțelege variabile este de a le considera sloturi că valorile pot fi stocate. La un moment dat, o variabilă are o anumită valoare, cum ar fi numărul 5, sau o trimitere la un fișier deschis. Această valoare poate fi convocată în orice moment , folosind numele său, sau poate fi dat o nouă valoare prin atribuirea acestuia, iar vechea valoare va fi uitat cu noua valoare a lua locul.

Pseudocodul face referire la trei variabile, high, lowși tries. De asemenea, vă spune ce ar trebui să fie valorile lor inițiale. După a doua linie a executat, aceste valori sunt setate la 1000, 1 și 1, respectiv, dar ele iau valori noi pe măsură ce programul avansează.

O altă caracteristică a pseudocod este o buclă condiționată, precum și o analiză de caz introduse de utilizator. Traducerea dvs. a buclei pseudocod este incorectă. În cazul dumneavoastră, ați creat o nouă variabilă, iși - au instruit programul pentru a rula corpul buclei cu fiecare valoare a lui i între 1 și 1000. Evident , acest lucru nu are o mulțime de a face cu pseudocod.

În schimb ceea ce vrei să faci este bucla pentru totdeauna, până la o anumită stare (care se schimbă în corpul buclei) devine falsă. În piton, whiledeclarația face acest lucru. Dacă sunteți familiarizat cu o ifdeclarație, whilearată la fel, dar după ce corpul se face, condiția este reevaluată , iar corpul este executat din nou , dacă este încă adevărat.

În cele din urmă, analiza de caz în corpul buclei necesită compararea ceva de așteptat valori. Deși unele alte limbi au un număr de modalități de a exprima acest lucru, în Python avem doar if- elif- elseclauze.


In afara de transformare a pseudocod codului de lucru, este, probabil, util pentru a înțelege ceea ce programul este, de fapt face. Cheia aici este pe linia 4, în cazul în care programul ghicește media a două valori. după care programul acționează asupra cât de bine ghici lucrat.

În prima rulare prin bucla, cu care highconține 1000 și lowconținând 1, media este de 500 ( de fapt , media este de 500.5, dar din moment ce suntem o medie de numere întregi, Ghiciri python pe care vrem rezultatul diviziunii să fie , de asemenea , un număr întreg ). Evident că ghici are doar o șansă de 0,1% de a fi drept, dar dacă este greșit, utilizatorul este de așteptat să ne spună dacă era prea mare sau prea mică. Oricum, acest răspuns elimina complet de 50% din posibile presupuneri.

În cazul în care, de exemplu, utilizatorul se gândea la un număr redus, atunci când programul de ghicit 500, utilizatorul ar spune programul pe care 500 a fost prea mare, iar apoi programul nu ar fi vreodată să ghicească că numărul a fost în gama de 501 până la 1000. Acest lucru poate salva calculatorul o mulțime de muncă.

Pentru a pune aceste informații pentru a utiliza, programul ține evidența intervalului de valori posibile numărul obiectiv ar putea fi. Când numărul ghicit este prea mare, programul reglează limita superioară în jos, chiar sub ghici, iar dacă ghici era prea mică, programul reglează de jos în sus legat chiar deasupra ghici sale.

În cazul în care programul ghicește din nou, ghici este chiar în mijlocul intervalului posibil, reducerea intervalului în jumătate din nou. Numărul de posibile presupuneri a trecut de la original 1000 la 500 într-o singură presupunere, la 250 în două presupuneri. În cazul în care programul are noroc teribil, și nu se poate obține două (care este de fapt destul de probabil), apoi de-al treilea, are doar 125 de numere de la stânga să vă faceți griji. După a patra ghici, numai 62 numere rămân în raza de acțiune. Acest lucru continuă, și după opt presupuneri, numai 3 numere rămân, iar programul încearcă numărul de mijloc pentru a noua ghici. În cazul în care se dovedește a fi greșit, doar un singur număr este lăsat, iar programul îl ghicește!

Această tehnică de divizare un interval în jumătate și apoi continuând jumătate mai aproape este numit de împărțire în două și apare într - o largă gamă de subiecte de interes pentru știința calculatoarelor.


Ce zici de un cod! Din moment ce eu nu vreau să vă lipsească de experiența de învățare, am să vă dau doar câteva fragmente pe care le-ar putea ajuta de-a lungul. Python este un limbaj conceput pentru explorare interactivă, așa că pornim interpretul dumneavoastră și să dea acest lucru o șansă. Voi fi postați exemple cu instrucțiunile afișate, de fapt, nu de tip asta.

Iată un exemplu folosind whileclauza:

>>> x = 1000
>>> while x > 1:
...     x = x/2
...     print x
...
500
250
125
62
31
15
7
3
1
>>> x
1

Obținerea de intrare consola de utilizator ar trebui să se facă prin intermediul raw_input()funcției. Se returnează doar indiferent de tipurile de utilizatori. Acesta este un pic mai greu pentru a arăta. Pentru a simplifica lucrurile, după fiecare linie de piton , care necesită intrare, o să tip „Hello World!“ (fără ghilimele)

>>> raw_input()
Hello World!
'Hello World!'
>>> y = raw_input()
Hello World!
>>> print y
Hello World!
>>> 

Cum despre unele combinarea conceptelor!

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

Hopa. pic de un bug acolo. Vezi dacă poți repara!

Publicat 14/06/2009 la 05:17
sursa de către utilizator

voturi
0

Iată câteva sugestii pentru a obține ai început:

Mediu = Valoare + Valoare + Valoare [...] / Număr de valori; (De exemplu, ((2 + 5 + 3) / (3))

Multe limbaje de programare folosesc diferite operator prioritate. Când am programare, folosesc întotdeauna paranteze când sunt sigur cu privire la operator prioritate. În exemplul meu de mai sus, dacă ai făcut-o doar 2 + 5 + 3/3, programul ar face operațiuni de divizare, înainte de adăugarea - deci ar evaulate la 2 + 5 + (3/3), sau 2 + 5 + 1 == 7 .

Omiteți utilizatorii Python / * În al doilea rând: primele programe pot beneficia de corectitudinea const ( aici este o explicație bună a ceea ce este și de ce este extrem de bună practică). Vă rugăm să citiți și că înțelege de ce ar trebui să utilizați constante (sau oricare ar fi echivalentul Python este). De asemenea , uita - te în sus „numere magice“ , care este o zonă de mare , în cazul în care sunt utilizate constante. * /

Google „Vă rugăm să Scuza Dragul meu mătușa Sally“ (NOTĂ: aceasta se referă numai cu operatori matematici, și mai ales este valabil pentru limbaje de programare, pentru un studiu mai cuprinzător de operator prioritate, căutați documentația limba aleasă pentru prioritate - de asemenea, act de faptul că cele mai multe programe nu au construit în operatorii de putere, dar cele mai multe biblioteci standard au funcții ște).

Vorbind de biblioteca standard: Faceți cunoștință cu funcții standard de bibliotecă (nu am mai folosit Python, nu știu cum se pune în aplicare un SL, dar aș fi extrem de surprins dacă o limbă pe care populară nu a avut un SL bine dezvoltat). Dacă nu știți ce este, și cartea ta / tutorial nu avea, pentru a primi unul nou. Orice resursă care nu o bibliotecă de referință standard, nu este în valoare de timp.

În cele din urmă: în timp ce acest post ar putea arăta că știu ce vorbesc despre, eu chiar sunt încă în primele faze de învățare, la fel ca tine. Cateva lucruri pe care s-ar putea dori să se obișnuiască cu devreme (când am sărit aceste părți, a încetinit învățarea mea foarte mult): Utilizarea referințelor și indicii (Q pentru comentarii: are Python indicii?), Diferența dintre datele într-o locație de memorie și locația efectivă a memoriei (de multe ori, localizarea valorii în memorie va fi mai utilă decât valoarea în sine, cel puțin atunci când scrieți structuri de date). Mai ales sa se obisnuiasca cu biblioteca standard; uita-te pentru a copia, găsi, etc funcții de tip utile în manipularea șir.

De fapt, recitind postarea originală, nu am dat seama aceasta a fost o misiune de tip temele. Daca nu faci acest lucru pentru a te distra, probabil că vei lua niciodată sfatul meu. Doar amintiți-vă că programarea poate fi extrem de distractiv, dacă nu-l face o corvoada - si nu te frustrat atunci când codul nu compila (sau ... interpreta), sau veți obține rezultate neașteptate, etc.

Publicat 14/06/2009 la 05:24
sursa de către utilizator

voturi
1

Bine ați venit la Stack Overflow!

Trucul aici este de a realiza că programul Python ar trebui să arate aproape ca pseudocod.

Mai întâi, să încercăm să înțelegem exact ceea ce pseudocod face. Dacă a trebuit să interacționeze cu programul descris de pseudocod, ar arata ceva de genul:

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.

Când ne gândim mai întâi numărul nostru, programul știe doar că este între 1 și 1000. Ea reprezintă această cunoaștere prin setarea variabilei „scăzut“ la 1 și variabila „ridicat“ la 1000. Prima presupunere este media acestora numere, care este de 500.

După ce am spune programul pe care numărul nostru este mai mare de 500, se actualizează valoarea „scăzut“ la 501. Cu alte cuvinte, programul știe atunci că numărul nostru este cuprins între 501 și 1000. ghicește apoi media 501 și 1000, care este de 750. Am spune că numărul nostru este mai mic, astfel încât programul actualizează valoarea „ridicat“ la 749 și ghicește media 501 și 749 următoare, și așa mai departe până când se ghicește dreapta, sau a redus intervalul posibil până la un singur număr (adică următoarea presupunere va fi dreapta).

Deci, înapoi la scrierea programului în Python: Practic, traduce doar linia pseudocod pentru linia. De exemplu, bucla programul nostru ar trebui să arate exact ca o face in pseucode:

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

Nu este nevoie de o buclă pentru ca ai in codul.

Pentru a lua de intrare putem face ceva de genul:

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.')

Acum, datele introduse de utilizator este stocat în „răspuns“ variabilă, și putem ocupa de posibilitățile cu afirmații de genul în cazul în care „în cazul în care răspunsul == -1:“ de exemplu.

Doar amintiți-vă pentru a imprima instrucțiunile și setați „ridicat“ și „scăzut“ la valorile lor inițiale, înainte de a intra în buclă în timp și ar trebui să fie gata.

Mult noroc!

Publicat 14/06/2009 la 06:59
sursa de către utilizator

voturi
2

Nu se potrivește cu psudocode exact, dar funcționează. laugh out loud ;)

Știu că acest lucru este un vechi post rău, dar acest lucru este aceeasi sarcina pe care am primit, de asemenea. Iată ce am ajuns cu:

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
Publicat 25/09/2010 la 20:02
sursa de către utilizator

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