Elementi base di un linguaggio 1. Dati numerici (3, 4, 1.41) e booleani (True, False) 2. Operatori aritmetici, in notazione prefix (add, sub, mul, truediv) o post-fix (+, -, *, /, //, %) 3. Operatori di confronto (>, >=, <, <=, ==, !=) 4. Operatori logici (and, or, not) 5. La definizione di procedure, eventualmente ricorsive, tramite le parole chiavi def e return () 6. La procedura print()e il comando who 7. Le funzioni type() e help 8. La parola chiave yield 9. Le funzioni iter()e next()
33
Embed
Elementi base di un linguaggio - · Application Programming Interface (API) Struttura dati per gestire una coppia di numeri Abbiamo usato le coppie di Python v v 2 3 Struttura dati
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Elementi base di un linguaggio
1. Dati numerici (3, 4, 1.41) e booleani (True, False)
2. Operatori aritmetici, in notazione prefix (add, sub, mul, truediv) o post-fix (+, -, *, /, //, %)
3. Operatori di confronto (>, >=, <, <=, ==, !=)
4. Operatori logici (and, or, not)
5. La definizione di procedure, eventualmente ricorsive, tramite le parole chiavi def e return ()
6. La procedura print()e il comando who
7. Le funzioni type() e help
8. La parola chiave yield
9. Le funzioni iter()e next()
Controllo del flusso di un blocco di codice
1. Espressioni condizionali:
if <predicato1>:
<block1>
elif <predicato2>:
<block2>
else:
<block3>
2. Cicli condizionali (blocco di codice ripetuto):
while <predicato>:
<block1>
# Per “rompere” il ciclo: break
3. Cicli iterativi su dati composti o generators (e.g., range). Un tipo di dato“iterabile” supporta le funzione iter()e next()
for <nome_variable> in <iterabile>:
<block1>
Concetti di Programmazione1. Valutazione di espressioni semplici e composte tramite
il ciclo read-evaluate-printa) Metodo di sostituzione: prima valuta gli argomenti e poi
sostituisci, chiamato “applicative-order evaluation”
b) Prima sostituisci le procedure e poi riduci, chiamato“normal-order evaluation”
2. Ricerca di un valore per (e.g., radice quadrata di x):a) Ricerca per enumerazione esaustiva
b) Ricerca per bisezione
c) Ricerca per approssimazioni successive (e.g., Newton)
3. Processi di calcolo:a) Processo ricorsivo lineare (e.g. Fattoriale)
b) Processo iterativo lineare (e.g. Fattoriale)
c) Processo con ricorsione ad albero (e.g. Fibonacci)
Errori Comuni 1/2• Errori di sintassi:
• Errori di mancata definizione di variabili:
Errori Comuni 2/2• Errori sul limite Massimo di chiamate ricorsive :
• ValueError: invalid literal for int() with base 10: '3.0'
• AttributeError: readonly attribute (z.real = 3)
• NameError: name 'x' is not defined (dopo del x)
• TypeError: unsupported operand type(s) for ** or pow(): 'str' and 'int‘
• TypeError: 'int' object is not iterable
• StopIteration: chiamata a next() su un iteratore vuoto
Handling Exceptions
Gli errori precedenti sono generate dal commando
raise ValueError(‘Vostro msg errore’)
E possono essere gestiti tramite i comanditry:
ChiamataFunzione()
except ValueError:
print(‘decidete voi cosa fare, ma no crash!’)
Plot di funzioni
Abbiamo definito dati composti usando gli elementi base del linguaggio con due esempi fondamentali:
1. I numeri razionali, definiti da numeratore e denominatori (esempio: 3/2)
2. Le pairslist, definiti come catena di coppie
Entrambi i tipi di dati sono definiti a partire dalle coppie(pairs) che sono in pratica tuple di lunghezza due.
Strutture dati composte (ricorsive)
1
v v v v
2 3
v v
4
v v
v v 2
3
Application Programming Interface (API)
Struttura dati per gestire una coppia di numeri
Abbiamo usato le coppie di Pythonv v 2
3
Struttura dati “Num. Razionale”: MakeQ, Num, Den
Definizione COSTRUTTORE E SELETTORI
def MakeQ(n, d):
def Num(x):
def Den(x):
Definizione delle procedure AddQ, SubQ, EqualQ,…
Definizione Funzioni aritmetiche per i numeri razionali
def Equal(x, y):
def AddQ(x):
def SubQ(x):
…
Programmi che usano i numeri razionali
Numeri razionali usati in una certa applicazione
Funzioni per creare un nuovo oggetto di “tipo” pairslist, ovvero i COSTRUTTORI:
def EmptyList():
return ‘EL’
def MakeList(x, y=EmptyList()):
return (x, y)
Funzioni per accedere ai dati base del dato composto pairslist, ovvero i SELETTORI:
Pairslist
def Head(As):
return As[0]
def Tail(As):
return As[1]
def Nth(As, i):
if IsEmptyList(As):
return As
if i == 0:
return Head(As)
return Nth(Tail(As), i-1)
def MakeRange(a, b):
def MakeI(n):
if n > b:
return EmptyList()
return MakeList(n, MakeI(n+1))
return MakeI(a)
Application Programming Interface (API)
Definizione di funzioni per “usare” le pairslist
Funzioni più comuni per sequenze di oggetti
def Equal(x, y):
def Append(x):
def Length(x):
…
Funzioni che individuano Pattern per le pairslist
Funzioni molto importanti
def Map(x, y):
def Filter(x):
def Reduce(x):
…
Programmi che usano le pairslist
Pairslist usate in programmi di “alto livello”
Supporto di base per struttura dati “PairsList”
Definizione COSTRUTTORE E SELETTORI
def MakeList(x,y):
def Head(As):
def Tail(As):
def EmptyList():
Nel definire le funzioni di base sulle pairslist, si possono notare degli schemiricorrenti (“pattern”) che ci permettono di definre tre procedure molto generali cheoperano su sequenze di oggetti:
Funzioni su Pairslist: pattern ricorrenti
def Map(F, As): # “F” è una funzione
if IsEmptyList(As):
return As
return MakeList(F(Head(As)), Map(F, Tail(As)))
def Filter(P, As): # “P” è un predicato
if IsEmptyList(As):
return As
if P(Head(As)):
return MakeList(Head(As), Filter(P, Tail(As)))
return Filter(P, Tail(As))
# Chiamata anche FoldRight
def ReduceR(Op, As, z): # “Op” è una funzione che prende due input
if IsEmptyList(As):
return z
return Op(Head(As), ReduceR(Op, Tail(As), z))
Abbiamo notato come molte delle funzioni della tabella precedente possano esseredefinite in termini della funzione “Fold”, e che la stessa può essere definita in due modi: ReduceRight(FoldRight) e ReduceLeft (FoldLeft)
Abbiamo notato come molte delle funzioni della tabella precedente possano esseredefinite in termini della funzione “Fold”, e che la stessa può essere definita in due modi: FoldRight e FoldLeft
Documentazione con tutte le possibili ECCEZIONI:https://docs.python.org/3/library/exceptions.html
Documentazione con tutti i possibili METODI DI OVERLOADING:https://docs.python.org/3/reference/datamodel.html
Documentazione sulle CLASSI:https://docs.python.org/3.6/tutorial/classes.html
Documentazione sulle LISTE:https://docs.python.org/3/tutorial/datastructures.html
Svolgete i temi d’esame
Il sito del corso verrà aggiornato sino all’esame:
Come prepararsi per l’esame
Avete a disposizione il seguente materiale didattico:
1. 15 Notebooks, sia in HTML che il codice sorgente, con esercizi proposti
2. Diversi insiemi dei lucidi (slides in .pdf) di argomenti trattatisolo in parte nei notebooks
3. 8 Esercitazioni con soluzioni (da fare, e rifare, e rifare,…)4. Tutti i temi d’eame del 2018 con la soluzione5. Tutti i temi d’eame del 2019 senza soluzione6. Avete la documentazione online di Python (da leggere!)7. Avete accesso alla biblioteca per cercare libri da consultare
per approfondire eventualmnete degli argomenti
Come prepararsi per l’esame
Avete a disposizione il seguente materiale didattico:
1. 15 Notebooks, sia in HTML che il codice sorgente, con esercizi proposti
2. Diversi insiemi dei lucidi (slides in .pdf) di argomenti trattatisolo in parte nei notebooks
3. 8 Esercitazioni con soluzioni (da fare, e rifare, e rifare,…)4. Tutti i temi d’eame del 2018 con la soluzione5. Tutti i temi d’eame del 2019 senza soluzione6. Avete la documentazione online di Python (da leggere!)7. Avete accesso alla biblioteca per cercare libri da consultare
per approfondire eventualmnete degli argomenti
Programmare, programmare, e programmare
Soprattutto: Svolgete i temi d’esame!
Se avete dei dubbi sulle soluzioni, scrivetemi un email e chiedete ricevimento