Chapter 2 Variabili, espressioni ed istruzioniUna delle caratteristiche più potenti in un linguaggio di programmazione è la capacità di lavorare con le variabili. Una variabile è un nome che fa riferimento ad un valore. 2.1 Istruzioni di assegnazioneUn’istruzione di assegnazione serve a creare una nuova variabile, specificandone il nome, e ad assegnarle un valore: >>> messaggio = 'E ora qualcosa di completamente diverso' >>> n = 17 >>> pi = 3.141592653589793 Questo esempio effettua tre assegnazioni. La prima assegna una stringa ad una nuova variabile chiamata messaggio; la seconda assegna il numero intero 17 alla variabile n; la terza assegna il valore decimale approssimato di π alla variabile pi. Un modo comune di rappresentare le variabili sulla carta è scriverne il nome con una freccia che punta al loro valore. Questo tipo di illustrazione è chiamato diagramma di stato perché mostra lo stato in cui si trova la variabile. La Figura 2.1 illustra il risultato delle istruzioni di assegnazione dell’esempio precedente. 2.2 Nomi delle variabiliGeneralmente, i programmatori scelgono dei nomi significativi per le loro variabili, in modo da documentare a che cosa servono. I nomi delle variabili possono essere lunghi a piacere e possono contenere sia lettere che numeri, ma non possono iniziare con un numero. È possibile usare anche le lettere maiuscole, ma per i nomi di variabile è convenzione utilizzare solo lettere minuscole. Ricordate comunque che, per l’interprete, maiuscole e minuscole sono diverse, pertanto Il trattino basso o underscore, Se assegnate un nome non valido alla variabile, otterrete un errore di sintassi: >>> 76tromboni = 'grande banda' SyntaxError: invalid syntax >>> altro@ = 1000000 SyntaxError: invalid syntax >>> class = 'Zymurgy Teorico Avanzato' SyntaxError: invalid syntax 76tromboni non è valido perché non inizia con una lettera. altro@ non è valido perché contiene un carattere non ammesso (la chiocciola @). Ma cosa c’è di sbagliato in class? Succede che class è una delle parole chiave riservate di Python. L’interprete utilizza queste parole per riconoscere la struttura del programma, pertanto non possono essere usate come nomi di variabili. Python 3 ha queste parole chiave: False class finally is return None continue for lambda try True def from nonlocal while and del global not with as elif if or yield assert else import pass break except in raise Non occorre imparare a memoria questo elenco. Nella maggior parte degli ambienti di sviluppo, le parole chiave vengono evidenziate con un diverso colore; se cercate di usarne una come nome di variabile, ve ne accorgerete subito. 2.3 Espressioni e istruzioniUn’espressione è una combinazione di valori, variabili e operatori. Un valore è considerato già di per sé un’espressione, come pure una variabile, per cui quelle che seguono sono tutte delle espressioni valide (supponendo che alla variabile n sia già stato assegnato un valore): >>> 42 42 >>> n 17 >>> n + 25 42 Quando scrivete un’espressione al prompt dei comandi, l’interprete la valuta, cioè trova il valore dell’espressione. Nell’esempio di prima, n ha valore 17 e n + 25 ha valore 42. Un’istruzione è una porzione di codice che l’interprete Python può eseguire e che ha un qualche effetto, come creare una variabile o mostrare un valore. >>> n = 17 >>> print(n) La prima riga è un’istruzione di assegnazione che dà un valore alla variabile n. La seconda è un’istruzione di stampa che mostra a video il valore di n. Quando scrivete un’istruzione, l’interprete la esegue, cioè fa quello che l’istruzione dice di fare. In linea generale, le istruzioni, a differenza delle espressioni, non contengono valori. 2.4 Modalità scriptFinora abbiamo avviato Python in modalità interattiva, detta anche “a riga di comando”, che vuol dire interagire direttamente con l’interprete. La modalità interattiva è un buon modo per iniziare e fare esperimenti, ma se si deve lavorare con più di qualche riga di codice, può diventare in breve tempo un impiccio. In alternativa alla riga di comando, si può scrivere e salvare un programma in un file di testo semplice, chiamato script, ed usare poi l’interprete in modalità script per eseguirlo. Per convenzione, i file contenenti programmi Python hanno nomi che terminano con l’estensione .py . Se già sapete come creare e avviare uno script nel vostro computer, siete a cavallo. Altrimenti vi consiglio di nuovo di usare PythonAnywhere. Le istruzioni per l’avvio in modalità script sono pubblicate all’indirizzo http://tinyurl.com/thinkpython2e. Poiché Python consente entrambe queste modalità, potete provare dei pezzi di codice in modalità interattiva prima di inserirli in uno script. Ma tra le due modalità, ci sono delle differenze che possono disorientare. Per esempio, usando Python come una calcolatrice, si può scrivere: >>> miglia = 26.2 >>> miglia * 1.61 42.182 La prima riga assegna un valore a miglia, e non ha alcun effetto visibile. La seconda riga è un’espressione, e l’interprete la valuta e ne mostra il risultato. Vediamo così che una maratona misura circa 42 chilometri. Ma se scrivete lo stesso codice in uno script e lo avviate, non otterrete alcun riscontro. In modalità script, un’espressione, di per sé, non ha effetti visibili. In realtà Python valuta l’espressione, ma non ne mostra il risultato finché non gli dite esplicitamente di farlo: miglia = 26.2 print(miglia * 1.61) Questo comportamento inizialmente può confondere. Uno script di solito contiene una sequenza di istruzioni. Se ci sono più istruzioni, i risultati compaiono uno alla volta, man mano che le istruzioni vengono eseguite. Per esempio lo script: print(1) x = 2 print(x) visualizza questo: 1 2 mentre l’istruzione di assegnazione non produce alcun output sullo schermo. Per controllare se avete capito tutto, scrivete le seguenti istruzioni nell’interprete Python per vedere quali effetti producono: 5 x = 5 x + 1 Ora scrivete le stesse istruzioni in uno script ed avviatelo. Qual è il risultato? Modificate lo script trasformando ciascuna espressione in un’istruzione di stampa, ed avviatelo nuovamente. 2.5 Ordine delle operazioniQuando un’espressione contiene più operatori, l’ordine in cui viene eseguito il calcolo dipende dal’ordine delle operazioni. Python segue le stesse regole di precedenza usate in matematica. L’acronimo PEMDAS è un modo utile per ricordare le regole:
Personalmente, non mi sforzo molto di ricordare la precedenza degli operatori. Se non ne sono certo guardando un’espressione, inserisco le parentesi per fugare ogni dubbio. 2.6 Operazioni sulle stringheIn genere non potete effettuare operazioni matematiche sulle stringhe, anche se il loro contenuto sembra essere un numero, quindi gli esempi che seguono non sono validi. '2'-'1' 'uova'/'facili' 'terzo'*'una magia' Ma ci sono due eccezioni: + e *. L’operatore + esegue il concatenamento, cioè unisce le stringhe collegandole ai due estremi. Per esempio: primo = 'bagno' secondo = 'schiuma' primo + secondo Il risultato a video di questo programma è bagnoschiuma. Anche l’operatore * funziona sulle stringhe: ne esegue la ripetizione. Per esempio, Questo utilizzo di + e * è coerente per analogia con l’addizione e la moltiplicazione in matematica. Così come 4*3 è equivalente a 4+4+4, ci aspettiamo che 2.7 CommentiMan mano che il programma cresce di dimensioni e diventa più complesso, diventa anche sempre più difficile da leggere. I linguaggi formali sono ricchi di significato, e può risultare difficile capire a prima vista cosa fa un pezzo di codice o perché è stato scritto in un certo modo. Per questa ragione, è buona abitudine aggiungere delle note ai vostri programmi, per spiegare in linguaggio naturale cosa sta facendo il programma nelle sue varie parti. Queste note sono chiamate commenti, e sono demarcate dal simbolo # calcola la percentuale di ora trascorsa percentuale = (minuti * 100) / 60 In questo caso il commento appare su una riga a sé stante. Potete anche inserire un commento alla fine di una riga: percentuale = (minuti * 100) / 60 # percentuale di un'ora Qualsiasi cosa scritta dopo il simbolo # e fino alla fine della riga, viene trascurata e non ha alcun effetto sull’esecuzione del programma. I commenti più utili sono quelli che documentano caratteristiche del codice di non immediata comprensione. È ragionevole supporre che chi legge il codice possa capire cosa esso faccia; è più utile spiegare perché. Questo commento è ridondante e inutile: v = 5 # assegna 5 a v Questo commento contiene invece un’informazione utile che non è contenuta nel codice: v = 5 # velocità in metri/secondo Dei buoni nomi di variabile possono ridurre la necessità di commenti, ma nomi lunghi possono complicare la lettura, pertanto va trovato un giusto compromesso. 2.8 DebugCi sono tre tipi di errori nei quali si incorre durante la programmazione: gli errori di sintassi, gli errori in esecuzione e gli errori di semantica. È utile analizzarli singolarmente per facilitarne l’individuazione. 2.8.1 Errori di sintassiIl termine sintassi si riferisce alla struttura di un programma e alle regole che la governano. Ad esempio, le parentesi devono essere sempre presenti a coppie corrispondenti, così (1 + 2) è corretto, ma 8) è un errore di sintassi. Se c’è un singolo errore di sintassi da qualche parte nel programma, Python visualizzerà un messaggio d’errore e ne interromperà l’esecuzione, rendendo impossibile proseguire. Durante le prime settimane della vostra carriera di programmatori, probabilmente passerete molto tempo a cercare errori di sintassi. Via via che acquisirete esperienza, questi si faranno meno numerosi e vi risulterà sempre più facile rintracciarli. 2.8.2 Errori in esecuzioneIl secondo tipo di errore è l’errore in esecuzione (o di runtime), così chiamato perché l’errore non appare finché il programma non viene eseguito. Questi errori sono anche chiamati eccezioni perché indicano che è accaduto qualcosa di eccezionale (e di spiacevole) nel corso dell’esecuzione. Gli errori in esecuzione sono rari nei semplici programmi che vedrete nei primissimi capitoli, e potrebbe passare un po’ di tempo prima di incontrarne uno. 2.8.3 Errori di semanticaIl terzo tipo di errore è l’errore di semantica (o di logica), che è correlato al significato del programma. In presenza di un errore di semantica, il programma verrà eseguito senza che compaia alcun messaggio di errore, ma non farà la cosa giusta: farà qualcosa di diverso. Nello specifico, farà esattamente ciò che voi gli avete detto di fare, esprimendovi in modo sbagliato. L’identificazione degli errori di semantica può essere complicata perché richiede di lavorare a ritroso, partendo dai risultati dell’esecuzione e cercando di risalire a che cosa non sia andato per il verso giusto. 2.9 Glossario
2.10 EserciziEsercizio 1 Rinnovo la raccomandazione del capitolo precedente: ogni volta che apprendete qualcosa di nuovo, provatelo in modalità interattiva e fate degli errori di proposito per vedere cosa non funziona.
Esercizio 2
Fate un po’ di pratica con l’interprete Python usandolo come calcolatrice:
|
ContributeIf you would like to make a contribution to support my books, you can use the button below. Thank you!
Are you using one of our books in a class?We'd like to know about it. Please consider filling out this short survey.
|