Topic: Tutorial per principianti in Python - liste - esercizio  (Letto 978 volte)

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

Offline roberzim

  • python unicellularis
  • *
  • Post: 7
  • Punti reputazione: 0
    • Mostra profilo
Gentilissimi,
sto seguendo il "Tutorial per principianti in Python" che al capitolo sulle liste (http://www.python.it/doc/Easytut/easytut-it/node10.html) chiede di fare il seguente esercizio "[e]spandete il programma test.py in modo che abbia un menu per selezionare le opzioni del test, visualizzi la lista delle domande ed un'opzione per terminare l'esecuzione".
il codice di test.py è il seguente:
[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())
[/codice]
*******
La questione è questa.
1. Il programma crea (v. def get_questions) una lista contenente tre liste;

2. il mio obiettivo è estrarre le sole domande;

3. non avendo altre nozioni se non quelle che ho maturato fino al capitolo 8, ho provato a sfruttare il codice esistente (ed in particolare questa parte di codice
[codice]
def check_question(question_and_answer):
    # Estrai la domanda e la risposta dalla lista.
    question = question_and_answer[0]
    answer = question_and_answer[1][/codice] .....)

in questo modo, ma senza risultato:
[codice]
lista =   [["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"]] 
menu_item = 0
while menu_item != 9:
        print "--------------------"
        print "1. Print the list"
        menu_item = input("Pick an item from the menu: ")
        if menu_item == 1:
   question = lista[0]
   current=0   
      if len(question) > 0:
                        while current < len(question):
                                print current,". ",question[current]
                                current = current + 1
                   else:
                           print "List is empty"   
[/codice]

4. per quel che ho capito il programma originale riesce ad estrarre le sole domande ponendo queste ultime all'interno della lista come
  • e le risposte come [1];


5. utilizzando gli esempi di cui al capitolo 8, è possibile implementare la stessa funzione direttamente in menu_item e se sì come  :)?

Offline Claudio_F

  • python sapiens sapiens
  • ******
  • Post: 1.157
  • Punti reputazione: 2
    • Mostra profilo
Re: Tutorial per principianti in Python - liste - esercizio
« Risposta #1 il: Luglio 08, 2013, 23:20 »
in questo modo, ma senza risultato:
Fail! Un primo risultato molto chiaro lo da  :angel:

IndentationError: unexpected indent

In effetti quel tutorial non mi sembra parli delle regole di indentazione, se non sbaglio si limita a parlare di istruzioni rientrate o tabulate... senza dire che:

- non bisogna mai mischiare spazi e tabulazioni
- il rientro a destra (indentazione, che andrebbe fatta di 4 spazi per ogni livello di annidamento) serve per definire un blocco di istruzioni e tutte le istruzioni del blocco vanno incolonnate tra loro, e non scritte un po' a destra e un po' a sinistra, l' else relativo ad una if va incolonnato sotto la if ecc.

Sistemato questo ci sono un bel po' di errori di logica, primo tra tutti la variabile current che non dovrebbe indicare un indice all'interno della sottolista, ma all'interno della lista principale.
« Ultima modifica: Luglio 08, 2013, 23:44 da Claudio_F »

Offline roberzim

  • python unicellularis
  • *
  • Post: 7
  • Punti reputazione: 0
    • Mostra profilo
Re: Tutorial per principianti in Python - liste - esercizio
« Risposta #2 il: Luglio 09, 2013, 16:51 »
Ho capito, ho un bel pò di lavoro da fare a monte prima di riprovarci.....
Grazie e alla prossima!

Offline RicPol

  • python sapiens sapiens
  • ******
  • Post: 3.083
  • Punti reputazione: 9
    • Mostra profilo
Re: Tutorial per principianti in Python - liste - esercizio
« Risposta #3 il: Luglio 09, 2013, 17:55 »
uhm... lo so è sempre facile criticare, ma... certo che guardando solo l'indice di questo tutorial, mi sembra che l'ordine naturale delle cose sia un po' ingarbugliato.
Comunque direi che è molto vecchio, come testo...
Accidenti, ma non si trova niente di meglio / più recente in italiano?

Offline Claudio_F

  • python sapiens sapiens
  • ******
  • Post: 1.157
  • Punti reputazione: 2
    • Mostra profilo
Re: Tutorial per principianti in Python - liste - esercizio
« Risposta #4 il: Luglio 09, 2013, 19:34 »
Ho capito, ho un bel pò di lavoro da fare a monte prima di riprovarci.....
Grazie e alla prossima!

Suvvia, già arreso? Come esempio vediamo a parole (e codice) la logica che pensavi di usare:

- Devo stampare la sola domanda di ogni gruppo domanda-risposta (sottolista) contenuto in una lista principale (di nome lista).
- Quindi devo scorrere gli elementi di questa lista, e da ogni elemento (sottolista) estrarre e stampare la sola domanda
- Uso una variabile di nome current come indice, e in un ciclo la incremento finché il suo valore supera il valore dell'ultimo indice della lista pari a len(lista)-1
[codice]current = 0    
while current < len(lista):
    current = current + 1  
[/codice]
A questo punto all'interno del ciclo, e prima dell'incremento, posso "estrarre" i valori che mi interessano, stando all'esempio che avevi riportato:
[codice]current = 0    
while current < len(lista):
    question_and_answer = lista[current]
    question = question_and_answer[0]
    print current, ". ", question  
    current = current + 1  
[/codice]
Il tutto un po' compattabile in:
[codice]current = 0    
while current < len(lista):
    print current, ". ", lista[current][0]
    current += 1  
[/codice]
Ma più pythonicamente esprimibile con:
[codice]for current, (question, answer) in enumerate(lista):
    print "%d. %s" % (current, question)
[/codice]
« Ultima modifica: Luglio 09, 2013, 19:47 da Claudio_F »

Offline Max74

  • python neanderthalensis
  • ****
  • Post: 383
  • Punti reputazione: 0
    • Mostra profilo
Re: Tutorial per principianti in Python - liste - esercizio
« Risposta #5 il: Luglio 09, 2013, 19:43 »
uhm... lo so è sempre facile criticare, ma... certo che guardando solo l'indice di questo tutorial, mi sembra che l'ordine naturale delle cose sia un po' ingarbugliato.
Comunque direi che è molto vecchio, come testo...
Accidenti, ma non si trova niente di meglio / più recente in italiano?

Secondo me già il tutorial di Guido e Pensare da informatico anche se sono datati, sono necessariamente il miglior approccio al linguaggio per chi si avvicina per la prima volta.

Offline Claudio_F

  • python sapiens sapiens
  • ******
  • Post: 1.157
  • Punti reputazione: 2
    • Mostra profilo
Re: Tutorial per principianti in Python - liste - esercizio
« Risposta #6 il: Luglio 09, 2013, 20:01 »
Secondo me già il tutorial di Guido e Pensare da informatico anche se sono datati, sono necessariamente il miglior approccio al linguaggio per chi si avvicina per la prima volta.
Per me Il problema è sempre avvicinarsi contemporaneamente alla programmazione E al linguaggio. Per esporre in modo non troppo scarno il secondo si devono tirare in ballo cose troppo complesse per chi si avvicina per la prima volta alla programmazione, mentre per parlare di questa bisognerebbe limitarsi al minimo indispensabile del linguaggio (forse al minimo denominatore comune tra tutti i linguaggi).

Pensare da informatico (oh, ho iniziato anch'io a leggere Python da li) è qualcosa di strano, come se parlasse molto di "grammatica" senza comporre vere e proprie frasi che mostrino come usare la grammatica, inoltre fa quel lungo discorso iniziale sulla ricorsione che mi sembra invece un argomento "avanzato".

Sto invece rivalutando il libro di Kenneth A.Lambert, che benché tradotto così così, è strutturato bene, non mette troppa carne al fuoco per chi inizia, e nello stesso tempo insiste su concetti importanti come l'astrazione, e affronta, seppure in modo minimale, anche grafica, oggetti, GUI/MVC, rete, thread/sincronizzazione, tutte cose di cui nessun tutorial base parla, e neppure un riferimento "completo" come può essere il Lutz.
« Ultima modifica: Luglio 09, 2013, 20:03 da Claudio_F »

Offline Giornale di Sistema

  • python sapiens sapiens
  • ******
  • Post: 3.124
  • Punti reputazione: 4
    • Mostra profilo
    • Distillato di Python
Re: Tutorial per principianti in Python - liste - esercizio
« Risposta #7 il: Luglio 09, 2013, 20:28 »
Pensare da informatico (oh, ho iniziato anch'io a leggere Python da li) è qualcosa di strano, come se parlasse molto di "grammatica" senza comporre vere e proprie frasi che mostrino come usare la grammatica, inoltre fa quel lungo discorso iniziale sulla ricorsione che mi sembra invece un argomento "avanzato".

Stesso inizio, stessa conclusione.
Mi ha lasciato con la sensazione di "saper fare", alla prova dei fatti ridimensionatasi di molto.

Sto invece rivalutando il libro di Kenneth A.Lambert, che benché tradotto così così, è strutturato bene, non mette troppa carne al fuoco per chi inizia, e nello stesso tempo insiste su concetti importanti come l'astrazione, e affronta, seppure in modo minimale, anche grafica, oggetti, GUI/MVC, rete, thread/sincronizzazione, tutte cose di cui nessun tutorial base parla, e neppure un riferimento "completo" come può essere il Lutz.

Lutz ne parla nell'altro libro, però si, condivido: nonostante qualche cantonata del traduttore e qualcuna dell'autore
(e anche qualche problema di stampa), il libro di Lambert mi è sembrato molto equilibrato come introduzione sia al linguaggio che alla programmazione.

Gli esempi nel testo ed i progetti di fine capitolo sono più numerosi e meglio dosati che in "Pensare da Informatico".
« Ultima modifica: Luglio 09, 2013, 20:33 da Giornale di Sistema »

Offline Max74

  • python neanderthalensis
  • ****
  • Post: 383
  • Punti reputazione: 0
    • Mostra profilo
Re: Tutorial per principianti in Python - liste - esercizio
« Risposta #8 il: Luglio 09, 2013, 20:47 »
Secondo me già il tutorial di Guido e Pensare da informatico anche se sono datati, sono necessariamente il miglior approccio al linguaggio per chi si avvicina per la prima volta.
Per me Il problema è sempre avvicinarsi contemporaneamente alla programmazione E al linguaggio. Per esporre in modo non troppo scarno il secondo si devono tirare in ballo cose troppo complesse per chi si avvicina per la prima volta alla programmazione, mentre per parlare di questa bisognerebbe limitarsi al minimo indispensabile del linguaggio (forse al minimo denominatore comune tra tutti i linguaggi).

Pensare da informatico (oh, ho iniziato anch'io a leggere Python da li) è qualcosa di strano, come se parlasse molto di "grammatica" senza comporre vere e proprie frasi che mostrino come usare la grammatica, inoltre fa quel lungo discorso iniziale sulla ricorsione che mi sembra invece un argomento "avanzato".

Sto invece rivalutando il libro di Kenneth A.Lambert, che benché tradotto così così, è strutturato bene, non mette troppa carne al fuoco per chi inizia, e nello stesso tempo insiste su concetti importanti come l'astrazione, e affronta, seppure in modo minimale, anche grafica, oggetti, GUI/MVC, rete, thread/sincronizzazione, tutte cose di cui nessun tutorial base parla, e neppure un riferimento "completo" come può essere il Lutz.
Il libro di Lambert non lo conosco, il Lutz è stato il mio primo acquisto, ma non lo avrei mai fatto se non ci fosse stato qualcosa a "stimolarmi l'appetito". :)
Penso che l'approccio d'apprendimento sia necessariamente diverso tra chi è completamente digiuno di programmazione e chi invece ha una certa base. E il problema è anche conciliare le due cose, perché se da troppe  cose per scontate crea un ostacolo a chi non conosce la programmazione, se è invece troppo elementare rischia di annoiare chi ha una minima conoscenza di altri linguaggi.
Scrivere un tutorial non è una cosa così tanto semplice, in fondo. :)

Offline roberzim

  • python unicellularis
  • *
  • Post: 7
  • Punti reputazione: 0
    • Mostra profilo
Re: Tutorial per principianti in Python - liste - esercizio
« Risposta #9 il: Luglio 11, 2013, 09:40 »
Vi ringrazio per gli interventi ed in particolare  Claudio_F per avermi dato una soluzione raggionata e chiara ed ancor di più per avermi fatto capire che forse è meglio avere qualche base più solida. Per questo motivo sto ripartendo da Learning Python di Lutz, ricerche su internet per ciò che non mi è chiaro e tanta pazienza. Nel caso di ulteriori dubbi mi e appoggerò al forum e alla vostra di pazienza :). Il viaggio sarà più lungo ma dovrebbe permettermi di costruirmi un minimo di metodo.
Grazie ancora 

Offline Giornale di Sistema

  • python sapiens sapiens
  • ******
  • Post: 3.124
  • Punti reputazione: 4
    • Mostra profilo
    • Distillato di Python
Re: Tutorial per principianti in Python - liste - esercizio
« Risposta #10 il: Luglio 11, 2013, 10:23 »
Per questo motivo sto ripartendo da Learning Python di Lutz, ricerche su internet per ciò che non mi è chiaro e tanta pazienza.

Attenzione solo al fatto che il libro di Lutz è un tutorial molto approfondito sugli aspetti base del linguaggio Python e non della programmazione in genere.
Gli esercizi sono pochi, più che altro brevi snippets di codice, progetti un minimo più impegnativi nessuno.

Se ti serve introdurti anche ai concetti della programmazione e farci su un po' di esercizi è opportuno prendere in considerazione prima il Lambert,
poi approfondire, e anche correggere qualche sua inesattezza con il Lutz.

Offline roberzim

  • python unicellularis
  • *
  • Post: 7
  • Punti reputazione: 0
    • Mostra profilo
Re: Tutorial per principianti in Python - liste - esercizio
« Risposta #11 il: Luglio 11, 2013, 10:46 »
Il titolo del libro è  "Programmazione in Python"?

Offline GlennHK

  • python sapiens sapiens
  • ******
  • Post: 1.655
  • Punti reputazione: 1
    • Mostra profilo
    • La Tana di GlennHK
Re: Tutorial per principianti in Python - liste - esercizio
« Risposta #12 il: Luglio 11, 2013, 10:57 »
[codice]
true = 1 
false = 0 
[/codice]

Andiamo, ma siamo in C o in Python?

Offline Claudio_F

  • python sapiens sapiens
  • ******
  • Post: 1.157
  • Punti reputazione: 2
    • Mostra profilo
Re: Tutorial per principianti in Python - liste - esercizio
« Risposta #13 il: Luglio 11, 2013, 11:09 »
Citazione
Il titolo del libro è  "Programmazione in Python"?
Proprio lui, quello giallo con l'origami. Ulteriore nota: parla solo di Python3 (ma per il livello delle cose che tratta è indifferente, giusto minime differenze su print e input).

Citazione
Andiamo, ma siamo in C o in Python?
Non è che i booleani sono stati introdotti dopo la scrittura di quel tutorial?
Anche gli a capo riga con i backslash non sarebbero necessari all'interno della parentesi.
« Ultima modifica: Luglio 11, 2013, 11:14 da Claudio_F »

Offline GlennHK

  • python sapiens sapiens
  • ******
  • Post: 1.655
  • Punti reputazione: 1
    • Mostra profilo
    • La Tana di GlennHK
Re: Tutorial per principianti in Python - liste - esercizio
« Risposta #14 il: Luglio 11, 2013, 11:33 »
A quanto ho visto, quel tutorial è per la versione 2.2 di Python. Un po' vecchiotto :)