77

Trendiest programming languages of 2019Python 2 o 3 •Per un’introduzione preliminare, non ci sono differenze significative •Forse la principale è printche diventa una funzione

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Trendiest programming languages of 2019Python 2 o 3 •Per un’introduzione preliminare, non ci sono differenze significative •Forse la principale è printche diventa una funzione
Page 2: Trendiest programming languages of 2019Python 2 o 3 •Per un’introduzione preliminare, non ci sono differenze significative •Forse la principale è printche diventa una funzione

Trendiest programming languages of 2019

https://learnworthy.net/trendiest-programming-languages-of-2019/

Page 3: Trendiest programming languages of 2019Python 2 o 3 •Per un’introduzione preliminare, non ci sono differenze significative •Forse la principale è printche diventa una funzione

Python

• Python è un linguaggio di programmazione dinamico orientato agli oggetti utilizzabile per molti tipi di software

• È fornito di una buona libreria standard ed è facilmente estendibile

• Python è distribuito con licenza Open-Source– È multipiattaforma

• www.python.it• www.python.org

Page 4: Trendiest programming languages of 2019Python 2 o 3 •Per un’introduzione preliminare, non ci sono differenze significative •Forse la principale è printche diventa una funzione

Python 2 o 3

• Per un’introduzione preliminare, non ci sono differenze significative

• Forse la principale è print che diventa una funzione – e non è più un’istruzione

We have decided that January 1, 2020, was the day that we sunset Python 2. That means that we will

not improve it anymore after that day, even if someone finds a security problem in it. You should

upgrade to Python 3 as soon as you canpython.org

Page 5: Trendiest programming languages of 2019Python 2 o 3 •Per un’introduzione preliminare, non ci sono differenze significative •Forse la principale è printche diventa una funzione

Funzioni e metodi

• v.f() è un metodo• I metodi possono inizialmente essere considerati

come delle funzioni applicate (anche) sulla variabile prima del punto

• Il codice Python– "CIAO".lower()

• è equivalente al seguente codice C– lower(”CIAO");

Page 6: Trendiest programming languages of 2019Python 2 o 3 •Per un’introduzione preliminare, non ci sono differenze significative •Forse la principale è printche diventa una funzione

Interprete interattivo

• Python offre un interprete pronto a riceverecomandi

• Possiamo inserire qualsiasi costrutto del linguaggio e vedere immediatamente l’output

Python 3.7.4 (default, Sep 7 2019, 18:27:02)[Clang 10.0.1 (clang-1001.0.46.4)] on darwinType "help" …>>> 3+58>>> print("Ciao")Ciao>>> print('Ciao')Ciao>>>

Page 7: Trendiest programming languages of 2019Python 2 o 3 •Per un’introduzione preliminare, non ci sono differenze significative •Forse la principale è printche diventa una funzione

Comandi

• I comandi si possono inserire direttamente dallo standard input

• I file sorgente Python sono file di testo, generalmente con estensione .py

• Un programma Python si esegue con il comando– python file.py

Page 8: Trendiest programming languages of 2019Python 2 o 3 •Per un’introduzione preliminare, non ci sono differenze significative •Forse la principale è printche diventa una funzione

Comandi

• # inizia un commento che si estende fino a fine riga

• Le istruzioni sono separate da 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

Page 9: Trendiest programming languages of 2019Python 2 o 3 •Per un’introduzione preliminare, non ci sono differenze significative •Forse la principale è printche diventa una funzione

Input e Output

• Print stampa il suo argomento come una stringa• Più argomenti separati da un virgola sono

stampati separati da uno spazio

>>> print(5)5>>> print("Ciao")Ciao>>> print('Ciao')Ciao>>> print('Ciao', "classe")Ciao classe>>>

Page 10: Trendiest programming languages of 2019Python 2 o 3 •Per un’introduzione preliminare, non ci sono differenze significative •Forse la principale è printche diventa una funzione

Input e Output

• Si può formattare l’output come in c• Per leggere un dato si usa input()

– La funzione restituisce sempre una stringa– int(), float() consentono di convertire facilmente il

valore ottenuto

>>> x=18>>> y=15>>> print("x= %d y= %d" % (x,y))x= 18 y= 15>>> print("x=", x, "y=", y)x= 18 y= 15>>> v=input("inserisci un numero: ")inserisci un numero: 45>>> n=int(v)>>> print(n)45>>>

Page 11: Trendiest programming languages of 2019Python 2 o 3 •Per un’introduzione preliminare, non ci sono differenze significative •Forse la principale è printche diventa una funzione

Numeri

• Stessi operatori del C– Le parentesi possono essere usate per raggruppare:

• Esiste anche l’operatore elevamento a potenza **• Non esistono ++ e —• 3/2 è 1.5• 3.0//2 è la divisione intera (1)

Page 12: Trendiest programming languages of 2019Python 2 o 3 •Per un’introduzione preliminare, non ci sono differenze significative •Forse la principale è printche diventa una funzione

Variabili

• I loro nomi sono come in C• Non devono essere dichiarate

– Tipizzazione dinamica

• Non possono essere utilizzate prima che vengaloro assegnato un valore

• Possono riferirsi ad elementi di qualsiasi tipo

>>> x=5>>> nome='Marco'>>> print(x,nome)5 Marco>>> x, nome = "Marco",5>>> print(x,nome)Marco 5>>>

Page 13: Trendiest programming languages of 2019Python 2 o 3 •Per un’introduzione preliminare, non ci sono differenze significative •Forse la principale è printche diventa una funzione

Gerarchia concettuale

• I programmi sono da moduli• I moduli sono composti da istruzioni• Le istruzioni contengono espressioni• Le espressioni creano e gestiscono oggetti

• Qualsiasi cosa è un oggetto in Python

Page 14: Trendiest programming languages of 2019Python 2 o 3 •Per un’introduzione preliminare, non ci sono differenze significative •Forse la principale è printche diventa una funzione

Creazione

• L’oggetto contiene due meta-dati– Un identificatore di tipo– Un contatore per il numero di riferimenti

Page 15: Trendiest programming languages of 2019Python 2 o 3 •Per un’introduzione preliminare, non ci sono differenze significative •Forse la principale è printche diventa una funzione

C

int v = 0;

v 0

Page 16: Trendiest programming languages of 2019Python 2 o 3 •Per un’introduzione preliminare, non ci sono differenze significative •Forse la principale è printche diventa una funzione

C e Python

int v = 0; v = 0;

v 0 0v

Page 17: Trendiest programming languages of 2019Python 2 o 3 •Per un’introduzione preliminare, non ci sono differenze significative •Forse la principale è printche diventa una funzione

I tipi dipendono dagli oggetti

• Cosa succede?• I nomi delle variabili non hanno tipo

– Sono dei riferimenti

• Gli oggetti senza riferimenti sono cancellati (garbage collection)– Si usa il contatore di riferimenti

>>> a = 3>>> a = ‘cremona’>>> a = 1.23

Page 18: Trendiest programming languages of 2019Python 2 o 3 •Per un’introduzione preliminare, non ci sono differenze significative •Forse la principale è printche diventa una funzione

Riferimenti condivisi

Page 19: Trendiest programming languages of 2019Python 2 o 3 •Per un’introduzione preliminare, non ci sono differenze significative •Forse la principale è printche diventa una funzione

Stringhe

• Sono racchiuse fra apici singoli o doppi• Le stringhe sono immutabili

• Stessi caratteri speciali del c (ad esempio, \n)• Si possono usare alcuni operatori visti per i numeri

– + concatenazione– * ripetizione

>>> 'Python''Python'>>> print("Ciao\nmondo")Ciaomondo>>> 'ciao'+" mondo"'ciao mondo'>>> 'ciao'*3'ciaociaociao'

Page 20: Trendiest programming languages of 2019Python 2 o 3 •Per un’introduzione preliminare, non ci sono differenze significative •Forse la principale è printche diventa una funzione

Sottostringhe

>>> 'ciao'[1]'i'>>> 'ciao'[1:3]'ia'>>> 'ciao'[2:]'ao'>>> 'ciao'[:3]'cia'>>> 'ciao'[-1]'o'>>> 'ciao'[:-2]'ci'>>> 'ciao'[-1:1]''>>> 'ciao'[2]='x’<error>

Page 21: Trendiest programming languages of 2019Python 2 o 3 •Per un’introduzione preliminare, non ci sono differenze significative •Forse la principale è printche diventa una funzione

Slicing

>>> S = ‘abcdefghijklmnop’>>> S[1:10:2]‘bdfhj’>>> S[::2]‘acegikmo’

>>> S = ‘hello’>>> S[::-1]>>> ‘olleh’

Page 22: Trendiest programming languages of 2019Python 2 o 3 •Per un’introduzione preliminare, non ci sono differenze significative •Forse la principale è printche diventa una funzione

Alcuni metodi per stringhe

• split()• join()• lower()/upper()• find()• replace()• strip()/lstrip()/rstrip()• isalpha()/isdecimal()/isdigit()• islower()

Page 23: Trendiest programming languages of 2019Python 2 o 3 •Per un’introduzione preliminare, non ci sono differenze significative •Forse la principale è printche diventa una funzione

Metodi specifici>>> S = ‘Spam’>>> S.find(‘pa’)1>>> S‘Spam’>>> S.replace(‘pa’, ‘XYZ’)‘SXYZm’>>> S‘Spam’

>>> line = ‘aaa,bbb,ccccc,dd’>>> line.split(‘,’)[‘aaa’, ‘bbb’, ‘ccccc’, ‘dd’]>>> S = ‘spam’>>> S.upper() #we also have lower()‘SPAM’>>> S.isalpha()True

Page 24: Trendiest programming languages of 2019Python 2 o 3 •Per un’introduzione preliminare, non ci sono differenze significative •Forse la principale è printche diventa una funzione

Liste

• Contengono elementi anche eterogenei• Stessi operatori delle stringhe ma sono mutabili

>>> [1,2,'ciao'][1, 2, 'ciao']>>> [1]+[3,6][1, 3, 6]>>> [1,0]*3[1, 0, 1, 0, 1, 0]>>> [2,3,7,8][1:3][3, 7]>>> [2,3,7,8][:2][2, 3]>>> [1,2,3][0] =5>>>

Page 25: Trendiest programming languages of 2019Python 2 o 3 •Per un’introduzione preliminare, non ci sono differenze significative •Forse la principale è printche diventa una funzione

Liste

• append()/extend()– + crea una nuova lista– append modifica la lista esistente

• insert()• pop()/remove()• reverse()• sort() >>> l = [1,2,3]

>>> l[1, 2, 3]>>> l+[5][1, 2, 3, 5]>>> l[1, 2, 3]>>> l.append(5)>>> l[1, 2, 3, 5]>>>

Page 26: Trendiest programming languages of 2019Python 2 o 3 •Per un’introduzione preliminare, non ci sono differenze significative •Forse la principale è printche diventa una funzione

Slicing

Sostituzione/inserimento

Inserimento senza sostituire nulla

Cancellazione senza inserire nulla

Inserimento all’inizio

Inserimento alla fine

Inserimento alla fine

>>> L = [1]>>> L[:0] = [2,3,4]>>> L[2,3,4,1]

>>> L[len(L):] = [5,6,7]>>> L[2,3,4,1,5,6,7]

>>> L.extend([8,9,10])>>> L[2,3,4,1,5,6,7,8,9,10]

>>> L = [1,2,3]>>> L[1:2] = [4,5]>>> L[1,4,5,3]

>>> L[1:1] = [6,7]>>> L[1,6,7,4,5,3]

>>> L[1:2] = []>>> L[1,7,4,5,3]

Page 27: Trendiest programming languages of 2019Python 2 o 3 •Per un’introduzione preliminare, non ci sono differenze significative •Forse la principale è printche diventa una funzione

Comprehension

• [expression for var in list]

>>> l1 = [1,2,3,4,5]>>> l2 = [x%2 for x in l1]>>> l2[1, 0, 1, 0, 1]>>> l1[1, 2, 3, 4, 5]>>> l2 = []>>> for x in l1: l2.append(x//2)...>>> l2[0, 1, 1, 2, 2]>>>

Page 28: Trendiest programming languages of 2019Python 2 o 3 •Per un’introduzione preliminare, non ci sono differenze significative •Forse la principale è printche diventa una funzione

Forma estesa

>>> [x+y for x in ‘abc’ for y in ‘lmn’][‘al’, ‘am’, ‘an’, ‘bl’, ‘bm’, ‘bn’, ‘cl’, ‘cm’, ‘cn’]

>>> res = []>>> for x in ‘abc’:

for y in ‘lmn’:res.append(x+y)

>>> res[‘al’, ‘am’, ‘an’, ‘bl’, ‘bm’, ‘bn’, ‘cl’, ‘cm’, ‘cn’]

Page 29: Trendiest programming languages of 2019Python 2 o 3 •Per un’introduzione preliminare, non ci sono differenze significative •Forse la principale è printche diventa una funzione

Tuple

• Delimitate da parentesi, gli elementi sono separatida virgole

• Simili alle liste ma immutabili• Le parentesi possono essere omesse

>>> (1,2,3)(1, 2, 3)>>> (1,)(1,)>>> ()()>>> (1,2)[0] = 5<error>>>> v = (5,2,3)>>> v(5, 2, 3)>>> v = 5,2,3>>> v(5, 2, 3)

Page 30: Trendiest programming languages of 2019Python 2 o 3 •Per un’introduzione preliminare, non ci sono differenze significative •Forse la principale è printche diventa una funzione

Dizionari

• Associano un valore ad una chiave• Creati nella forma {ch1: val1, ch2: val2}• L’accesso e l’inserimento di elementi può usare

solo le chiavi• Le chiavi devono essere immutabili• Le coppie non sono ordinate

>>> {'a':1, 'b':2}['a']1>>> {'a':1, 'b':2}['x’]<error>>>> d = {}>>> d['c'] = 2>>> d{'c': 2}>>>

Page 31: Trendiest programming languages of 2019Python 2 o 3 •Per un’introduzione preliminare, non ci sono differenze significative •Forse la principale è printche diventa una funzione

Creazione

>>> D = {}>>> D[‘name’] = ‘Bob’>>> D[‘job’] = ‘developer’>>> D[‘age’] = 40>>> D{‘age’:40, ‘name’:’Bob’, ‘job’:’Developer’}>>> print(D[‘name’])Bob

>>> d1 = dict(name=‘Bob’, job=‘developer’, age=40)>>> d1{‘age’:40, ‘name’:’Bob’, ‘job’:’Developer’}

Page 32: Trendiest programming languages of 2019Python 2 o 3 •Per un’introduzione preliminare, non ci sono differenze significative •Forse la principale è printche diventa una funzione

Cambiamento

>>> D{‘eggs’:3, ‘spam’:2, ‘ham’:1}

>>> D[‘ham’] = [‘grill’, ‘bake’, ‘fry’]>>> D{‘eggs’:3, ‘spam’:2, ‘ham’:[‘grill’, ‘bake’, ‘fry’]}

>>> del D[‘eggs’]>>> D{‘spam’:2, ‘ham’:[‘grill’, ‘bake’, ‘fry’]}

>>> D[‘brunch’] = ‘Bacon’>>> D{‘brunch’:‘Bacon’, ’spam’:2, ‘ham’:[‘grill’, ‘bake’, ‘fry’]}

Page 33: Trendiest programming languages of 2019Python 2 o 3 •Per un’introduzione preliminare, non ci sono differenze significative •Forse la principale è printche diventa una funzione

Chiavi non stringa

>>> L = []>>> L[99] = ‘spam’error! index out of range!

>>> D = {}>>> D[99] = ‘spam’>>> D[99]‘spam’>>> D{99:’spam’}

Page 34: Trendiest programming languages of 2019Python 2 o 3 •Per un’introduzione preliminare, non ci sono differenze significative •Forse la principale è printche diventa una funzione

Metodi principali

• clear()• copy()• has_key()• items()/keys()/values()• update()• get()

Page 35: Trendiest programming languages of 2019Python 2 o 3 •Per un’introduzione preliminare, non ci sono differenze significative •Forse la principale è printche diventa una funzione

Contare con un dizionario

colors = [‘red’, ‘green’, ‘red’, ‘blue’, ‘green’, ‘red’]d = {}for color in colors:

if color not in d:d[color] = 0

d[color] += 1

d = {}for color in colors:

d[color] = d.get(color, 0) + 1

Page 36: Trendiest programming languages of 2019Python 2 o 3 •Per un’introduzione preliminare, non ci sono differenze significative •Forse la principale è printche diventa una funzione

Comprehension

• È un modo per creare dizionari– {key_expression : value_expression for var in list}– Ci vogliono due espressioni

l = ['a', 'b', 'c', 'd']d = {}n = 1for i in l:

d[i] = nn = n + 1

print(d)

l = ['a', 'b', 'c', 'd']d = {letter: i+1 for i,letter in enumerate(l)}print(d)

Page 37: Trendiest programming languages of 2019Python 2 o 3 •Per un’introduzione preliminare, non ci sono differenze significative •Forse la principale è printche diventa una funzione

None

• None è una variabile molto importante con lo stesso ruolo di NULL in C

• In Python None è di un tipo non numerico

items = {"cat": 1, "dog": 2, "piranha": 3}# Get an element that does not existv = items.get("giraffe")# Test for itif v == None: print("Not found")

Page 38: Trendiest programming languages of 2019Python 2 o 3 •Per un’introduzione preliminare, non ci sono differenze significative •Forse la principale è printche diventa una funzione

Set

• Collezioni non-ordinata di oggetti unici

>>> X = set(‘spam’)>>> Y = {‘h’, ’a’, ‘m’}

>>> X, Y({‘m’, ‘a’, ‘p’, ’s’}, {‘m’, ‘a’, ‘h’})>>> X & Y{‘m’,’a’}>>> X | Y{‘m’, ‘h’, ’a’, ‘p’, ’s’}>>> X-Y{‘p’, ’s’}>>> X > YFalse

Eliminazione duplicati>>> list(set([1,2,1,3,1]))[1,2,3]

Identificazione differenze>>>set(‘spam’) – set(‘ham’){‘p’, ‘s’}

Uguaglianza>>> set(‘spam’) == set (‘asmp’)True

Page 39: Trendiest programming languages of 2019Python 2 o 3 •Per un’introduzione preliminare, non ci sono differenze significative •Forse la principale è printche diventa una funzione

Iniziamo a programmare

Page 40: Trendiest programming languages of 2019Python 2 o 3 •Per un’introduzione preliminare, non ci sono differenze significative •Forse la principale è printche diventa una funzione

Due differenze sostanziali

• Le istruzioni non terminano con ;• Non si usano parentesi graffe per organizzare il

codice– L’esecuzione del codice dipende da come è scritto– L’indentazione del codice diventa un elemento

fondamentale

Page 41: Trendiest programming languages of 2019Python 2 o 3 •Per un’introduzione preliminare, non ci sono differenze significative •Forse la principale è printche diventa una funzione

Assegnamento

• = += -= *= /= //= %= **=• Non è creata una copia dell’oggetto

– Solamente un nuovo riferimento

>>> x = [0,1,2]>>> y = x>>> x.append(3)>>> print(y)[0, 1, 2, 3]>>>

Page 42: Trendiest programming languages of 2019Python 2 o 3 •Per un’introduzione preliminare, non ci sono differenze significative •Forse la principale è printche diventa una funzione

Cosa succede

x 0 1 2

x

0 1 2

y

x

0 1 2

y

3

Page 43: Trendiest programming languages of 2019Python 2 o 3 •Per un’introduzione preliminare, non ci sono differenze significative •Forse la principale è printche diventa una funzione

Assegnamento

x 5

x

5

y

x

5y

6Nuovo intero

Vecchio riferimentocancellato

>>> x = 5>>> y = x>>> x = x+1>>> print(x)6>>> print(y)5>>>

Page 44: Trendiest programming languages of 2019Python 2 o 3 •Per un’introduzione preliminare, non ci sono differenze significative •Forse la principale è printche diventa una funzione

Vero e falso

• In Python esistono le variabili di tipo booleano– True e False

• Ogni singolo tipo può definire quando il suovalore è falso– Il numero “0” o “0.0”– Una stringa vuota (“”)

• Gli altri valori sono considerati veri

Page 45: Trendiest programming languages of 2019Python 2 o 3 •Per un’introduzione preliminare, non ci sono differenze significative •Forse la principale è printche diventa una funzione

Assegnamenti in sequenza

>>> string = ‘SPAM’>>> a,b,c = stringerror!!!

>>> a,b,c = string[0], string[1], string[2:]>>> a,b,c(’S’, ‘P’, ‘AM’)

>>> a,b = string[:2]>>> c = string[2:]>>> a,b,c(’S’, ‘P’, ‘AM’)

>>> a,b,c(’S’, ‘P’, ‘AM’)>>> (a,b),c = string[:2], string [2:]

Page 46: Trendiest programming languages of 2019Python 2 o 3 •Per un’introduzione preliminare, non ci sono differenze significative •Forse la principale è printche diventa una funzione

Assegnamenti multipli

>>> a = b = c =‘spam’>>> a,b,c(‘spam’, ‘spam’, ‘spam’)

Riferimenti condivisi !!!

>>> a = b = 0>>> b = b + 1>>> a,b(0,1)

Page 47: Trendiest programming languages of 2019Python 2 o 3 •Per un’introduzione preliminare, non ci sono differenze significative •Forse la principale è printche diventa una funzione

Confronto

• == != > < >= <=• Se necessario vengono eseguite le necessarie

conversioni– 1 == 1.0 è vero

• and or e not• La valutazione di and e or è corto-circuitata

Page 48: Trendiest programming languages of 2019Python 2 o 3 •Per un’introduzione preliminare, non ci sono differenze significative •Forse la principale è printche diventa una funzione

Funzioni built-in

• range([start,] stop[, step])– step è l’incremento, il valore di default è 1– Il valore di default di start è 0– Molto usato con i cicli (vedremo)

• len(s) ritorna il numero di elementi in s

>>> len('ciao')4>>> len('x\0a')3>>> len([1,2,3])3>>> len({'a':1, 'b':5})2>>>

Page 49: Trendiest programming languages of 2019Python 2 o 3 •Per un’introduzione preliminare, non ci sono differenze significative •Forse la principale è printche diventa una funzione

Ancora

• in: vero se il primo operando è contenuto nelsecondo

• is: vero se il primo operando è il secondo– Non solo è uguale!– Riferimento agli stessi oggetti

>>> 'a' in 'ciao'True>>> 2 in [1,2,3]True>>> 5 in [1,2,3]False>>> 'a' in {'x':1, 'a': 2}True>>>

Page 50: Trendiest programming languages of 2019Python 2 o 3 •Per un’introduzione preliminare, non ci sono differenze significative •Forse la principale è printche diventa una funzione

If

if condizione:...

elif condizioneAlternativa:...

else:...

• Sia la parte elif sia la parte else sono facoltative• Può esserci un numero qualsiasi di elif• Non sono necessarie le parentesi intorno

all’espresisone booleana• Non sono possibili assegnamenti all’interno della

condizione

Page 51: Trendiest programming languages of 2019Python 2 o 3 •Per un’introduzione preliminare, non ci sono differenze significative •Forse la principale è printche diventa una funzione

Esempio

• Chiedi un numero e stampa se è pari o dispari

number = int(input("Dammi un numero: "))if number % 2 == 0:

print(number,"e' pari”)elif number % 2 == 1:

print(number,"e' dispari")else:

print(number,"e' molto strano")

Page 52: Trendiest programming languages of 2019Python 2 o 3 •Per un’introduzione preliminare, non ci sono differenze significative •Forse la principale è printche diventa una funzione

Indentazione

• I raggruppamenti sono definiti dall’indentazione– Non si usano parentesi graffe, coppie “begin”/“end” e

simili– Obbliga a scrivere codice ordinato– Più naturale?

Page 53: Trendiest programming languages of 2019Python 2 o 3 •Per un’introduzione preliminare, non ci sono differenze significative •Forse la principale è printche diventa una funzione

while

while condizione:...

• break per uscire dal ciclo• continue per passare all’iterazione successive• pass per non fare nulla

Page 54: Trendiest programming languages of 2019Python 2 o 3 •Per un’introduzione preliminare, non ci sono differenze significative •Forse la principale è printche diventa una funzione

Esempi

x = 10while x:

x = x-1if x%2 != 0: continueprint(x)

while True:v = input("Inserisci un numero: ")if int(v) == 0: breakprint("il numero e': ", v)

Page 55: Trendiest programming languages of 2019Python 2 o 3 •Per un’introduzione preliminare, non ci sono differenze significative •Forse la principale è printche diventa una funzione

Stampa maggiore n numeri letti

n = int(input('Inserisci un numero: '))max = None

while n != 0:if not max or n > max: max = nn = int(input('Inserisci un numero: '))

print(max)

Page 56: Trendiest programming languages of 2019Python 2 o 3 •Per un’introduzione preliminare, non ci sono differenze significative •Forse la principale è printche diventa una funzione

for

for variabile in iteratore:...

• iteratore può essere una sequenza, lista, tupla, stringa, dizionario

• Si possono usare continue e break come per il while

Page 57: Trendiest programming languages of 2019Python 2 o 3 •Per un’introduzione preliminare, non ci sono differenze significative •Forse la principale è printche diventa una funzione

Esempi

onetoten = range(1, 11)for count in onetoten:

print(count)

lista = [4, 5, 7, 8, 9, 1, 0, 7, 10]lista.sort()prec = lista[0]del lista[0]for item in lista:

if prec == item:print("Trovato duplicato di", prec)

prec = item

Page 58: Trendiest programming languages of 2019Python 2 o 3 •Per un’introduzione preliminare, non ci sono differenze significative •Forse la principale è printche diventa una funzione

Esempi

lettere = {}for c in "Mississippi":

lettere[c] = lettere.get(c, 0) + 1lettere = lettere.items()lettere = sorted(lettere)print(lettere)

colors = ['red', 'green', 'red', 'blue', 'green', 'red']d = {}for color in colors:

if color not in d:d[color] = 0

d[color] += 1print(d)

Page 59: Trendiest programming languages of 2019Python 2 o 3 •Per un’introduzione preliminare, non ci sono differenze significative •Forse la principale è printche diventa una funzione

Import

• Per importare il modulo delle funzionimatematiche– import math

• Per usarlo– math.sqrt(2), math.log(5), ecc.

Page 60: Trendiest programming languages of 2019Python 2 o 3 •Per un’introduzione preliminare, non ci sono differenze significative •Forse la principale è printche diventa una funzione

Altre opzioni

#O1.pyfrom M import funcfrom N import func

func() # We have a problem!

#02.pyimport Mimport N # This is one possible solutionM.func()N.func()

#03.pyfrom M import func as mfunc # This is another solutionfrom N import func as nfuncmfunc()nfunc()

Page 61: Trendiest programming languages of 2019Python 2 o 3 •Per un’introduzione preliminare, non ci sono differenze significative •Forse la principale è printche diventa una funzione

Nuove funzioni

def funzione(arg1, arg2, opz1=val1):...• Non bisogna specificare il tipo ritornato

– Una funzione può ritornare un oggetto di qualsiasi tipo

• Gli argomenti sono normali variabili e possonoessere in qualsiasi numero– Se la funzione non accetta argomenti si usa ()

Page 62: Trendiest programming languages of 2019Python 2 o 3 •Per un’introduzione preliminare, non ci sono differenze significative •Forse la principale è printche diventa una funzione

Un primo esempio

>>> def times(x,y):return x * y

>>> times(2,4)8

>>> x = times(3.14, 4)>>> x12.56

>>> times(‘ABC’, 3)‘ABCABCABC’

Page 63: Trendiest programming languages of 2019Python 2 o 3 •Per un’introduzione preliminare, non ci sono differenze significative •Forse la principale è printche diventa una funzione

Nuove funzioni

• Gli argomenti opzionali possono non esserespecificati dal chiamante, in questo casoassumono il valore di default

• Le variabili all’interno della funzione non sonovisibili dall’esterno

def foo(x, y, z=42, k=12):print(x, y, z, k)

foo(3, 4) # 3 4 42 12foo(5, 3, k=9) # 5 3 42 9

Page 64: Trendiest programming languages of 2019Python 2 o 3 •Per un’introduzione preliminare, non ci sono differenze significative •Forse la principale è printche diventa una funzione

return

• La sintassi è: return valore• Se il valore di ritorno viene omesso viene

ritornato None• Se il flusso del programma esce dalla funzione

senza aver trovato un’istruzione return vieneritornato None

Page 65: Trendiest programming languages of 2019Python 2 o 3 •Per un’introduzione preliminare, non ci sono differenze significative •Forse la principale è printche diventa una funzione

Esempio

def anyOdd(xs):for v in xs:

if v % 2 == 1: return Truereturn False

def mult(a,b):if b == 0: return 0rest = mult(a,b - 1)value = a + restreturn value

Page 66: Trendiest programming languages of 2019Python 2 o 3 •Per un’introduzione preliminare, non ci sono differenze significative •Forse la principale è printche diventa una funzione

Oggetti mutabili e immutabili

Oggetti immutabili Oggetti mutabili

>>> def f(a): a = 99

>>> b = 88 >>> f(b)>>> print(b) 88

>>> def changer(a, b): a= 2 b[0] = 'spam'

>>> X = 1>>> L = [1, 2] >>> changer(X, L) >>> X, L(1, ['spam', 2])

Page 67: Trendiest programming languages of 2019Python 2 o 3 •Per un’introduzione preliminare, non ci sono differenze significative •Forse la principale è printche diventa una funzione

Funzioni che restituiscono più valori

>>> def multiple(x,y):x = 2y = [3,4]return x, y

>>> X = 1>>> L = [1,2]>>> X,L = multiple(X, L)>>> X,L2, [3,4]

Page 68: Trendiest programming languages of 2019Python 2 o 3 •Per un’introduzione preliminare, non ci sono differenze significative •Forse la principale è printche diventa una funzione

Ricorsione

• Funzione che calcola il fattoriale

def fattoriale(n):if n <= 1: return 1return n*fattoriale(n-1)

n = int(input('Inserisci un numero: '))print("Il fattoriale di %d e' %d" % (n, fattoriale(n)))

Page 69: Trendiest programming languages of 2019Python 2 o 3 •Per un’introduzione preliminare, non ci sono differenze significative •Forse la principale è printche diventa una funzione

global

• L’assegnamento all’interno di una funzioneassegna il valore ad una variabile locale

• Con global var si indica all’interprete che var èglobale e non locale

x = 5

def f():global xx = 42 # x è la variabile globale

Page 70: Trendiest programming languages of 2019Python 2 o 3 •Per un’introduzione preliminare, non ci sono differenze significative •Forse la principale è printche diventa una funzione

Accesso ai file

• I file vengono gestiti in modo simile al C• open(nomefile[, modo]) apre nomefile in

modalità modo (r è il valore di default) e ritornaun oggetto di tipo file

• I metodi principali degli oggetti file sono– read([size]) ritorna size byte dal file

• Se size è omesso legge tutto il file

– readline() ritorna una riga– readlines() ritorna una lista con le righe rimanenti nel

file– write(str) scrive str sul file

Page 71: Trendiest programming languages of 2019Python 2 o 3 •Per un’introduzione preliminare, non ci sono differenze significative •Forse la principale è printche diventa una funzione

Accesso ai file

• writelines(list) scrive list su file• close() chiude il file• flush() scrive su disco i dati presenti in eventuali

buffer• seek(offset[, pos])

– 0: dall’inizio del file (valore di default)– 1: dalla posizione corrente– 2: dalla fine del file

• tell() ritorna la posizione corrente• truncate([n]) tronca il file a non più di n byte

– Il valore di default è la posizione corrente

Page 72: Trendiest programming languages of 2019Python 2 o 3 •Per un’introduzione preliminare, non ci sono differenze significative •Forse la principale è printche diventa una funzione

Esempio

import sys

fsillabe = open('sillabe.txt', 'r')sillabe = fsillabe.read().split()fsillabe.close()

fdizionario = open('italiano.txt', 'r')paroleIta = fdizionario.read().split()fdizionario.close()

fparole = open('parole.txt', 'w')for s1 in sillabe:

for s2 in sillabe:parola = s1+s2if parola.lower() in paroleIta:

fparole.write(parola+'\n')fparole.close()

Page 73: Trendiest programming languages of 2019Python 2 o 3 •Per un’introduzione preliminare, non ci sono differenze significative •Forse la principale è printche diventa una funzione

Altro esempio

import sys

def createDictionary(filename):dict = {}myfile = open(filename, 'r’)content = myfile.read()myfile.close()

words = content.split()for word in words:

word = word.lower()if word not in dict:

dict[word] = 1else:

dict[word] = dict[word]+1return dict

def printWords(filename):dict = createDictionary(filename)for key in sorted(dict):

print(key,'-->',dict[key])

def main():if len(sys.argv) != 2:

print('Manca il nome del file’)sys.exit(1)

filename = sys.argv[1]printWords(filename)

main()

Page 74: Trendiest programming languages of 2019Python 2 o 3 •Per un’introduzione preliminare, non ci sono differenze significative •Forse la principale è printche diventa una funzione

Funzione per pulire stringa – v1

def pulisci(p):tmp = p.lower()n = 0

while n < len(tmp):if tmp[n] < "a" or tmp[n] > "z":

tmp = tmp.replace(tmp[n], ’’)else: n += 1

return tmp

Page 75: Trendiest programming languages of 2019Python 2 o 3 •Per un’introduzione preliminare, non ci sono differenze significative •Forse la principale è printche diventa una funzione

Funzione per pulire stringa – v2

def pulisci(p):bads = "!@#$%^&*()_-+={[}]|;:,<.>?/~`’”

tmp = p.lower()return tmp.strip(bads)

Page 76: Trendiest programming languages of 2019Python 2 o 3 •Per un’introduzione preliminare, non ci sono differenze significative •Forse la principale è printche diventa una funzione

Errore classico

l=[1,2,3,4,5,4,4]

for e in l:if e%2 == 0:

l.remove(e)

print(l)

Page 77: Trendiest programming languages of 2019Python 2 o 3 •Per un’introduzione preliminare, non ci sono differenze significative •Forse la principale è printche diventa una funzione

Possibile soluzione

l=[1,2,3,4,5,4,4]p=0

while p < len(l):if l[p] % 2 == 0: l.remove(l[p])else: p += 1

print(l)