Programmazione Python La Guida 100
Programmazione Python La Guida 100
1. I concetti base
Installazione di Python
Cliccare poi sul primo risultato della ricerca relativo all’indirizzo www.python.org.
Dalla home sito web, cliccare sul pulsante “Download Python 3.7.2” (o la versione attualmente
disponibile) per avviare il download.
Una volta completato, avviare il programma e cliccare sulla prima opzione “Install Now”. Una volta
completato il caricamento, cliccare su “close”.
Cliccare sul primo risultato che compare e che ha come riferimento il sito www.jetbrains.com.
Cliccare poi su “Download now” e dalla pagina che si apre, selezionare delle due versioni
disponibili, la “Community”.
Dalla schermata successiva, lasciare abilitate le opzioni per “Create Desktop Shortcut” e
selezionare sotto a “Create Associations”, l’estensione .py, in modo tale da utilizzare sempre questo
programma come applicazione di default.
Cliccare poi su “Next” e Install” per avviare l’installazione. Una volta completata l’installazione,
cliccare su “Finish”.
Cliccare poi sull’icona sul desktop di PyCharm per avviare il programma e selezionare l’opzione
“do not import settings”. Accettare la privacy policy cliccando su “Continue”.
Alla schermata successiva, cliccare poi su “Don’t send”. Scegliere un tipo di tema tra “Darcula” e
“Light”.
Cliccare su “Create New Project” e assegnare il nome “test 1”. Infine, cliccare su “Create”.
Selezionare “test 1”, cliccare sopra con il tasto destro e da menu selezionare “New > Python file”.
print(“Hello World!”);
Per questo motivo, la variabile può essere definita come un contenitore che sarà riutilizzato
successivamente per lo sviluppo del programma.
Es: miaVar = 78
miaVar2 = “ciao”
Nel primo esempio, la variabile contiene un valore numerico, mentre nel secondo contiene una
stringa, ovvero un valore di tipo testo, che si contraddistingue con l’utilizzo dei doppi apici.
Per visualizzare a video in output il valore della variabile, utilizziamo la funzione Print():
print(miaVar1)
print(miaVar2)
Dal menu laterale di sinistra, è possibile cliccare con il tasto destro su primaProva.py, “Run
primaProva”, in modo tale da eseguire il programma.
type(miaVar1)
type(miaVar2)
Nel momento in cui sarà eseguito il programma, non sarà però possibile vedere il risultato, previa
l’utilizzo della funzione Print(). È quindi necessario utilizzarla, affinché il risultato venga
visualizzato.
print(type(miaVar1))
print(type(miaVar1))
Non esiste una lunghezza prestabilita, sebbene si consiglia di evitare nomi troppo lunghi;
Possono contenere lettere e numeri;
Si può utilizzare lo stampatello, ma meglio assicurarci che non sia la prima lettera.
Alcune specifiche keyword dovrebbero essere evitate nell’assegnazione delle variabili in python,
perché già esistenti a livello base di funzionalità.
Alcuni esempi sono: and, from, in, or, not, while, true, false, class, for, is, import, ecc…
Gli operatori sono simboli speciali che sono utilizzati per eseguire operazioni aritmetiche. Le
parentesi ne definisco la precedenza.
+ Addizione
- Sottrazione
* Moltiplicazione
/ Divisione
Es:
print(8 + 8)
print(8 * 8)
print((8 * 8) + 6))
Es:
print(8 * (8 + 6))
1.7 Le espressioni
Rivedendo i concetti espressi prima, si assegna il valore numerico alle variabili “a” e “b”.
a = 67
b = 68
A questo punto, si definisce una terza variabile “c” che contiene variabili e operatori:
c = (a + b) * b
Stampando poi la variabile c si visualizza il valore finale di 11310, ottenuto dall’espressione creata
prima:
print(c)
L’operatore “+” ha anche una funzionalità extra che riguarda la concatenazione di stringhe.
Anziché effettuare un’addizione, le stringhe vengono attaccate insieme.
Es:
str1 = “ciao”
str2 = “mondo”
print(str1 + str2)
ciaomondo
In questa prima fase non sono presenti spazi che verranno poi successivamente affrontati.
Come per altri linguaggi di programmazione, un’operazione frequente riguarda l’inserimento di dati
da parte dell’utente direttamente da tastiera. La funzione input() serve appunto per questo scopo.
È quindi sufficiente dichiarare una variabile e passare la funzione input, come da esempio
sottostante:
testoInserire = input()
print(testoInserire)
Una volta eseguito il programma, questo ultimo sarà in attesa dell’input, senza che sia infatti presente
un exit code.
Inserendo ad esempio “ciao” e premendo invio, il programma passerà alla funzione print() e
stamperà il valore.
1.9 Commentare il codice
Commentare il codice serve per migliorare la leggibilità, soprattutto in base alla complessità del
progetto e alla necessità di aggiornare continuamente il codice.
Per questo motivo, è consigliabile inserire un commento per ogni linea di codice.
In questo modo il codice inserito successivamente al simbolo “#”, non sarà eseguito.
Questa operazione è particolarmente utile per nascondere momentaneamente delle parti di codice.
Un esempio di commento:
Le funzioni print() e type() sono le due funzioni viste nel corso di questa sezione.
Es:
print(type(“ciao mondo”))
print(type(7))
print(type(6.8))
print(type(“6.8”))
<class ‘str’>
<class ‘int>
<class ‘float>
<class ‘str’>
print(messaggio)
print(numeroIntero)
print(numeroConVirgola)
Durante la fase scrittura, PyCharm facilita l’inserimento dei dati attraverso la compilazione.
L’esercizio relativo agli operatori aritmetici riguarda i messaggi di errore rilevati dal programma a
causa di problemi nella sintassi.
Es:
Inserimento di un numero come primo elemento in una variabile.
1valore = 5
Per quanto riguarda le espressioni invece, il linguaggio di programmazione presenta delle priorità
degli operatori:
alfa = 3**2+1
print(alfa)
Risultato: 10
Divisione e moltiplicazione:
beta = 3*3+4
print(beta)
Risultato: 13
gamma = 5 - 3-1
print(gamma)
Risultato: 1
Oltre alla divisione, sotto viene riportato un esempio di operazione con l’operatore modulo che
viene utilizzato per restituire il resto dalla divisione ed è espresso con il simbolo “%”.
Es:
divisione = 7 / 3
print(divisione)
resto = 7 % 3
print(resto)
Es:
primaStringa = “alfa”
secondaStringa = “beta”
print(primaStringa + secondaStringa)
Risultato:
alfabeta
2. I costrutti di selezione
1 == 1 Vero
1 == 0 Falso
Es:
print(5 == 5)
print(5 == 6)
(>=) Maggiore
(>=) Minore
!= Diverso
Sotto alcuni esempi di confronto di valori e i rispettivi risultati ottenuti, attraverso gli operatori di
confronto:
print(5 < 7)
Risultato:
true
print(5 < 5)
Risultato:
false
print(5 == 5)
Risultato:
true
print(5 > 5)
Risultato:
false
print(5 >= 5)
Risultato:
false
print(5 != 5)
Risultato:
false
print(5 != 9)
Risultato:
true
Es:
a=8
print(a > 9 and a < 20)
Il confronto a < 9 è vero perché 8 è inferiore a 9, mentre a < 20 è falso perché 8 è un valore più
piccolo di 20. Utilizzando però l’operatore and, entrambi le due condizioni devono essere vere.
Dato che solo una delle due è vera, la condizione finale sarà FALSE.
Un secondo esempio in cui invece la condizione è true:
a = 12
print(a > 9 and a < 20)
Risultato:
true
Nel successivo esempio, viene applicato l’operatore or. La condizione è vera perché almeno una
delle condizioni è vera:
a = 12
print(a > 9 or a < 20)
Risultato:
true
Risultato:
false
Risultato:
true
2.4 Costrutto IF
If in italiano significa “se”. Infatti, il costrutto If controlla se l’espressione all’interno delle parentesi
tonde, risulta vera o falsa. Se l’espressione è vera, il resto del programma sarà eseguito, mentre in
caso contrario si bloccherà. Il blocco if termina sempre con “:”. È importante che print() sia
sempre indentato affinché la formattazione venga riconosciuta da PyCharm.
Es:
valore = 20
if(valore >10):
print(“il valore è maggiore di 10”)
Risultato:
L’espressione valore > 10 è uguale e quindi viene stampata la stringa “ il valore è maggiore di 10”.
valore = 9
if(valore >10):
print(“il valore è maggiore di 10”)
Risultato:
valore > 10 non è vera e quindi viene stampato niente.
valore = 10
if(valore >=10):
print(“il valore è maggiore di 10”)
Risultato:
il valore è maggiore di 10
2.5 If multipli
Es:
valore = 20
if (valore == 10):
print(“il valore è uguale a 10”)
if (valore == 20):
print(“il valore è uguale a 20”)
if (valore == 30):
print(“il valore è uguale a 30”)
Risultato:
il valore è uguale a 20
Un altro esempio in cui entrambi le condizioni si verificano:
valore = 3
if (valore == 10):
print(“il valore è uguale a 10”)
Risultato:
il valore è uguale a 20
il valore è uguale a 30
2.6 Costrutto if – else
Il costrutto if – else controlla se (if) la condizione booleana all’interna del blocco if è vera, per cui
il contenuto inserito viene eseguito, altrimenti (else) se il valore è diverso e quindi la condizione è
falsa, viene eseguito il codice del blocco else.
valore = 3
if (valore == 10):
print(“il valore è uguale a 10”)
else:
print(“il valore inserito non è 10”)
Risultato:
il valore inserito non è 10
La condizione non è vera perché Il valore 3 non è pari a 10.
La condizione è invece false perché valore 3 NON è 10.
Nel caso in cui si abbia necessità di utilizzare più possibilità, possiamo applicare il costrutto
If / elseif (altrimenti se) / else.
Nel caso in cui sia presente, il costrutto Else (altrimenti) deve essere l’ultimo
Elif è la forma contratta di else if
Non ci sono limiti nei costrutti if
Le condizioni sono esaminate in ordine sequenziale
In caso di condizione vera, il codice appartenente al blocco del costrutto sarà eseguito e
di seguito il blocco if / elseif / else terminerà.
Es:
valore = 300
if (valore == 10):
print(“il valore è uguale a 10”)
else:
print(“il valore NON è 10-20-30”)
Risultato:
2.8 IF nested
Le nested condition, sono costrutti condizionali incorporati all’interno di altri costrutti condizionali.
Devono essere utilizzati con attenzione capendo il flusso del programma.
Es:
valore = 4
if (valore > 15):
print(“il valore è maggiore di 15”)
else:
if (valore < 7):
print(“il valore è minore di 7 ”)
else:
print(“il valore è maggiore di 7”)
Risultato:
il valore è minore di 7
Il costrutto TRY – EXCEPT è consigliato per gestire gli errori, ovvero situazioni in cui il valore
inserito è errato o NON PREVISTO.
Il blocco EXCEPT viene eseguito SOLO in caso in errore di inserimento di un valore in input.
Es:
valorePrimo = 30
key:
print(valore)
except:
print(“la variabile valore non è definita”)
Risultato:
la variabile valore non è definita
Nell’esercizio riportato sotto si fa utilizzo della funzione int() per convertire il valore inserito tra
parentesi in un intero. Con l’uso della funzione input(), il programma richiede all’utente di inserire
un numero. Dopodiché, effettua il controllo attraverso i costrutti if – else. Inoltre, si fa uso
dell’operatore modulo visto nella sezione 1, per ottenere il resto della divisione.
if (numeroInserito % 2 == 1):
print("Il numero è dispari")
else:
print("Il numero è pari")
Il numero è dispari
if (numeroLati == 3):
print("è un triangolo!")
elif(numeroLati == 4):
print("è un quadrilatero!")
elif(numeroLati == 5):
print("è un pentagono!")
elif(numeroLati == 6):
print("è un esagono!")
else:
print("numero lati NON consentito...riprova!")
Inserendo invece 8, non verrà trovata alcuna corrispondenza e sarà perciò eseguito else:
numero lati NON consentito...riprova!
In questo tipo di esercizio, l’obbiettivo è conoscere il tipo di triangolo. Saranno utilizzati gli
operatori AND e OR visti in questa sezione. Sulla base dei tre valori inseriti da input, i costrutti if /
elseif / else mostreranno il tipo di triangolo corrispondente.
#tipo di triangolo
else:
print("È un triangolo scaleno")
Durante l’aggiornamento di una VARIABILE, molto spesso il nuovo VALORE dipende dal VALORE
PRECEDENTE.
X=0
X = X +1
Es:
x = 0 #inizializzazione
print(x)
x=x+2
print(x)
x=x+2
print(x)
Risultato:
0
2
4
print(x)
x=x- 2
print(x)
x=x- 2
print(x)
Risultato:
10
8
6
3.2 Costrutto WHILE
Ogni volta che viene eseguito il blocco WHILE, si effettua un CICLO completo.
Es:
x=1
Il ciclo parte l’inizializzazione della variabile x uguale a 1. Il costrutto WHILE controlla poi che il
valore sia inferiore o uguale a 10. Se la condizione viene soddisfatta, entra nel ciclo stampando il
valore di x e aggiungendo 1 a x.
Il ciclo quindi riparte con x = 2 e da qui effettua il ciclo WHILE fino a che il valore di x diventa 10.
Quando x è invece 11, la condizione non è più verificata perché non è minore o uguale a 10, quindi
viene stampato Valore aggiunto .
Un secondo esempio effettua l’operazione di decremento partendo da 10:
x = 10
print("Valore raggiunto!")
Come visto con il costrutto WHILE, il ciclo termina quando la condizione è FALSA. Tuttavia, a volte
abbiamo la necessità di LOOP INFINITI che non hanno CONDIZIONI DI USCITA.
while (True):
print("Sono uscito!")
La condizione è sempre vera, il ciclo eseguito all’infinito, chiederà sempre di inserire da input un
valore.
Nel caso in cui vogliamo forzare ESPLICITAMENTE l’uscita da un blocco di iterazione, possiamo
utilizzare la keyword BREAK.
In un secondo caso, con la keyword CONTINUE, possiamo invece avere la necessità di terminare
l’iterazione corrente e passare a quella successiva.
Es:
while True:
testo = input("inserisci un testo")
if testo == "terminato":
break
print(testo)
continue
print("terminato")
Il programma permette di inserire da input un testo. Nel caso in cui non corrisponda a “terminato”, il
testo viene stampato e il ciclo continua. Essendo una condizione vera, il ciclo continuerà fino a che il
testo inserito non corrisponderà a “terminato”.
Il costrutto WHILE visto precedentemente prevede che la condizione venga eseguita fino a che è
vera. Il ciclo FOR invece viene utilizzato quando le iterazioni sono ben definite e note. Ad esempio,
una lista di oggetti da scorrere oppure una lista di nomi all’interno di un file.
Es:
colori = ["rosso","verde","giallo"]
for scorricolore in colori:
print("Il colore inserito è", scorricolore)
Colori è una lista che contiene le stringe dei singoli colori.
“ scorricolore ” è una variabile creata nel ciclo che permette di scorrere i colori contenuti all’interno
di “colori”.
Il programma prevede la somma di numeri interi contenuti in una lista definita con “numeri”. La
variabile “somma” viene poi inizializzata a 0. “Numero” conterrà gli elementi della lista.
Inizialmente quindi somma sarà uguale a 0 = 0 + 1. Il valore 1 corrisponde infatti al primo elemento
presente nella lista “numeri”. Al passo successivo invece avremo 1 = 1 + 10. Di seguito l’operazione
verrà ripetuta per tutti i valori nella lista.
numeri = [1,10,20,30,40,50]
somma = 0
for numero in numeri:
somma = somma + numero
print (somma)
Nell’esercizio seguente sono state inizializzate a 0 le due variabili “contatoreA” e “contatoreB”. Con
il costrutto WHILE, la condizione è vera fino a che contatoreA è <= 100. Una volta in cui la
condizione sarà FALSA, usciremo invece dal ciclo WHILE.
Risultato:
3.7 Stampa dei caratteri – Esercizio 3
Nel seguente programma si definisce la variabile “frutta” che contiene la stringa “lampone”. Il ciclo
FOR ha il compito di iterare tutte le lettere (“lettera”) contenute in “frutta”. Per ognuna viene quindi
stampata la stringa di testo, con un contatore che viene incrementato ogni volta di 1.
#stampa lettera
frutta = "lampone"
contatore = 1
for lettera in frutta:
print("La lettera", contatore, "è", lettera)
contatore = contatore + 1
Risultato:
La lettera 1 è uguale l
La lettera 2 è uguale a
La lettera 3 è uguale m
La lettera 4 è uguale p
La lettera 5 è uguale o
La lettera 6 è uguale n
La lettera 7 è uguale e
#calcolo fattoriale
n=5
fattoriale = 1
Risultato:
Il fattoriale di 5 è 120
In questo esercizio, l’obbiettivo è ottenere tutti i numeri presenti uno specifico range utilizzando
WHILE.
if (numero%2 == 1):
print("Il numero "+str(numero)+" è dispari")
else:
print("Il numero " + str(numero) + " è pari")
numero = numero+1
Risultato:
Il numero 1 è dispari
Il numero 2 è pari
Il numero 3 è dispari
Il numero 4 è pari
Il numero 5 è dispari
Il numero 6 è pari
Il numero 7 è dispari
Il numero 8 è pari
Il numero 9 è dispari
4. Le funzioni
4.1 Le funzioni
Le funzioni servono per riutilizzare la stessa porzione di codice più volte. La funzione riesegue il
codice ogni volta che la funzione stessa viene richiamata all’interno del programma, come una sorta
di template. La funzione visualizzerà in output il risultato.
La funzione print(), vista più volte, è una tipologia di funzione built-in, ovvero precostituita in
Python.
Es:
print(“Ciao Mondo!”)
Le funzioni Built-in sono già presenti e non hanno quindi bisogno di un’ulteriore definizione. Le
altre funzioni, invece, definite all’interno del programma sono utili per evitare di riscrivere la stessa
porzione di codice più volte. Una volta definite quindi, possiamo andare a modificare direttamente la
parte interessata.
Un esempio di funzione Built-in è len() che serve a ottenere la lunghezza di una stringa.
Es:
prin(len(“ciao mondo!”))
Risultato:
11
Per funzioni Built-in di tipo matematico, abbiamo la necessità di importare il MODULO MATH che
contiene un elenco di funzioni predefinite. La documentazione ufficiale Python riporta a cosa servono
le singole funzioni.
Nell’esempio sottostante vogliamo utilizzare la funzione SORT (radice quadrata) presente nel
modulo MATH. 144 è il valore passato come argomento della funzione.
>>> math.sqrt(144)
import random
x = random.random()
print(x)
Risultato:
0.9905085566975174
Possiamo definire una propria funzione utilizzando la keyword “def” seguita dal nome della
funzione. Utilizzare una funzione migliora la leggibilità del codice, la manutenzione e le performance
del programma.
def stampaTesto():
print(“Ciao mondo”)
>>> stampaTesto()
Es:
def stampaTesto():
print("Ciao Mondo!")
print("Ciao Mondo!")
print("Ciao Mondo!")
print("Ciao Mondo!")
print("Ciao Mondo!")
print("Ciao Mondo!")
print("Ciao Mondo!")
stampaTesto()
stampaTesto()
stampaTesto()
stampaTesto()
stampaTesto()
stampaTesto()
def ristampaTesto():
stampaTesto():
Es:
def stampaTesto():
print("Ciao Mondo!")
print("Ciao Mondo!")
print("Ciao Mondo!")
print("Ciao Mondo!")
print("Ciao Mondo!")
print("Ciao Mondo!")
print("Ciao Mondo!")
def ristampaTesto():
stampaTesto()
#stampaTesto()
ristampaTesto()
Risultato:
Ciao Mondo!
Ciao Mondo!
Ciao Mondo!
Ciao Mondo!
Ciao Mondo!
Ciao Mondo!
Ciao Mondo!
def stampaFiore(nomeFiore):
print(nomeFiore)
stampaFiore("girasole")
stampaFiore("tulipano")
Risultato:
girasole
tulipano
def stampaFiore(nomeFiore):
print(nomeFiore)
fiore = "margherita"
stampaFiore("girasole")
stampaFiore("tulipano")
stampaFiore(fiore)
Risultato:
girasole
tulipano
margherita
È importante ricordare che il nome della variabile “fiore” non è in relazione con il parametro della
funzione “nomeFiore”.
#funzione moltiplica
def moltiplica(x):
return 5 * x
y=6
print(moltiplica(3))
print(moltiplica(5))
print(moltiplica(9))
z = moltiplica(y)
print(z)
Risultato:
15
25
45
30
4.9 Funzione con 2 parametri – Esercizio 2
La funzione accetta due parametri in ingresso: “nome” ed “eta”. Il parametro di default è eta = 50.
Quindi se non viene specificato di default, il valore di “eta” è 35.
#stampa informazioni
def stampaInfo( nome, eta ):
print ("Nome: ", nome)
print ("Età ", eta)
Risultato:
Nome: carlo
Età: 50
Nome: marco
Età: 67
La funzione somma() accetta due argomenti. “totaleSomma” contiene la somma dei due argomenti.
“totale” richiama la funzione somma() passando i due valori.
#calcolo somma
def somma( arg1, arg2 ):
totaleSomma = arg1 + arg2
print ("Stampa dentro la funzione : ", totaleSomma)
Risultato:
Stampa dentro dalla funzione : 30
Stampa fuori dalla funzione : 30
La funzione serve a calcolare il valore assoluto. Passato il parametro “num” alla funzione
valore_assoluto(), il ciclo if – else, viene utilizzato per restituire i valori di “num” e “-num”. Ad
esempio nel caso di -4, dato che il valore è inferiore a 0, il valore assoluto restituito è 4.
Risultato:
2
78
print(f(3) + f(4))
Risultato:
9
25
5. Le stringhe
Le stringhe sono tipologie di dato contenente una sequenza di caratteri. L’INDICE è importante
perché definisce il POSIZIONAMENTO all’interno di una stringa, sulla quale è possibile
spostarsi verso destra o sinistra.
Es:
colore = "rosso"
primoCarattere = colore[4]
print(primoCarattere)
Risultato:
o
La funzione len() serve per ottenere la lunghezza di una stringa. Non ha necessità di importare un
modulo.
colore = "arancione"
lunghezza = len(colore)
print(lunghezza)
Risultato:
9
Un’operazione frequente è scorrere il contenuto di una stringa con un CICLO quale FOR o WHILE.
Si definisce una variabile per la stringa e poi una variabile “indice” inizializzata a 0. Il costrutto
WHILE contiene una condizione che utilizza la funzione len() a cui viene passato l’argomento
“frutta”.
Utilizzando “frutta[indice]” e stampando poi “carattere”, il ciclo visualizzerà ad ogni iterazione la
lettera stampata.
frutta = "mandarino"
indice = 0
while(indice < len(frutta)):
carattere = frutta[indice]
print(carattere)
indice = indice + 1
Risultato:
m
a
n
d
a
r
i
n
o
5.5 Scorrere gli elementi di una stringa - FOR
colore = "verde"
print(carattere)
Risultato:
v
e
r
d
e
5.6 Contatore caratteri stringa
Un’operazione frequente è conoscere quante volte un carattere appare all’interno di una stringa.
Per questo compito, si utilizza il costrutto di SELEZIONE.
Nell’esempio sottostante, si utilizza un ciclo FOR per scorrere la stringa. Oltre a questo, si controlla
con IF se carattere è uguale ad “a” e in tale caso, si incrementa “numeroOccorrenze” di 1. In questo
modo il ciclo scorre la stringa e stampa il numero di volte che il carattere “a” è presente in
“arancia”.
frutto = "arancia"
numeroOccorrenze = 0
Es:
parola1 = "insalata"
parola2 = "insalata"
if (parola1 == parola2):
print("stessa stringa")
else:
print("stringa differente")
Risultato:
stessa stringa
La funzione type() permette di conoscere il contenuto passato. Nel caso specifico, l’esempio sotto
riportato visualizza la tipologia stringa. La funzione DIR() invece riporta tutte le funzioni disponibili
da utilizzare con il tipo string.
colore = "GIALLO"
print(type(colore))
print(dir(colore))
Risultato:
La funzione LOWER() serve ad esempio per convertire i caratteri della stringa in minuscolo, mentre
CAPITALIZE() in maiuscolo.
colore2 = colore.lower()
print(colore2)
colore3 = colore2.capitalize()
print(colore3)
Risultato:
5.9 Cercare elementi di una stringa
Nel caso in cui ci sia necessità di estrarre SOLO alcune informazioni di una stringa, è possibile
utilizzare FIND().
Es:
email = "da [email protected]"
cercaChiocciola = email.find("d")
print(cercaChiocciola)
L’indice parte da 0, quindi find() ricercherà la posizione dalla lettera all’interno della stringa.
Risultato:
0
5.10 Slicing di una stringa – Esercizio 1
Nell’esempio sottostante si utilizzano gli indici definendo un punto di inizio e fine. Nel caso
specifico quindi vengono visualizzate le lettere comprese nell’intervallo da 3 a 6.
Risultato:
oM
La funzione STRIP() serve per eliminare gli spazi.
Risultato:
ciao Mondo
5.11 Splitting di una stringa – Esercizio 2
La funzione REPLACE() accetta due parametri: l’elemento da sostituire e quello che va sostituito.
Es:
stringa = "ciao Mondo"
print(stringa.replace("M", "m"))
Risultato:
ciao mondo
La funzione SPLIT() è applicata alla stringa e dato l’elemento separatore “,” vengono create delle
sottostringhe.
Risultato:
[‘ciao’, ‘Mondo’]
Risultato:
str1 + str2 = CiaoMondo
str1 * 3 = MondoMondoMondo
In questo caso invece viene controllato se le lettere sono presenti nella stringa. Il risultato è un
valore booleano TRUE o FALSE.
print("a" in "programma")
print("o" in 'casa')
Risultato:
True
False
6. Le liste
6.1 Le liste
Così come le STRINGHE, anche le LISTE contengono una sequenza di valori, con la differenza
principale che le STRINGHE possono contenere solo caratteri, mentre le LISTE contengono
qualsiasi tipo di valore definiti come elementi o items.
[20,10,”rosso”,”verde”,[10,”giallo”]]
Gli elementi in una lista sono separati dalla virgola. Nell’esempio sottostante, la lista contiene una
seconda lista all’interno, ma questa potrebbe essere anche vuota, con la possibilità di assegnare poi
dei valori di una lista ad una variabile.
Es:
colore = ["rosso","verde","giallo"]
colore[0] = "blu"
a = [1,10,"verde"]
b = []
print(colore)
#print(a)
#print(b)
Risultato:
["rosso","verde","giallo"]
[1,10,"verde"]
[]
Come per le stringhe, per scorrere gli elementi di una lista si usa un CICLO.
Nel caso sottostante si utilizza il costrutto FOR senza specificare la condizione come nel costrutto
WHILE.
frutta = ["mela","pera","arancia","mandarino"]
Risultato:
mela
pera
arancia
mandarino
6.3 Aggiornare elementi lista
Per SCRIVERE o AGGIORNARE gli elementi di una lista, è necessario utilizzare gli INDICI per
indicare ogni elemento nella lista.
valori = [10,20,30,40,50]
print(valori)
for indice in range(len(valori)):
valori[indice] = valori[indice] * 10
print(valori)
Risultato:
[10,20,30,40,50]
[100,200,300,400,500]
6.4 Lista – Funzioni Built-in
Alcune funzioni Built-in sono utilizzate per le liste con APPEND(), che serve per inserire in fondo
un altro elemento. La funzione accetta un argomento “e”, ovvero il valore da inserire.
alfabeto = ["a","b","c","d"]
alfabeto.append("e")
print(alfabeto)
Risultato:
["a","b","c","d","e"]
SORT() è un’altra funzione da utilizzare con le liste e serve per riordinare gli elementi.
alfabeto = ["d","a","c","b"]
alfabeto.append("e")
print(alfabeto)
Risultato:
["a","b","c","d"]
6.5 Eliminare elementi lista
alfabeto = ["d","a","c","b"]
elemento = alfabeto.pop[0]
print(elemento)
Risultato:
["a","c","b"]
d
In alternativa possiamo usare DEL() che non salva il valore eliminato:
alfabeto = ["d","a","c","b"]
del alfabeto[0]
print(alfabeto)
Risultato:
["a","c","b"]
Es:
listaNumerica = [5,2,8,6,1,9]
print(len(listaNumerica))
print(max(listaNumerica))
print(min(listaNumerica))
print(sum(listaNumerica))
Risultato:
6
9
1
31
Nell’esercizio sottostante si crea una lista vuota che conterrà dei numeri. Si inizializza una variabile
valoreInserito che prende in input dei valori convertiti in interi. Il ciclo WHILE serve per controllare
che la condizione sia vera fino a che non viene inserito 0.
Ogni volta viene aggiunto alla lista un nuovo valore. Infine, la lista viene ordinata.
listaNumerica = []
valoreInserito = int(input("Inserisci un valore. Premi 0 per uscire"))
while(valoreInserito != 0):
listaNumerica.append(valoreInserito)
valoreInserito = int(input("Inserisci un valore. Premi 0 per uscire"))
listaNumerica.sort()
print(listaNumerica)
Risultato:
Inserisci un valore. Premi 0 per uscire6
Inserisci un valore. Premi 0 per uscire5
Inserisci un valore. Premi 0 per uscire2
Inserisci un valore. Premi 0 per uscire4
[2,4,5,6]
Nell’esercizio si controlla con il costrutto IF se la parola inserita da input è già presente o meno
all’interno della lista, e in tal caso il valore viene aggiunto alla lista corrente.
listaParole = []
parola = input("Inserisci una parole. Premi ENTER per uscire")
while(parola != ""):
if parola not in listaParole:
listaParole.append(parola)
parola = input("Inserisci una parole. Premi ENTER per uscire")
print(listaParole)
Risultato:
Inserisci una parole. Premi ENTER per uscirecasa
Inserisci una parole. Premi ENTER per uscirecane
Inserisci una parole. Premi ENTER per uscirecane
Inserisci una parole. Premi ENTER per uscirecane
Inserisci una parole. Premi ENTER per usciregatto
Inserisci una parole. Premi ENTER per usciretopo
["casa", "cane", "gatto", "topo"]
Risultato:
mela è in questa lista!
6.10 Slicing di una lista – Esercizio 4
miaLista = ['p','r','o','g','r','a','m','i','z']
print(miaLista[2:5])
print(miaLista[:-5])
print(miaLista[5:])
print(miaLista[:])
Risultato:
['o','g','r']
['p','r','o','g']
['a','m','i','z']
['p','r','o','g','r','a','m','i','z']
6.11 Lista – potenza del due – Esercizio 5
Ogni elemento della lista viene elevato alla potenza del 2, indicata con **.
lista = []
for x in range(10):
lista.append(2 ** x)
print(lista)
Risultato:
[1, 2, 4, 8, 16, 32, 64, 128, 256, 512]
7. Le tuple
7.1 Le tuple
Le tuple sono molto simili alle liste, ma a sono IMMUTABILI. Inoltre, si utilizzano gli indici come
per le liste, ma per dichiararle si utilizzano le parentesi tonde.
L’esercizio sottostante dimostra appunto che tentando di modificare un elemento della tupla, PyCharm
restituisce un errore.
#tupla1 = ("albero","casa","letto","cucina")
#tupla1[0] = "fiore"
lista1 = ["albero","casa","letto","cucina"]
lista1[0] = "fiore"
print(lista1)
#print(tupla1)
Risultato:
Con le tuple si possono utilizzare sia il costrutto FOR che WHILE, come visti precedentemente con
le liste. L’esempio sotto riporta l’utilizzo del ciclo FOR per scorrere gli elementi di una tupla.
Nel secondo esercizio invece, non essendo presente l’elemento “mela” nella tupla, il programma
esce.
Risultato:
7.3 Aggiungere elementi tupla – Esercizio 2
La funzione LEN() viene utilizzata per visualizzare il numero di elementi contenuti in una tupla.
Risultato:
3
Nel secondo esercizio viene aggiunto un elemento nella tupla, sebbene questa sia immutabile.
PyCharm infatti restituisce un errore.
Risultato:
7.4 Cancellare elemento tupla – Esercizio 3
Nell’esercizio viene provato ad eliminare l’elemento della tupla con indice 0. Come alternativa
viene invece eliminata l’intera tupla.
#print(miaTupla)
Risultato:
miaTupla = ('p','r','o','g','r','a','m','i','z')
print(miaTupla[1:4])
print(miaTupla[:-7])
print(miaTupla[7:])
print(miaTupla[:])
Risultato:
print((“mela”,) * 3)
Risultato:
(“casa”, 2, 3, 4, “cucina”, 6)
(“mela”, “mela”, “mela”)
7.7 Confronto elementi tupla – Esercizio 6
miaTupla = ('a','p','p','p','l','e',)
#print(miaTupla.count('p'))
print(miaTupla.index('a'))
Risultato:
0
#print((1,2,3) == (1,2,3))
print((1,2,7) == (1,2,3))
Risultato:
False
8. I dizionari
8.1 I dizionari
I dizionari sono simili alle liste, ma mentre nelle liste gli indici sono valori interi, i dizionari creano
una corrispondenza (mapping) tra gli indici (KEYS) e i valori stessi. Quindi l’associazione è di tipo
KEY + VALUE.
Es:
brandToModel = dict()
brandToModel = {"fiat":"punto","opel":"corsa","ford":"fiesta"}
print(brandToModel)
Risultato:
{"fiat":"punto","opel":"corsa","ford":"fiesta"}
print(brandToModel["ford"])
Il valore tra parentesi quadre è la KEY, dato che appunto con i dizionari siamo sempre in presenza
dell’associazione KEY-VALUE. La funzione LEN() ritorna il numero KEY-VALUE all’interno del
dizionario.
Es:
brandToModel = dict()
brandToModel = {"fiat":"punto","opel":"corsa","ford":"fiesta"}
print(brandToModel["ford"])
Risultato:
fiesta
L’operatore IN serve per verificare se un elemento è presente come KEY all’interno di un dizionario.
L’esempio sottostante ricerca il valore “ford” all’interno del dizionario brandToModel. Come visto
in precedenza, la funzione LEN() serve per ritornare il numero KEY-VALUE all’interno del
dizionario.
brandToModel = dict()
brandToModel = {"fiat":"punto","opel":"corsa","ford":"fiesta"}
a = "ford" in brandToModel
print(a)
#print(brandToModel["ford"])
#print(len(brandToModel))
Risultato:
True
L’esercizio riportato sotto ha come finalità, data una parola in un dizionario, di contare quante volte
consonanti e vocali appaiono al suo interno. Verrà quindi realizzata un’associazione
consonante/vocale in cui si conteggia quante volte la chiave si ripete. Anche per i dizionari, il
costrutto di iterazione e selezione è essenziale.
Il programma scorrerà quindi tutte le lettere contenute all’interno della stringa “orologio”. Allo
stesso tempo, controllerà se “carattere” è presente in “ mioDizionario ”. Alla prima iterazione, il
dizionario è vuoto e quindi il ciclo passerà direttamente ad else. Successivamente partendo dal primo
carattere, verrà creata la prima associazione (MAPPING). Ogni volta se presente un carattere, verrà
incrementato il dizionario.
parola = "orologio"
mioDizionario = dict()
for carattere in parola:
if (carattere in mioDizionario):
mioDizionario[carattere] = mioDizionario[carattere] + 1
else:
mioDizionario[carattere] = 1
print(mioDizionario)
Risultato:
Il risultato sarà quindi l’associazione della lettera (CHIAVE) e il numero di volte in cui viene
visualizzata (VALORE) all’interno della parola.
Il metodo GET() è utile perché se la KEY è presente ritorna il suo valore, altrimenti ritorna un
valore di default.
brandToModel = dict()
brandToModel = {"fiat":"punto","opel":"corsa","ford":"fiesta"}
print(brandToModel.get(‘for’))
Risultato:
None
Il programma ritorna il valore se la chiave esiste all’interno del dizionario, altrimenti ritorna il
valore di default None (non presente).
Il ciclo FOR serve per scorrere le chiavi del dizionario e parallelamente stampa i valori.
brandToModel = dict()
brandToModel = {"fiat":"punto","opel":"corsa","ford":"fiesta"}
Risultato:
fiat punto
opel corsa
ford fiesta
8.8 Estrarre KEY/VALORE – Funzioni Bult-in – Esercizio 1
L’obbiettivo dell’esercizio è utilizzare la funzione Bult-in VALUES() per estrarre i valori del
dizionario brandToModel. Il ciclo FOR serve per estrarre tutti i valori del dizionario.
Risultato:
punto
corsa
fiesta
Nel secondo esempio invece, utilizzando la funziona ITEMS() si vuole ottenere la coppia degli
elementi CHIAVE-VALORE.
Risultato:
fiat punto
opel corsa
ford fiesta
8.9 Rimuovere elementi – Funzioni Bult-in – Esercizio 2
brandToModel.pop("fiat")
brandToModel.pop("opel")
print(brandToModel)
Risultato:
{"ford":"fiesta"}
Un altro esempio utilizza il metodo POPITEM() che non fa uso di un argomento e serve per
eliminare l’ultimo elemento del dizionario.
Risultato:
{"fiat":"punto","opel":"corsa"}
8.10 Rimuovere elementi – keyword DEL – Esercizio 3
La keyword DEL serve per eliminare una chiave racchiusa tra parentesi quadre.
brandToModel = dict()
brandToModel = {"fiat":"punto","opel":"corsa","ford":"fiesta"}
del brandToModel["fiat"]
print(brandToModel)
Risultato:
{"opel":"corsa","ford":"fiesta"}
Il secondo esempio ha la finalità invece di eliminare l’intero dizionario utilizzando sempre la
keyword DEL. Provando a stampare il dizionario, verrà restituito un messaggio di errore in quanto il
dizionario non esiste più.
brandToModel = dict()
brandToModel = {"fiat":"punto","opel":"corsa","ford":"fiesta"}
del brandToModel
print(brandToModel)
Risultato:
8.11 Elevamento alla seconda – Esercizio 4
La funzione CLEAR() serve per rimuovere gli elementi ma mantenere il dizionario stesso.
brandToModel = dict()
brandToModel = {"fiat":"punto","opel":"corsa","ford":"fiesta"}
brandToModel.clear()
print(brandToModel)
Risultato:
{}
L’esercizio sottostante inserisce i valori nel dizionario elevando il valore a seconda ogni volta in
base allo scorrimento da 0 a 9.
radice = {}
for x in range(10):
radice[x] = x*x
print(radice)
Risultato:
9. Le classi
9.1 Le classi
Un oggetto può contenere al suo interno una o più FUNZIONI oltre a DATI (attributi) utilizzati dalle
funzioni stesse. La keyword CLASS serve a definire una classe che include ATTRIBUTI e
METODI.
Ogni metodo, come le funzioni, inizia con la keyword DEF. Nell’esempio sottostante è presente la
definizione di una classe InvitatiFesta . L’attributo in oggetto è “x”, mentre il metodo è “SELF”.
Come si può notare SELF è sempre il primo parametro passato. Tutto quello che è racchiuso nella
definizione della classe (attributi e metodi) è un TEMPLATE .
Ogni volta che “festa” viene richiamato, la variabile x sarà incrementata di 1 perché si riferisce
all’istanza. L’operazione di ripete quattro volte.
class InvitatiFesta:
x=0
def festa(self):
self.x = self.x +1
print("Invitato numero", self.x)
contaInvitati = InvitatiFesta()
contaInvitati2 = InvitatiFesta()
contaInvitati.festa()
contaInvitati.festa()
contaInvitati.festa()
contaInvitati.festa()
contaInvitati.festa()
contaInvitati2.festa()
contaInvitati2.festa()
contaInvitati2.festa()
contaInvitati2.festa()
contaInvitati2.festa()
Risultato:
class InvitatiFesta:
x=0
def festa(self):
self.x = self.x +1
print("Invitato numero", self.x)
contaInvitati = InvitatiFesta()
print(type(contaInvitati.festa))
Risultato:
<class ‘method’>
L’oggetto ha un ciclo di vita che comprende la parte in cui viene creato e poi distrutto. Quando un
oggetto viene creato, le variabili associate vengono CREATE e poi DISTRUTTE.
Es:
class InvitatiFesta:
x=0
def __init__(self):
print("FASE DI CREAZIONE", self.x)
def festa(self):
self.x = self.x +1
print("Invitato numero", self.x)
def __del__(self):
print("FASE DI DISTRUZIONE", self.x)
contaInvitati = InvitatiFesta()
contaInvitati.festa()
contaInvitati.festa()
contaInvitati.festa()
contaInvitati.festa()
contaInvitati.festa()
Risultato:
Un altro esempio prevede invece la creazione di più oggetti appartenenti alla stessa classe. Il metodo
__init__(self) serve per definire valori diversi iniziali per ognuno degli oggetti creati.
È quindi presente l’inizializzazione della variabile x a 0 che conterà il numero degli invitati e la
definizione della stringa vuota nomeInvitato . Al metodo init viene passato l’argomento “nome”. La
stringa conterrà quindi “nome”. Per ciascun oggetto verrà richiamato il metodo festa().
class InvitatiFesta:
x=0
nomeInvitato = ""
def festa(self):
self.x = self.x + 1
print("nome invitato: ", self.nomeInvitato)
InvitatoA = InvitatiFesta("xxxx")
InvitatoB = InvitatiFesta("pluto")
Invitatoc = InvitatiFesta("marco")
InvitatoA.festa()
InvitatoB.festa()
Invitatoc.festa()
Risultato:
nome invitato: xxxx
nome invitato: pluto
nome invitato: marco
9.5 Ereditarietà
Nell’esempio sottostante, “InvitatiStanzaA” è una classe nuova creata sulla base di “InvitatiFesta”. Il
metodo festa() è ereditato dalla classe genitore. “InvitatoD” è un oggetto della sottoclasse.
class InvitatiFesta:
x=0
nomeInvitato = ""
def festa(self):
self.x = self.x + 1
print("nome invitato: ", self.nomeInvitato)
class InvitatiStanzaA(InvitatiFesta):
y=0
def festaStanzaA(self):
self.y = self.y + 1
self.festa()
print(self.nomeInvitato, "numero invitati", self.y)
InvitatoA = InvitatiFesta("pippo")
InvitatoB = InvitatiFesta("pluto")
InvitatoC = InvitatiFesta("marco")
InvitatoD = InvitatiStanzaA()
InvitatoA.festa()
InvitatoB.festa()
InvitatoC.festa()
InvitatoD.festaStanzaA()
Risultato:
class Persona:
def funzioneStampaNome(self):
print("Il mio nome Ë " + self.nome)
def funzioneStampaeta(self):
print("la mia eta Ë " , self.eta)
Risultato:
il mio nome è Luigi
la mia eta è 36
La classe “Robot” viene definita. def __init__(self, name) serve per l’inizializzazione del robot,
mentre def die(self) per la distruzione.
Il metodo def say_hi(self) serve invece per salutare. def how_many(cls) definisce il numero di robot
presenti.
class Robot:
"""Represents a robot, with a name."""
def die(self):
"""I am dying."""
print("{} is being destroyed!".format(self.name))
Robot.population = Robot.population - 1
if Robot.population == 0:
print("{} was the last one.".format(self.name))
else:
print("There are still {:d} robots working.".format(
Robot.population))
def say_hi(self):
"""Greeting by the robot.
@classmethod
def how_many(cls):
"""Prints the current population."""
print("We have {:d} robots.".format(cls.population))
droid1 = Robot("R2-D2")
droid1.say_hi()
Robot.how_many()
droid2 = Robot("C-3PO")
droid2.say_hi()
Robot.how_many()
Robot.how_many()
Risultato:
10. I file
La prima azione eseguibile su un file è l’apertura, seguita poi dalla LETTURA e SCRITTURA.
Le operazioni sono quindi:
Ottenere la directory di lavoro corrente
Ottenere la lista di file presenti nella directory
È necessario quindi:
importare il modulo OS (operating system) per agire con diverse funzioni
Utilizzare la funzione GETCWD() (get current word directory) che permette di ottenere
la directory corrente
Ottenere la lista delle directory di lavoro con LISTDIR().
Verrà infine restituito un file handle che sarà manipolabile.
import os
cwd = os.getcwd()
files = os.listdir(cwd)
print(cwd, files)
Risultato:
La funzione OPEN() serve per aprire il file e restituire il file handle modificabile. Nel caso in cui il
file non venga trovato, viene restituito un messaggio di errore.
import os
cwd = os.getcwd()
files = os.listdir(cwd)
print(cwd, files)
fileopen = open(r"C:\Users\Administrator\PycharmProjects\test10\fileProva.txt")
print(fileopen)
Risultato:
10.3 Conteggio righe di un file
Un file può essere visto come una SEQUENZA DI LINEE, di cui ognuna contiene implicitamente il
carattere “\n” a fine stringa.
Il programma sottostante conta quante linee sono presenti all’interno di un file. La variabile
“contatore” è inizializzata a 0 e il contatore si incrementerà per ogni linea presente nel FILE.
import os
cwd = os.getcwd()
files = os.listdir(cwd)
#print(cwd, files)
fileopen = open(r"C:\Users\Administrator\PycharmProjects\test10\fileProva.txt")
#print(fileopen)
contatore = 0
print(contatore)
Risultato:
5
10.4 File – Funzione StartsWith()
La funzione Built-in StartsWith() serve per ricercare un elemento testuale all’interno del file.
Nell’esempio sottostante viene effettuata una ricerca di parole che cominciano con “prodotto”. È
presente una variabile contatore inizializzata a 0 e il ciclo FOR scorre gli elementi presenti nel file.
import os
cwd = os.getcwd()
files = os.listdir(cwd)
#print(cwd, files)
fileopen = open(r"C:\Users\Administrator\PycharmProjects\test10\fileProva.txt")
#print(fileopen)
contatore = 0
Risultato:
10.5 Rimozione spazi bianchi
Partendo dal concetto che ogni stringa contiene in fondo “\n”, la funzione RSTRIP() ha la finalità di
eliminare gli spazi bianchi al termine di ogni linea.
import os
cwd = os.getcwd()
files = os.listdir(cwd)
#print(cwd, files)
fileopen = open(r"C:\Users\Administrator\PycharmProjects\test10\fileProva.txt")
#print(fileopen)
Risultato:
prodotto 1
prodotto 2
10.6 Ricerca di una stringa
Il metodo FIND() permette di trovare le linee dove una stringa è contenuta. Se la stringa non viene
trovata restituisce -1.
Nell’esempio sottostante non viene trovata la stringa a e quindi stampa il valore contenuto in else.
import os
cwd = os.getcwd()
files = os.listdir(cwd)
#print(cwd, files)
fileopen = open(r"C:\Users\Administrator\PycharmProjects\test10\fileProva.txt")
#print(fileopen)
Risultato:
uscita...
10.6 Scrittura di un file
Nel caso della scrittura, si utilizza un parametro aggiuntivo “w”. L’esempio apre il file
“prova4.txt” se presente, altrimenti lo crea. Con la funzione WRITE() viene effettuata la scrittura e
poi successivamente con CLOSE() verrà processata la chiusura.
fileopen.write(stringa1)
fileopen.close()
Risultato:
Min 2:12
fileopen.write(stringa1)
fileopen.write(stringa2)
fileopen.close()
Risultato:
10.7 Metodo read() – readline()
L’attributo “r” si riferisce all’apertura del file in sola lettura. Con READ() l’obbiettivo è leggere i
primi 11 caratteri contenuti nel file.
f = open("prova5.txt", "r")
print(f.read(11))
Risultato:
prova prova
Il metodo readline() legge invece la prima linea del file. Lanciando nuovamente il file viene
stampata la riga successiva.
f = open("prova5.txt", "r")
print(f.readline())
print(f.readline())
Risultato:
Il ciclo FOR serve per scorrere le righe contenute nel file “prova5.txt” e stampare ogni riga.
f = open("prova5.txt", "r")
for x in f:
print(x)
Risultato:
L’attributo APPEND serve per attaccare la stringa in fondo al file.
f = open("prova5.txt", "a")
f.write("prova prova provaaaaana6")
Risultato:
f = open("prova5.txt", "w")
f.write("sovrascrivo tutto!!")
Risultato:
10.8 Eliminare di un file
L’attributo “x” crea il file e se il file è già presente riporta un errore. Nel caso in cui non esista, non
restituisce errori.
f = open("file7.txt", "x")
Risultato:
0:37
Il metodo REMOVE() che elimina un file, può essere utilizzato importando il modulo OS. Nel caso
in cui sia stato già rimosso il file, viene restituito un messaggio di errore.
import os
os.remove("file7.txt")
Risultato:
L’esercizio sottostante utilizza anche EXISTS() per verificare se il file esiste. Nel caso in cui il file
esista, non viene restituito alcun errore.
import os
if os.path.exists("file8.txt"):
os.remove("file8.txt")
else:
print("Il file NON esiste!")
Risultato:
L’esempio sfrutta le SOCKET per far comunicare due processi applicativi all’interno della stessa
macchina.
L’obbiettivo è ottenere l’hostname del proprio PC, ovvero il nome. Per fare un secondo controllo
possiamo andare in Pannello di controllo > Sistema.
import socket
print(socket.gethostname())
Risultato:
import socket
host = "EC2AMAZ-SFJIEAU"
print('{} : {}'.format(host, socket.gethostbyname(host)))
Risultato:
11.3 Da IP a Hostname
import socket
hostname, aliases, addresses = socket.gethostbyaddr("10.0.0.34")
print('Nome host:', hostname)
Risultato:
import socket
from urllib.parse import urlparse
url = "ftp://www.google.it"
parsed_url = urlparse(url)
port = socket.getservbyname(parsed_url.scheme)
print(parsed_url.scheme, port)
Risultato:
ftp 21
Specificata una certa URL, è possibile ottenere i protocolli su porte standard associati a tali URL:
import socket
from urllib.parse import urlparse
for porte in [80, 443, 22,21]:
MiaUrl = '{}://google.it/'.format(socket.getservbyport(porte))
print(MiaUrl)
Risultato:
11.6 Contenuto di una pagina WEB
Il modulo SOCKET può essere utilizzato anche per lavorare con le pagine web, ma nel caso
specifico è più corretto fare uso della libreria “urllib”. Questa permette di usare le pagine web
come file.
import urllib.request
fhand = urllib.request.urlopen('https://www.sterntaler.lt/robots.txt')
for line in fhand:
print(line.decode().strip())
Risultato:
11.7 Creazione CLIENT/SERVER
Il modulo SERVER, come evidenziato dall’utilizzo del metodo WHILE TRUE, resterà sempre in
attesa di una connessione.
L’architettura client/server è basata su un localhost, per cui entrambi sono ulla macchina locale
contemporaneamente con indirizzo 127.0.0.1.
Il client si connette al server che è in esecuzione sulla stessa porta 16000. Viene effettuato quindi il
binding sulla porta 16000. Il server attende che arrivi una connessione. Quando la connessione sarà
attiva, verrà stampato l’indirizzo del client. I dati vengono ricevuti in segmenti e non in un’unica
soluzione. Nel caso di messaggi lunghi, questi vengono divisi e poi ritrasmessi. Una volta terminati i
dati, la connessione verrà chiusa con SOCKET.CLOSE().
Modulo server:
import socket
import sys
# Si parte con la creazione del SOCKET. AF_INET per indirizzi IPv4 e SOCK_STREAM per
protocollo TCP.
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
while True:
# Sempre in attesa di una connessione (ciclo WHILE)
print("Sono in attesa di una connessione...")
connection, client_address = sock.accept()
try:
print('connessione da', client_address)
finally:
# Chiusura della CONNESSIONE
connection.close()
Modulo client:
import socket
import sys
try:
# Invio dati
messaggio = b'ciao mondo...ciao mondo...ciao mondo'
print(format(messaggio))
sock.sendall(messaggio)
finally:
print('chiusura socket')
sock.close()
SQLite Browser è un programma con interfaccia grafica utile per effettuare le operazioni sulle
tabelle. È disponibile all’indirizzo https://sqlitebrowser.org/.
Sul sito web dal menu “Download”, è possibile scaricare la versione del programma per il sistema
operativo in uso sul computer.
Una volta partito il download, è sufficiente accettare i termini di utilizzo e proseguire avanti.
Cliccare poi su “Install”. Una volta terminata l’installazione, è possibile aprire il programma.
12.2 Creazione della prima tabella
In questa fase viene importato il modulo “sqlite3”. SQLITE3.CONNECT() è il nome del database.
import sqlite3
conn = sqlite3.connect('biblioteca.sqlite')
cur = conn.cursor()
conn.close()
Risultato:
La verifica può essere effettuata controllando direttamente se il database è stato creato nelle cartelle.
Il nome del database è “biblioteca.sqlite”.
È possibile adesso procedere alla creazione di una tabella che conterrà titolo e autore del libro.
La variabile “cur” è una sorta di database handle che andrà ad eseguire le query indicate con
CREATE (secondo il linguaggio SQL) all’interno di EXECUTE(). Infine verrà chiusa la
connessione con conn.close(). Il database cambierà dimensione una volta creata la tabella.
import sqlite3
conn = sqlite3.connect('biblioteca.sqlite')
cur = conn.cursor()
cur.execute('CREATE TABLE Libro (Titolo TEXT, Autore TEXT)')
conn.close()
Risultato:
SQL Lite Browser viene utilizzato per verificare se il database è stato creato correttamente.
Una volta definita la tabella e i campi, è possibile inserire le informazioni. cur.execute() definirà le
query di inserimento dei dati, utilizzando INSERT.
import sqlite3
conn = sqlite3.connect('biblioteca.sqlite')
cur = conn.cursor()
cur.execute('INSERT INTO Libro (Titolo, Autore) VALUES (?, ?)', ('LibroA', 'AutoreA'))
cur.execute('INSERT INTO Libro (Titolo, Autore) VALUES (?, ?)', ('LibroB', 'AutoreB'))
cur.execute('INSERT INTO Libro (Titolo, Autore) VALUES (?, ?)', ('LibroC', 'AutoreC'))
cur.execute('INSERT INTO Libro (Titolo, Autore) VALUES (?, ?)', ('LibroD', 'AutoreD'))
conn.commit()
cur.close()
Risultato:
Tornando su SQL Lite Browser, il database ha aggiornato il contenuto con i dati aggiunti all’interno.
12.4 Operazione di SELECT
Partendo dalla SELECT, l’operazione seleziona dei dati della tabella. Il ciclo FOR serve per
scorrere le righe e visualizzarle con COMMIT().
import sqlite3
conn = sqlite3.connect('biblioteca.sqlite')
cur = conn.cursor()
cur.execute('SELECT Autore, Titolo FROM Libro ')
for row in cur:
print(row)
conn.commit()
cur.close()
Risultato:
L’operazione di UPDATE utilizza set per impostare “Autore”. Il valore “AutoreF” viene aggiornato.
import sqlite3
conn = sqlite3.connect('biblioteca.sqlite')
cur = conn.cursor()
cur.execute("update Libro set Autore = (?) where Titolo = (?) ", ("AutoreF", "LibroD"))
conn.commit()
cur.close()
Risultato:
Verificando SQL Lite Browser, è possibile vedere come il campo sia stato automaticamente
aggiornato una volta effettuata l’operazione su PyCharm.
12.6 Operazione di DELETE
L’operazione DELETE serve per la cancellazione del libro con stringa “AutoreA”.
import sqlite3
conn = sqlite3.connect('biblioteca.sqlite')
stringa="AutoreA"
cur = conn.cursor()
cur.execute("delete from Libro where Autore=(?)", (stringa,))
conn.commit()
cur.close()
Risultato:
Aprendo SQL Lite Browser è visualizzabile il contenuto aggiornato.