Table of Contents

Python

Prerequisiti

  1. conoscere il concetto di variabile e costante
  2. conoscere il concetto di algoritmo
  3. saper trovare un algoritmo risolutore di un problema generico
  4. conoscere la differenza tra programmatore ed utente
  5. conoscere la differenza tra linguaggio compilato ed interpretato
  6. conoscere la differenza tra programma nel terminale e GUI.

Cosa faremo?

Sperimenteremo per la prima volta 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.

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.

sommare.py
print 1 + 2

Editor a sintassi evidenziata

Il testo del programma può essere scritto usando la tastiera e qualsiasi programma editor di testo.

Alcuni esempi di programmi che colorano le parole chiave sono:

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.

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:

01.py
print "un'istruzione che stampa sempre la stessa riga"

Se il programmatore vuole descrivere un commento a fianco di un'istruzione usa il cancelletto

02.py
print "Ciao a tutti!" #istruzione di output

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?

03.py
totale = 2     # inizializzazione
print "la variabile usata si chiama totale"
print "il valore calcolato vale", totale

Assegnazioni

A volte capita che alcuni numeri debbano essere memorizzati, perché sono importanti per effettuare i calcoli.

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.

x = 43

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.

x = 44

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)

print x

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).

x = 44+y*2    # da eseguire da destra a sinistra del segno uguale

Per questo motivo spesso l'assegnazione viene rappresentata nei libri di testo anche con una freccia da destra a sinistra:

x = 44
x ← 44

È possibile assegnare una variabile su se stessa:

x = x        # assegnazione abbastanza inutile

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)

x = x + 1     # il nuovo valore di x è 45      

La precedente scrittura, ovviamente, non deve essere letta come se fosse un'equazione matematica… In Python, invece di scrivere

b = 8
c = 11

è più efficiente scrivere

b, c = 8, 11

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.

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

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()

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

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.

06.py
print "la somma di 11 piu' 2 fa sempre", 11+2
print "il rapporto tra 11 e 2 fa sempre", 11/2
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
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
 >>> 1.1-1.0   # non usare print...

Cosa accade se proviamo a sommare due caratteri alfanumerici?

09.py
operazione = 'a' + 'b'
print "sommando a e b si ottiene", operazione

Il risultato è diverso dalla somma dei numeri per questo motivo questa operazione è detta “concatenazione”.

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?

  1. Tipo intero: -3, 44, …
  2. Tipo virgola mobile: 4.15, 980.00, …
  3. Tipo carattere alfanumerico: 'z', '?', …

Esistono due tipi di linguaggi:

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