22
Orario:
2 pause da 15 minuti
9.00 - 10.00
10.15 - 11.15
11.30 - 12.30
Per contattare:
niki.martinel@uniud.it
oggetto: [LPSM-2021]
Ricevimento: Tutti lunedì 9.30 -10.30, questo è l’orario è durante la lezione bisogna mandare e-mail
e ci si accorda.
Programma:
- Linguaggi di programmazione attraverso Python e le sue funzionalità di base.
- Comprendere la notazione per l’accesso agli elementi di un vettore NumPy
- Elaborare una stringa allo stesso modo in cui si processa un vettore di numeri
Cosa vuol dire programmare? Vado a dire al pc le regole che deve seguire per svolgere l’azione,
istruire il pc per eseguire le mie richieste/ esigenze del momento.
Il programma avendo dato l’input che abbiamo, svolgerà un output che ti permette di eseguire la
richiesta.
Un qualcosa che si può usare per svolgere un determinato compito con il computer.
Linguaggio di programmazione= ogni programma ha una sintassi diversa (regole proprie del
linguaggio di programmazione che vanno rispettate, quando noi andiamo a usate quel programma).
Un modo di tradurre la logica umana in istruzioni comprensibili per il computer come i linguaggi
umani, esistono moltissimi linguaggi (spesso simili, spesso differenti tra loro), ciascuno con uno
specifico set di regole (sintassi, grammatica) da seguire
È usato dalla nasa, da google, facebook, amazon,…, industrial light magic ( quelli che fanno effetti
speciali per star wars), ecc…
Dove e come?
à esercitarsi
• Python dispone di un interprete interattivo molto comodo e potente che può essere usato
direttamente dalla shell dei comandi
• Come già visto nelle precedenti lezioni noi utilizzeremo Google Colab ( IPython) portale e-learning
( ti porta in un ambiente che andremo a fare i compitini, ma lo possiamo usare anche per esercirarci
)
• Visualizzare «come funziona» uno script, capire linea per linea quello che sta facendo.
• Capire come le variabili sono usate e modificate
https://pythontutor.com/
L’interprete
• I file sorgente Python sono file di testo, generalmente con estensione “.py ”
• Le istruzioni sono separate dal fine riga e non da “ ; ”
• Per far continuare un’istruzione anche sulla linea successiva è necessario inserire un “\” a fine riga
• Se le parentesi non sono state chiuse correttamente Python capisce che l’istruzione si estende
anche sulla riga successiva
Hello World
• L’istruzione “print” stampa il suo argomento trasformandolo in una stringa
>>> print(5)
5
>>> print("Hello world")*
Hello world
*Il nome della funzione, aperta parentesi, nome della stringa e chiusa patentesi.
Python basics
I numeri
• I numeri vengono definiti in questo modo:
• 42 (intero, decimale)
• 0x2A (intero, esadecimale) à forma esadecimale
• 0.15 (floating point, formato normale)
• 1.7e2 (floating point, formato esponenziale)
• Lo “0” iniziale o finale può essere omesso:
• “.5” è “0.5”
• “5.” è “5.0”
• float(x) ritorna x convertito in floating point : es. io scrivo ‘13.2’ e lui capisce che è numero
anche se è sotto forma di stringa.
• float("13.2") → 13.2
• float(42) → 42.0
Variabili: Parole chiavi che tramite codice usiamo per contenere delle informazioni.
• I nomi di variabili sono composti da lettere, numeri e underscore, il primo carattere non può
essere un numero (come in C)
• Sono validi:
• x, ciao, x13, x1_y, _, _ciao12
• Non sono validi:
• 1x, x-y, $a, àñÿô (inizia con un numero o anche il carattere, per questo non è
valido)
• Le variabili non devono essere dichiarate (Tipizzazione dinamica), ovvero posso usare le variabili
assegnandole i dati senza specificare il tipo di dato che deve essere contenuto in quella variabile
• Una variabile non può essere utilizzata prima che le venga assegnato un valore
Assegnazione
• L’assegnazione avviene attraverso l’operatore = (X contiene quel numero, ovvero si va ad
assegnare a x quel numero)
• Esempio:
>>> x = [0, 1, 2]
>>> y = x
>>> x.append(3)
>>> print y [0, 1, 2, 3]
Esempi:
• >>> x=5
• >>> nome = ‘Marco’
• Sintetico
• >>> inizio, fine = 2, 100
VERO E FALSO:
In Python esistono due variabili di tipo booleano:
True uguale a 1 e False uguale a 0
• Gli altri valori sono considerati True, numero diverso da zero, striga al cui interno c’è assegnato
qualcosa
Input e Output
• Si può formattare l’output in questo modo:
• >>> x=18; y=15
• >>> print(‘x={} y={}’.format(x,y))
x=18 y=15
ho una stringa apice x e y un .format alla stringa che mi precede e sostituisci in ordine i valori
di x e y
>>> x=18
>>> y=15
>>> ‘x è uguale a (), y è uguale a ()’
‘x è uguale a (), y è uguale a ()’
>>> ‘x è uguale a (), y è uguale a ()’ .format (x,y) à oggetto stringa, per questo metto gli
apici
‘x è uguale a 18, y è uguale a 15’
>>> print (‘x è uguale a (), y è uguale a ()’ .format (x,y)) à mi stampa il risultato
x è uguale a 18, y è uguale a 15
strutture dati: rappresentazioni interne, tale che io li uso per contente le informazioni diverse
Ci sono tre topi di strutture dati:
- Liste
- Trupe
- Dizionari
Come lo slice in javascript: considera i elemento della sottolista e prende i valori della lista
escluso l’ultimo elemento
>>> [2,3,5,7] [1:4]
[3,5,7]
LISTE I METODI
Alcuni tra i metodi più comunemente usati:
• L.append(obj), aggiunge obj in fondo ad L à procedure che prendono una serie di valori e
vanno a modificare con il contenuto dell’oggetto su cui io sto chiamando l’esecuzione della
funzione ( a distanza L vado ad interagire con il suo contenuto)
Aggiunge un oggetto che è un numero, nome, ecc.., alla fine
• Tutti “in place”! Viene modificata la lista, non viene ritornata una nuova lista
• Attenzione: l’operatore + rispetto ad append crea una nuova lista (es. slide precedente)
TUPLE: simile alle liste, ma invece di usare le parentesi quadrate usano le parentesi tonde. Sono
oggetti, che io non posso modificare, quando finisco un tupla, il contenuto non lo posso più
modificare.
Possono omettere le parentesi tonde.
• L’accesso e l’inserimento di elementi avviene come per le liste ma al posto dell’indice di posizione
della lista uso la «chiave»
•--"a": 1, "b": 2}["a"] → 1 (à nelle parentesi quadre inserisco la stringa non specificando
l’indice ma specificando la chiave)
• {"a": 1, "b": 2}["X"] → Errore!
• {}["X"] = 2 → {'X': 2} à al dizionario vuoto aggiunge la coppia chiave:valore
DIZIONARI I METODI:
• Alcuni metodi principali dei dizionari sono:
• D.clear() elimina tutti gli elementi dal dizionario
In Phyton questo simbolo >>> indicatore che mi dice che sto lavorando su quella linea
• del x cancella la variabile x, cioè non si potrà più usare x senza averle prima assegnato un nuovo
valore
>>> l2 = [1, 2, 3, 4]
>>> del l2[1:3] → l2 = [1, 4]
ALTRI OPERATORI DI CONTROLLO IS e IN
• in, vero se il primo operando è contenuto nel secondo
• 5 in [1, 2, 3] → Falso
Bisogna vedere se il 5 sia contenuto nella lista.
• 2 in [1, 2, 3] → Vero
• "a" in {"x": 1, "a": 2} → Vero
• "a" in "ciao" → Vero
Mi restituisce un valore vero o falso, e indica se l’oggetto contenuto a sinistra dell’in sia contenuto
dell’oggetto a destra dell’in
PASS
• Come tradurre il seguente codice in Python?
if (a){} /* Oppure "if (a);" */ b = 12;
• In Python dopo un if deve esserci un blocco indentato if a: b = 12 # Dovrebbe essere indentato!
• Si usa quindi l’istruzione pass che non ha nessun effetto if a: pass # Non fa nulla b = 12
FUNZIONI BUILT – IN
• range([start,] end[, step]) restituisce una lista contenente gli interi in [start, end).
• step è l’incremento, il valore di default è “+1”.
• Il valore di default di start è “0”
• Molto usato con i cicli “for”
• for i in range(5): print(i)
• len(seq) ritorna il numero di elementi in seq
• len("ciao") → 4
• len("x\0x") → 3 ( lo slash è un carattere speciale e non viene contato)
• len([1, 2, 3]) → 3 (contati gli elementi all’interno della lista )
• len({"a": 1, "b": 5}) → 2 (vengono contate le coppie)
CICLI WHILE ripete infinite volte il ciclo
• La sintassi è:
while condizione:
...
while i < 10
…
• Si può uscire dal ciclo usando break (comando che fa si che il primo ciclo superiore dove trova
all’interno questa parola, viene interrotto)
• Si può passare all’iterazione successiva usando continue (istruzione, che obbliga il programma a
rivalutare il ciclo). Nel momento in cui raggiungo quel comando …
• Esempio:
while 1:
# significa ciclo infinito
if condizione1:
continue (con il continue le prossime due funzioni non vengono
considerate, perché si ferma alla prima condizi)
if condizione2:
break
print(42)
1 foto
CICLO FOR
• La sintassi è:
for variabile in iterator:
...
ESEMPI:
Mi stampa il contenuto dello studente, per ciascun elemento nella lista student, stampo solo quella,
in ordine come è scritto nella lista.
Se io volessi sommare i valori con 10. Definisco la variabile sum( che equivale a 0), dove per ogni x
(ha un range con un valore incluso à 1, e un valore escluso à 11), si ha sum che viene sommato a
x.
Esempio for:
Versione breve
Valori:
- Start: len(valori)
- Stop: -1
ESERCIZIO:
NAMES = [ Al, Bob, Carl, Dylan, Elon]
Names[0] Names[1] Names[2] Names[3] Names[4]
LE STRINGHE
• Le stringhe sono racchiuse fra apici singoli o doppi
>>> 'Python’
'Python'
>>> print("Ciao\mondo")
'Ciao'
'mondo’
• For e stringhe
nome=”Gianluigi”
for c in nome:
print(c)
STR E REPR
• str(x) ritorna x convertito in stringa
• repr(x) ritorna una stringa che rappresenta x, normalmente più vicino a ciò che “x” è realmente
ma meno “bello” di ciò che è ritornato da “str”
print("ciao\n\tmondo») → ciao
mondo print(repr("ciao\n\tmondo")) → 'ciao\n\tmondo'
print(ogg) → Questo è un oggetto
print(repr(ogg)) → < class C at 0x008A6570 >
• S.join(seq) ritorna una stringa contenente gli elementi di seq uniti usando S come delimitatore
• S.find(what[, start[, end]]) ritorna il primo indice di what in S[start, end]. Se la sottostirnga non è
trovata ritorna -1
• S.replace(old, new[, max]) ritorna una copia di S con max occorrenze di old sostituite con new. Il
valore di default di max è tutte.
• S.lstrip(), S.rstrip() come “strip” ma eliminano rispettivamente solo gli spazi iniziali e finali
FORMATTAZIONE: sostituire quello che prima è passata alla funzione, rimpiazzando il valore tra le
parentesi graffe
• La funzione S.format() serve per formattare le stringhe
• S.format(valori)
Parametri obbligatori vengono inseriti nei paragrafi opzionali (assegno un valore di default), e lo
specifica in questo modo:
opz1=val1
• Gli argomenti opzionali possono non essere specificati dal chiamante, in questo caso assumono il
valore di default