User Tools

Site Tools


appunti3s:introduzione_a_python

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
appunti3s:introduzione_a_python [2018/10/18 21:48] profproappunti3s:introduzione_a_python [2020/06/08 22:19] (current) – external edit 127.0.0.1
Line 1: Line 1:
 +====== Python ======
 +
 +>> indice: [[appunti3s:linguaggio_python]]
 +
 +===== Prerequisiti =====
 +
 +  - conoscere il concetto di variabile e costante
 +  - conoscere il concetto di algoritmo
 +  - saper trovare un algoritmo risolutore di un problema generico
 +  - conoscere la differenza tra programmatore ed utente
 +  - conoscere la differenza tra linguaggio compilato ed interpretato
 +  - conoscere la differenza tra programma nel terminale e GUI.
 +
 +===== Cosa faremo? =====
 +Sperimenteremo per la prima volta il lavoro del programmatore...
 +  * **Quiz**: qual è il lavoro del programmatore?
 +Python è un linguaggio di programmazione, cioè può essere usato per descrivere delle istruzioni.
 +Le istruzioni sono scritte dal programmatore e il computer le esegue per risolvere automaticamente i problemi dell'utente. 
 +
 +Python è un linguaggio interpretato, si può far interpretar un comando alla volta (in modalità interattiva) oppure un elenco di comandi racchiudendoli in un file di testo.
 +Perché il computer possa comprendere il linguaggio Python deve essere installato il programma interprete Python.
 +  * **Quiz**: Nel tuo computer è già installato questo programma?
 +===== Esempi di uso dell'inteprete dei comandi Python =====
 +L'inteprete è un programma che può funzionare in due modalità: la modalità //interattiva// e quella //non interattiva//.
 +  * La modalità **interattiva** si avvia //digitando// il comando "python" nel terminale dei comandi (la finestra "nera"). Nella modalità interattiva le istruzioni possono essere eseguite immediatamente, una alla volta, digitandole  Si chiama modalità interattiva, perché l'utente digita manulamente l'istruzione e ne vede immediatamente il risultato. Esempio: 
 +    * <code> >>> print 1 + 2
 + 3
 + >>> </code>
 +  * La modalità **non interattiva** consiste nel preparare un file di testo contenente tutte le istruzioni da far eseguire al computer (questo file si chiama programma). Per i programmi scritti in linguaggio Python è consuetudine usare l'estensione .py e per eseguirli può essere sufficiente anche farci un semplice doppio clik. In alternativa si può avviare l'esecuzione scrivendo nel terminale il comando "python nome-del-file"
 +<file python sommare.py>
 +print 1 + 2
 +</file>
 +
 +
 +===== Editor a sintassi evidenziata =====
 +
 +Il testo del programma può essere scritto usando la tastiera e qualsiasi programma editor di testo.
 +  * **Quiz**: Quali programmi editor di testo conosci?
 +  * **Quiz**: Salvano il testo in modo //formattato// oppure in modo //non formattato//?
 +  * **Quiz**: In che codifica salvano?
 +
 +Alcuni esempi di programmi che colorano le parole chiave sono:
 +
 +  * http://www.scintilla.org/SciTEDownload.html
 +  * http://notepad-plus-plus.org/
 +    
 +Alcuni di questi programmi hanno una scorciatoia anche per eseguire il codice (RUN)
 +
 +===== Traduzione =====
 +Le istruzioni scambiate tra gli uomoni sono descritte usando un linguaggio naturale. Le istruzioni contenute in un programma sono espresse in un linguaggio artificiale, per rendere più semplice la comunicazione tra uomini e macchine. 
 +Le istruzioni possono essere descritte a parola oppure tramite un diagramma. Ogni diverso tipo di istruzione, nei diagrammi di flusso, si rappresenta con una forma geometrica diversa (ad esempio, con un parallelogramma). Per poter far eseguire le istruzioni di un diagramma di flusso ad un computer, si deve effettuare una "traduzione" del diagramma in un testo. 
 +
 +===== Parole chiave =====
 +
 +Leggendo un programma troveremo delle parole della lingua inglese, come //print//, che potrebbe essere tradotto come //stampa//. Il computer non comprende la lingua umana, nè l'italiano, nè l'inglese, ma alcune di queste parole hanno un significato speciale per il computer. Se per errore si sbaglia una sola lettera, anche su una sola riga, il programma può diventare completamente incomprensibile per il computer. Nel caso dei linguaggi interpretati come Python. Cosa accade nel caso di un errore di questo tipo? L'esecuzione procede in avanti e si arresta SOLO nel punto in cui c'è un problema.
 +(cioè il programma viene sempre eseguito, fino a che è possibile farlo, anche se poi dentro si trova un errore)
 +
 +===== Esempio (output) =====
 +
 +Un programmatore deve dare delle istruzioni al computer. Ad esempio, può chiedere di stampare sul monitor il risultato di un calcolo difficile. 
 +  * **Quiz**: Come si può dare questo tipo di istruzione (stampa) usando il linguaggio Python?
 +Stampa è un'istruzione di output. Come erano rappresentate nei diagrammi di flusso queste istruzioni? Come si traducono in Python? 
 +Per iniziare con qualcosa di molto semplice, proveremo delle stupide istruzioni che fanno solo output. **Notare** che il testo si può racchiudere tra //virgolette//.
 +
 +Ad esempio:
 +<file python 01.py>
 +print "un'istruzione che stampa sempre la stessa riga"
 +</file>
 +  * **Esercizio**: provare a scrivere //prin// invece di //print// e poi provare a dimenticare le virgolette.
 +
 +Se il programmatore vuole descrivere un commento a fianco di un'istruzione usa il cancelletto
 +<file python 02.py>
 +print "Ciao a tutti!" #istruzione di output
 +</file>
 +
 +Nota: print è un costrutto predefinito del linguaggio e __non__ ci sono le parentesi. Si vedrà più avanti che questo significa che print __non__ è una funzione.
 +===== Esempio di assegnazione =====
 +Come memorizzare il risultato di un'espressione in una variabile?
 +<file python 03.py>
 +totale = 2     # inizializzazione
 +print "la variabile usata si chiama totale"
 +print "il valore calcolato vale", totale
 +</file>
 +
 +  * **Esercizio**: provare a spiegare il motivo per cui, nell'ultima istruzione, //totale// non è racchiuso dalle virgolette
 +  * **Esercizio**: per imparare a leggere le segnalazioni di errore, provare a ripetere il programma cancellando l'istruzione di inizializzazione
 +
 +===== Assegnazioni =====
 +
 +A volte capita che alcuni numeri debbano essere memorizzati, perché sono importanti per effettuare i calcoli.
 +  * Come si memorizza un numero nella memoria del computer? 
 +  * A cosa serve una variabile?
 +Per memorizzare un valore temporaneamente, si usa una zona della memoria centrale. Una variabile è una zona di memoria delimitata. Una variabile può, durante la sua vita, contenere diversi valori. 
 +<code>x = 43</code>
 +In Python la variabile viene creata quando si memorizza il primo valore. Questo istante si chiama "inizializzazione" della variabile. Una variabile non può essere usata se non è inizializzata perché non esiste. Il valore da memorizzare si trova a destra del segno di //uguale//, la variabile dove il valore viene memorizzato si trova a sinistra dell'uguale.
 +<code>x = 44</code>
 +L'assegnazione effettua la memorizzazione di un nuovo valore all'interno di una variabile, sostituendolo al precedente. 
 +Per vedere il contenuto di una variabile (che sia stata inizializzata) si può usare //print// (senza virgolette)
 +<code>print x</code>
 + Al posto di un valore numerico costante (come 44) ci può essere anche un'//espressione// mista di variabili, operatori e numeri. L'**ordine** di esecuzione è importante: prima viene valutata l'espressione a destra (44+y*2) e poi viene fatta l'assegnazione alla variabile a sinistra (x).
 +<code>x = 44+y*2    # da eseguire da destra a sinistra del segno uguale</code>
 +Per questo motivo spesso l'assegnazione viene rappresentata nei libri di testo anche con una freccia da destra a sinistra:
 +<code>x = 44</code>
 +<code>x ← 44</code>
 +È possibile assegnare una variabile su se stessa: 
 +<code>x = x        # assegnazione abbastanza inutile</code>
 +Quello che segue è un esempio di un'istruzione di assegnazione su una variabile che modifica se stessa (attenzione! eseguire prima l'espressione a destra del segno uguale e poi quella a sinistra)
 +<code>x = x + 1     # il nuovo valore di x è 45      </code>
 +La precedente scrittura, ovviamente, non deve essere letta come se fosse un'equazione matematica...
 +In Python, invece di scrivere
 +<code>b = 8
 +c = 11</code>
 +è più efficiente scrivere
 +<code>b, c = 8, 11</code>
 +
 +===== Esempio (input) =====
 +
 +Se invece il programmatore vuole ricevere i dati dall'esterno, deve usare un'istruzione di input, ma deve anche specificare la variabile dove memorizzare l'input.
 +
 +<file python 04.py>
 +# nome e' una variabile su cui si esegue un'istruzione di assegnazione
 +nome = raw_input("digita il tuo nome e cognome e premi invio, grazie.\n")
 +print "ciao a tutti, tranne che a", nome
 +</file>
 +  * **Quiz**: di che tipo è la variabile nome? Contiene un numero o un testo?
 +  * **Esercizio**: provare a togliere "\n" per capire a cosa serve
 +
 +Nota: //raw_input()// usa le parentesi tonde, si vedrà più avanti che si tratta, quindi, di una funzione
 +
 +raw_input() memorizza **come testo** una o più parole in input. Per chiedere in input dei numeri sarebbe necessario applicare una trasformazione, che rimandiamo a più avanti. Per ora, per semplicità, quando dobbiamo leggere dei numeri usiamo la funzione //input()//
 +
 +<file python 05.py>
 +# anno e' una variabile che contiene un numero intero
 +anno = input("digita il tuo anno di nascita e premi invio, grazie.\n")
 +print "sei nato nel", anno
 +</file>
 +
 +  * **Esercizio**: cosa accade se l'utente digita un carattere non numerico?
 +
 +===== Esempi di operazioni =====
 +
 +Continuiamo con una serie di istruzioni molto semplici, solo per capire come il computer esegue le operazioni matematiche per i numeri interi e per i numeri con la virgola mobile. **Nota**: nel mondo anglosassone si usa il punto al posto della virgola.
 +<file python 06.py>
 +print "la somma di 11 piu' 2 fa sempre", 11+2
 +print "il rapporto tra 11 e 2 fa sempre", 11/2
 +</file>
 +
 +<file python 07.py>
 +print "la somma di 11.0 piu' 2.0 fa sempre", 11.0+2.0
 +print "il rapporto tra 11.0 e 2.0 fa sempre", 11.0/2.0
 +</file>
 +  * **Esercizio**: provare a spiegare perchè i due programmi mostrano un risultato diverso
 +  * **Esercizio**: provare a scrivere un programma che chieda all'utente di inserire base ed altezza di un rettangolo (due numeri interi) e che visualizzi automaticamente l'area. (nota: tradurre il diagramma di flusso [[appunti3s:introduzione_alla_programmazione#esempio]]
 +  * **Quiz**: cosa visualizzerà il seguente programma? Quanto fa 1.1 meno 1.0 ? Provare...
 + 
 +<file python 08.py>
 +differenza = 1.1 - 1.0
 +print "differenza tra 1.1 e 1.0", differenza
 +print "ripeto: differenza tra 1.1 e 1.0", "%.19f" % differenza
 +</file>
 +
 +  * **Quiz**: cosa visualizzerà il seguente programma ESEGUITO DA LINEA DI COMANDO?
 +<code> >>> 1.1-1.0   # non usare print...</code>
 +
 +  * **Soluzione**: il risultato della differenza è diverso per colpa di //print// che tronca le cifre decimali. Inoltre questo esempio mostra che la conversione dei numeri con la virgola in base 2 non è sempre esatta... abbiamo scoperto chè il computer è preciso, ma solo per la matematica in base due. Allora, il calcolo delle tasse da pagare, conviene farlo con carta e penna oppure al computer? :) 
 +
 +Cosa accade se proviamo a sommare due caratteri alfanumerici?
 +<file python 09.py>
 +operazione = 'a' + 'b'
 +print "sommando a e b si ottiene", operazione
 +</file>
 +Il risultato è diverso dalla somma dei numeri per questo motivo questa operazione è detta "concatenazione".
 +  * **Esercizio**: cosa si ottiene provando a sommare due caratteri come : '2' + '1' ?
 +  * **Esercizio**: cosa si ottiene provando a sommare un carattere e un numero: '2' + 1 ?
 +===== Tipo di dato =====
 +Il valore contenuto in una variabile può essere modificato, ma deve essere sempre dello stesso tipo.
 +Abbiamo già usato diversi tipo di dato: nei precedenti esempi si è visto che le variabili possono contenere numeri interi e numeri con la virgola e che i risultati delle operazioni (come la divisione) possono essere diversi se non si presta attenzione al tipo di dato. 
 +Si è visto infatti che, se forniamo due numeri interi e li dividiamo, l'interprete Python propone un risultato a sua volta intero.
 +
 +Quali tipi di dato abbiamo usato in Python? 
 +  - Tipo intero: -3, 44, ...
 +  - Tipo virgola mobile: 4.15, 980.00, ...
 +  - Tipo carattere alfanumerico: 'z', '?', ...
 +  * Ogni tipo di dato (intero, carattere, ecc.) richiede una quantità di memoria diversa dall'altro. Ad esempio, per una variabile che contiene un numero intero (800) può essere necessario riservare 1 Byte, mentre, per una variabile che contiene un numero in virgola mobile (5.077e-3), può essere necessario riservare 4 Byte. La dimensione di questi tipi di dati in memoria dipende anche dal sistema operativo e dal tipo di CPU che utilizza il computer. Esempio: cpu a 32 bit, cpu a 64 bit
 +  * Ogni tipo di dato offre la possibilità di effettuare un certo tipo di operazioni invece di altre: il tipo carattere non può essere sommato come il tipo intero. 
 +
 +Esistono due tipi di linguaggi:
 +  * nei primi, detti fortemente tipizzati, una variabile può essere creata per contenere un solo tipo di dato, quindi il linguaggio è detto //fortemente tipizzato//
 +  * nei secondi, i //debolmente tipizzati//, il tipo di dato a cui appartiene una variabile si può cambiare più facilmente.
 +
 +Esistono i tipi primitivi predefiniti (built-in), come //bool//, //int//, //long//, //float//, //str//, //list//, ma il programmatore può creare anche nuovi tipi di dati. 
 +Inoltre la libreria standard fornisce nuovi tipi di dati come //array// 
 +
 +
 +
 +===== Esercizi =====
 +
 +Preparare una mappa concettuale con gli argomenti di questo capitolo (parole chiave)
 +
 +Preparare programmi che devono essere copiati, ma senza fare copia incolla.
 +
 +Scovare gli errori nei programmi
 +
 +Indovinare il risultato dei programmi