|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Mar 2007
Messaggi: 4683
|
[PYTHON] Liste
Sono arrivato qui http://www.python.it/doc/Easytut/easytut-it/node10.html
Codice:
## Questo programma verifica la vostra conoscenza. true = 1 false = 0 # Prima ottieni il questionario, successivamente sarà modificato # per l'uso del file IO. def get_questions(): # Nota come il dato viene magazzinato in una lista di liste. return [["What color is the daytime sky on a clear day?","blue"],\ ["What is the answer to life, the universe and everything?","42"],\ ["What is a three letter word for mouse trap?","cat"]] # Questo verificherà una singola domanda, restituirà vero, se l'utente # ha scritto la risposta corretta, altrimenti restituirà falso. def check_question(question_and_answer): # Estrai la domanda e la risposta dalla lista. question = question_and_answer[0] answer = question_and_answer[1] # Poni la domanda all'utente. given_answer = raw_input(question) # Confronta le risposte dell'utente con quelle del test. if answer == given_answer: print "Correct" return true else: print "Incorrect, correct was:",answer return false # Questa funzione effettuerà tutte le domande. def run_test(questions): if len(questions) == 0: print "No questions were given." # Esce dalla funzione. return index = 0 right = 0 while index < len(questions): # Controlla la domanda. if check_question(questions[index]): right = right + 1 # Vai alla prossima domanda. index = index + 1 # Attenzione all'ordine dei conteggi, prima moltiplica, poi dividi. print "You got ",right*100/len(questions),"% right out of",len(questions) # Adesso esegui la funzione sulle domande. run_test(get_questions()) check_questions come parametro dovrebbe avere (question_and_answer), come fa ad avere (questions [index])? Come lo fa il controllo della domanda? run_test dovrebbe avere (questions) come parametro, come mai allora ha (get_questions()) come parametro? Ora prendo un pò d'aria e ci ragiono di nuovo a mente serena, è dalle 2 che ci sono sopra tra studiare la guida, scrivere il codice e cercare id capirlo.. credo proprio di avere un apprendimento lento, molto lento... ![]()
__________________
Firma eliminata e avatar cambiato. Troppa gente giudica il monaco dall'abito. Ultima modifica di ~FullSyst3m~ : 25-01-2008 alle 15:32. |
![]() |
![]() |
![]() |
#2 |
Moderatore
Iscritto dal: Nov 2003
Messaggi: 16211
|
raw_input(prompt) stampa a schermo la stringa prompt, e legge l'input dell'utente, immagazzinandolo in una stringa "grezza".
Nella funzione check_question, l'argomento è una lista i cui elementi sono due stringhe, quindi una coppia di stringhe. La funzione get_questions crea una lista siffatta. Per cui, nelle chiamate a check_question, questions-di-i (scrivo così se no scatta il corsivo) è l'i-esimo campo della lista creata da get_questions... la quale, a sua volta, è una lista di coppie di stringhe.
__________________
Ubuntu è un'antica parola africana che significa "non so configurare Debian" ![]() Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 + Ubuntu |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Mar 2007
Messaggi: 4683
|
Sinceramente non c'ho capito molto e cosa significa che la funzione get_questions crea una lista siffatta?
__________________
Firma eliminata e avatar cambiato. Troppa gente giudica il monaco dall'abito. |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Mar 2007
Messaggi: 4683
|
Ho provato a smanettare un pò con il codice e, se non sto sparando una cretinata, credo che la funzione check_question riesce ad estrarre le domande grazie a [0] e [1] che non sono altro che gli indici di ognuna delle tre liste. E' come se questi due indici ricercano nel codice le liste e le estraggono, non vorrei sbagliarmi però.
Poi guardando meglio ho visto i due return nella funzione check_question che dovrebbe servire a terminare la funzione nel caso in cui sia vera o falsa e quindi dovrebbero ritornare 0 oppure 1, ma non mi sembra che ritornano niente. Ho solo notato che togliendoli alla fine del programma la percentuale non viene visualizzata Ultima cosa il parametro (questions) della funzione run_test: da dove viene preso questo parametro? Non so se sia normale o se sia la stanchezza o se sia che non ho predisposizione alla programmazione o altro, ma mi sembra che sono molto lento nell'apprendere anche se è da poco che ho iniziato a studiare Python. Ho perso un giorno solo su questo esempio e ancora devo capire tutto il codice nel suo insieme e fare l'esercizio successivo... adesso vado a letto che sono stanchissimo e domani sveglia alle 6. Notte a tutti
__________________
Firma eliminata e avatar cambiato. Troppa gente giudica il monaco dall'abito. |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2774
|
Allora, tento di spiegarti come funziona questo programma, però non posso andare troppo nel tecnico perché non conosco python.
Prima di tutto hai definito 3 funzioni, vediamole nel dettaglio: get_questions() Questa funzione ritorna un array un po' particolare, infatti ogni elemento dell'array è a sua volta composto da un altro array che contiene due stringhe. Questo significa che se fai una cosa del tipo: Codice:
domande_risposte=get_questions() Codice:
domanda_risposta=domande_risposte[0] Codice:
print domanda_risposta[0], " ",domanda_risposta[1] check_question(question_and_answer) Questa funzione ritorna true se la risposta che viene data alla domanda è corretta, false altrimenti. La domanda da fare e la relativa risposta sono passate come argomento: question_and_answer. Esso è un array come domanda_risposta, quindi ora dovresti aver capito cosa fa il codice di questa funzione. run_test(questions) Questo è il metodo che dato un array di domande e risposte (questions, che è un array del tipo particolare che restituisce la prima funzione) genera il questionario. Fa un ciclo da 0 alla lunghezza di questions e per ogni questions[index] (che è un semplice array di due stringhe) lancia il check_question, se questa restituisce true, e cioè la risposta è stata azzeccata, viene incrementato il contatore di risposte corrette right. Infine tutto quello che fa il programma è richiamare run_test passandogli come argomento ciò che viene restituito dalla funzione get_questions(). |
![]() |
![]() |
![]() |
#6 | ||
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Quote:
Tieniti solo i pensieri positivi ![]() Quote:
Dai tempo al tempo, sei appena agli inzi. Ciao ![]() |
||
![]() |
![]() |
![]() |
#7 | |
Senior Member
Iscritto dal: Mar 2007
Messaggi: 4683
|
Quote:
__________________
Firma eliminata e avatar cambiato. Troppa gente giudica il monaco dall'abito. |
|
![]() |
![]() |
![]() |
#8 | ||
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
A check_question viene passata, come parametro, esattamente una lista di questo tipo, dunque costituita da due soli elementi: il primo è la domanda e il secondo è la risposta; il primo ha indice 0 (all'interno di questa lista) e il secondo ha indice 1. Quote:
Comunque questo tutorial non mi piace: è troppo vecchio e poco "pythonic". Ti posto lo stesso programma, ma "aggiustato" un po': Codice:
## Questo programma verifica la vostra conoscenza. # Prima ottieni il questionario, successivamente sarà modificato # per l'uso del file IO. def get_questions(): # Nota come il dato viene magazzinato in una lista di liste. return [["What color is the daytime sky on a clear day?", "blue"], ["What is the answer to life, the universe and everything?", "42"], ["What is a three letter word for mouse trap?", "cat"]] # Questo verificherà una singola domanda, restituirà vero, se l'utente # ha scritto la risposta corretta, altrimenti restituirà falso. def check_question(question_and_answer): # Estrai la domanda e la risposta dalla lista, che è costuita esattamente dai questi due elementi. # Con l'istruzione seguente i due elementi vengono presi da question_and_answer e memorizzati rispettivamente in question e answer. question, answer = question_and_answer # Poni la domanda all'utente. given_answer = raw_input(question) # Confronta le risposte dell'utente con quelle del test. if answer == given_answer: print "Correct" return True else: print "Incorrect, correct was:", answer return False # Questa funzione effettuerà tutte le domande. def run_test(questions): if not questions: print "No questions were given." # Esce dalla funzione. return index = right = 0 while index < len(questions): # Controlla la domanda. if check_question(questions[index]): right = right + 1 # Vai alla prossima domanda. index = index + 1 # Attenzione all'ordine dei conteggi, prima moltiplica, poi dividi. print "You got ", right * 100 / len(questions), "% right out of", len(questions) # Adesso esegui la funzione sulle domande. run_test(get_questions()) - ho rimosso le definizioni di true e false, visto che esistono già True e False in Python per indicare un valore booleano vero o falso, rispettivamente; - rimosso il carattere \ alla fine di ogni lista, perché è inutile quando si definisce un elenco; - ho usato l'assegnazione question, answer = question_and_answer per "spacchettare" i due elementi della lista e assegnarli immediatamente alle rispettive variabili; in questo modo non ti devi nemmeno curare degli indici della lista, perché pensa a tutto Python; - ho usato if not questions: al posto di if len(questions) == 0: per controllare se NON ci sono elementi nella lista. Per adesso è tutto. Non so se mi collegherò ancora più tardi, perché ho tante cose da fare ma, se dovessi avere problemi, appena possibile vedrò di darti una mano. ![]() P.S. NON ti demoralizzare! Persevera e vedrai che anche tu imparerai a programmare. NON si nasce programmatori! Lo si diventa!!! ![]()
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
||
![]() |
![]() |
![]() |
#9 |
Senior Member
Iscritto dal: Mar 2007
Messaggi: 4683
|
C'è qualcosa che mi sfugge e non capisco cosa... cioè. il parametro di chek_questions non fa nessun riferimento alla funzione get_questions e le due variabili question, answer come estraggono la domanda senza fare alcun riferimento alla lista? E' questo che non capisco (non sapevo nemmeno che si potevano scrivere due variabili nella stessa linea separati da virgola)
__________________
Firma eliminata e avatar cambiato. Troppa gente giudica il monaco dall'abito. |
![]() |
![]() |
![]() |
#10 |
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2774
|
Prova a simulare l'esecuzione del programma, vedrai che check_question non ha alcun bisogno di richiamare get_questions.
Per simulare devi partire dall'ultima riga di codice |
![]() |
![]() |
![]() |
#11 |
Senior Member
Iscritto dal: Mar 2007
Messaggi: 4683
|
Ed è proprio questo il punto, che non ha bisogno, e la domanda che mi pongo è perchè? La lista deve estrarla obbligatoriamente da là. L'esecuzione di un programma si guarda dal basso verso l'alto? Io sapevo che si guarda dall'alto al basso, riga per riga
__________________
Firma eliminata e avatar cambiato. Troppa gente giudica il monaco dall'abito. |
![]() |
![]() |
![]() |
#12 |
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2774
|
Mi sa che non hai chiaro il concetto di "funzione", prova a riguardare il capitolo a riguardo nel tutorial/guida che stai seguendo.
|
![]() |
![]() |
![]() |
#13 | |||
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
Quote:
L'unica riga di codice vero e proprio, che quindi verrà eseguita, è proprio l'ultima, come ti è stato già indicato: run_test(get_questions()) Da questa, se cominci a seguire passo passo l'esecuzione, capisci come funziona tutto: prima viene richiamata get_questions, che ritorna la lista di liste (formate dalla coppia domanda / risposta), e questa viene "data in pasto" a run_test, e così via. Quote:
Esempio pratico. Codice:
Lista = ['Qui', 'Quo', 'Qua'] X, Y, Z = Lista Print X, Y, Z Python rulez. ![]()
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|||
![]() |
![]() |
![]() |
#14 | |||
Senior Member
Iscritto dal: Mar 2007
Messaggi: 4683
|
Quote:
![]() ![]() Quote:
Quote:
Codice:
question, answer = get_questions ![]() ![]() ![]() ![]()
__________________
Firma eliminata e avatar cambiato. Troppa gente giudica il monaco dall'abito. |
|||
![]() |
![]() |
![]() |
#15 | |
Senior Member
Iscritto dal: Dec 2005
Messaggi: 7249
|
Quote:
detto questo la prima istruzione che verrà eseguita sarà: Codice:
run_test(get_questions()) questo risponde alla tua domanda, perchè se passi come parametro get_questions() significa che dentro run_test la variabile "questions" ha lo stesso valore di quello che viene restituito da get_questions(), cioè la lista di domande e risposte. |
|
![]() |
![]() |
![]() |
#16 | ||||
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
![]() Quote:
Quote:
Quote:
![]()
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
||||
![]() |
![]() |
![]() |
#17 | ||
Senior Member
Iscritto dal: Mar 2007
Messaggi: 4683
|
Quote:
Quote:
__________________
Firma eliminata e avatar cambiato. Troppa gente giudica il monaco dall'abito. |
||
![]() |
![]() |
![]() |
#18 |
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Finalmente ci siamo.
![]()
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
![]() |
![]() |
![]() |
#19 |
Senior Member
Iscritto dal: Mar 2007
Messaggi: 4683
|
Ma vieniiiiii........
![]()
__________________
Firma eliminata e avatar cambiato. Troppa gente giudica il monaco dall'abito. |
![]() |
![]() |
![]() |
#20 |
Senior Member
Iscritto dal: Mar 2007
Messaggi: 4683
|
EDIT: piccola curiosità: ma il valore true o false a quanto ho capito python lo "riconosce" in automatico visto che non c'è nessun controllo nella funzione run_test ma aumenta di +1 right se la risposta è giusta... o sbaglio?
__________________
Firma eliminata e avatar cambiato. Troppa gente giudica il monaco dall'abito. |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 22:01.