Chirurgia cranio-cerebrală minim invazivă
Tehnicile minim invazive impun utilizarea unei tehnologii ultramoderne. Endoscoapele operatorii de diverse tipuri, microscopul operator dedicat, neuronavigația, neuroelectrofiziologia, tehnicile avansate de anestezie, chirurgia cu pacientul treaz reprezintă armamentarium fără de care neurochirurgia prin "gaura cheii" nu ar fi posibilă. Folosind tehnicile de mai sus, tratăm un spectru larg de patologii cranio-cerebrale. www.neurohope.ro |
[PY] meniu si optiune de raspuns
Last Updated: Jun 06 2015 21:17, Started by
colombo2003
, Jun 05 2015 20:05
·
0
#1
Posted 05 June 2015 - 20:05
Am urmatorul cod:
# MENIU def menu(): print "1. intro" print "2. cauta" print "3. Exit \n" opt = input("Optiunea Dvs: ") return "%d" % opt # Optiuni def choix(opt): if opt == 1: a = 11 return a #print "vom continua" if opt == 2: a = 12 return a #print "altadata" else: #opt == 3: a = 13 return a print "bye" #else: # pass # program principal meniu = menu() print meniu optiune = choix(meniu) # am incercat direct si cu choix(meniu) print optiuneCe doresc sa fac este un meniu, si in functie de optiunea aleasa, sa se intample ceva. Problema mea este ca mereu intra pe ultima optiune (scrie mereu bye sau 13), desi optiunea aleasa (care printandu-o, vad ca este tinuta minte correct) este alta. Practic nu intra pe ramura corespunzatoare in functia choix. Si nu inteleg de ce. Ce gresesc? Ce nu este bine? Multumesc |
#3
Posted 05 June 2015 - 20:46
colombo2003, on 05 iunie 2015 - 20:05, said:
Problema mea este ca mereu intra pe ultima optiune (scrie mereu bye sau 13), desi optiunea aleasa (care printandu-o, vad ca este tinuta minte correct) este alta. Practic nu intra pe ramura corespunzatoare in functia choix. Si nu inteleg de ce. Ce gresesc? Ce nu este bine? Ia verifica tipul variabilei. Nu cumva compari 1 cu "1", adica int cu str? De asemenea, fara legatura cu problema curenta, in loc de if opt == 2:scrie elif opt == 2: |
#4
Posted 05 June 2015 - 20:47
Pai... ziceam sa imi afiseze textul "Optiunea Dvs: " (la sfarsitul meniului), si ca sa imi tina minte valoarea pe care o introduc. Pentru ca in fct de aceasta valoare (numar), sa faca ceva.
Intre timp am rezolvat (tot incercand in fel si chip). Trebuia sa pun asa: if (opt ==' 1')adica: - sa pun conditia in paranteze rotunde - sa pun numarul optiunii intre apostroafe Si aici e aici, de ce trebuie pus '1'? Ca am crezut (si vroiam) ca valoarea optiunii este integer. In fine, important este ca "merge"... LE: bobo, am postat in acelasi timp. Asta era, dar acum nu inteleg de ce (in if vrea string, cand, la verificarea cu print mi-l afiseaza ca integer si in functia meniu, e pus %d Edited by colombo2003, 05 June 2015 - 20:48. |
#5
Posted 05 June 2015 - 20:50
Pai functia ta menu() ce iti intoarce? Un int sau un str?
meniu = menu() print meniu ia pune si: print type(meniu) |
#6
Posted 05 June 2015 - 21:00
Atenție când faci citirea de la tastatură. Este de preferat să folosești raw_input().
Quote raw_input() takes exactly what the user typed and passes it back as a string. input() takes the raw_input() and performs an eval() on it as well. The main difference is that input() expects a syntactically correct python statement where raw_input() does not. def menu(): print "1. intro" print "2. cauta" print "3. Exit \n" opt = raw_input("Optiunea Dvs: ") # Ceea ce introduci de la tastatură, se salveaza sub forma unui string în variabila opt return int(opt) #Faci apoi un cast la int și returnezi un int in loc de un string. Ar fi ok să faci și niște verificări înainte de return. (Dacă pun o literă, programul are comportamentul așteptat?) Datorită faptului ca python e foarte "cool", nu trebuie sa precizezi și tipul variabilelor când le declari, ceea ce duce la ambiguități (ca și în cazul de față). De aceea folosește funcția type() împreună cu print ca să știi exact cu ce tipuri de date ai de-a face. Succes! Edited by TorchMan, 05 June 2015 - 21:05. |
#7
Posted 05 June 2015 - 21:05
Pus. Mda, intr-adevar intoarce str, dar aici e aici, ca nu inteleg de ce... As putea insa sa il convertesc la int (si atunci ar fi mers si if opt == 1).
Important este ca acum functioneaza. Ma concentrez mai departe la ce am de facut la tema. Este posibil sa mai apelez la ajutorul vostru. Multumesc SP! |
#8
Posted 05 June 2015 - 21:42
Hmm... cu viteza melcului inainte!
Codul acum arata asa: # MENIU def menu(): print "1. Introducere carte" print "2. Cautare carte" print "3. Iesire program\n" opt = input("Optiunea Dvs (1/2/3): ") return str(opt) choix(opt) # am adaugat linia asta # Optiuni def choix(opt): if (opt == '1'): autor = raw_input("Autor: ") anul = input("An: ") editura = raw_input("Editura: ") obj = Book(autor, anul, editura) print obj Book().cont() elif (opt == '2'): print "altadata" elif (opt == '3'): print "bye" else: print "\nOptiune invalida!!!\n" menu() # program principal meniu = menu()Intrebarea e de ce, in cazul in care introduc o optiune invalida, imi apare din nou meniul, dar la reintroducerea unei optiuni valide de data asta, nu mai face nimic (deci nu se mai reapeleaza choix). De ce...? PS. acolo apare clasa book(), caci introduc de la tastatura ceva (o carte, cu informatile: autor, an, editura) (ulterior astra vreau sa le scriu intr-un fisier... sa pot face si cautare, si stergere etc...). Edited by colombo2003, 05 June 2015 - 21:45. |
#9
Posted 05 June 2015 - 22:09
Codul nu mai este identat corect.(Probabil din cauză că ai dat EDIT).
Tu unde vrei să apelezi funcția menu() ? Dacă ai la fel și în cod, tu apelezi funcția meniu() doar când te afli pe ultima ramură else; presupun că tu vrei sa faci apelul indiferent de ce valoare are opt, deci apelul trebuie să fie identat cu funcția, nu cu else-ul. |
#10
Posted 05 June 2015 - 22:27
Hmmm, pentru ca tot nu-mi iesea (desi sunt convins ca se poate si asa, cu doua functii separate, care, cumva sa se apeleze una pe alta)... am schimat si am pus totul intr-o singura functie.
Acum face cum vroiam! PS. Am observant ca parca, la enter, nu mi se mai face identarea cum trebuie si chiar nu intelgeam de ce... Care ar putea fi cauza? PS.2. Mergem mai departe... LE: apelul functiei menu() (de pe ramura de else) l-am indentat cu functia, nu cu else (ceea ce e logic), dar nu stiu ce se intampla, ca tot nu functioneaza correct... Edited by colombo2003, 05 June 2015 - 22:33. |
|
#11
Posted 06 June 2015 - 10:09
Pai gandeste-te oleaca cum functioneaza ce-ai facut tu acolo.
Intai intri in menu() [1], apoi choix() [1], apoi alt menu() [2], apoi alt choix() [2].... si tot asa. Tot adaugi, recursiv, la stiva. Daca utilizatorul ar avea ambitie sa foloseasca acel meniu pentru mult timp, cred ca ar reusi sa consumi tot RAM-ul calculatorului Scoate acel apel la "menu()" din "choix". Edit: De asemenea, ia verifica ce faci tu aici: return str(opt) choix(opt) # am adaugat linia asta Edited by bobo666, 06 June 2015 - 10:09. |
#12
Posted 06 June 2015 - 21:17
1) Am gandit asa: prima oara intri in meniul principal si alegi o optiune. Si face ce faci acolo in aceas optiune (sa zicem ca ai introdus 10 carti) si vrei sa revii la meniul principal sa faci altceva. Si apoi alegi alta optiune (de exemplu cauti o carte, sau vrei sa modifici o carte etc).
Si tot asa, pana cand se alege optiunea de iesire din meniul principal. De ce s-ar ocupa ram-ul? Cum s-ar face atunci chestia de mai sus? 2) Acel return l-am scos (il pusesem ca sa convertesc optiunea din integer (nr optiunii) in string. M-am gandit ca poate utilizatorul in loc sa introduca doar cifre (chiar daca nu corespund vreo unei optiuni), introduce si litere... (si atunci imi dadea eroare). Intre timp am mai avansat nitel, dar m-am impotmolit in altele (la functia de cautare dupa o carte in fisierul book.txt) |
Anunturi
▶ 1 user(s) are reading this topic
0 members, 1 guests, 0 anonymous users