Sei sulla pagina 1di 90

Unità P2:

Numeri
e stringhe
VARIABILI, VALORI, TIPI, ESPRESSIONI

Capitolo 2

This Photo by Unknown Author is licensed under CC BY-SA


Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 1
Introduzione
§ I numeri e le stringhe di caratteri (sequenze di caratteri) sono
importanti strutture di dati in qualsiasi programma Python
o Questi sono anche i componenti che usiamo per costruire strutture dati più
complesse
§ In questa Unità impareremo a utilizzare numeri e testi.
§ Scriveremo diversi semplici programmi che li utilizzano.

Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 2


Obiettivi dell’Unità
§ Dichiarare e inizializzare variabili e costanti
§ Capire le proprietà e i limiti dei numeri interi e a virgola mobile
§ Apprezzare l’importanza dei commenti e di una buona
impostazione del codice
§ Scrivere espressioni matematiche ed istruzioni di assegnazione
§ Creare programmi che leggano e processino input, mostrando a
video i risultati
§ Imparare ad usare le stringhe di Python

Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 3


Variabili 2.1

Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 4


Variabili
§ Una variabile è una zona di memoria dotata di un nome in un
programma che fa riferimento ad un valore specifico
§ Ci sono diversi tipi di valori, ciascuno usato per memorizzare cose
diverse

Variabili Valori

base 6
altezza 4
area
indirizzo 24.0
citta_residenza 'Corso Duca Degli Abruzzi'
citta_nascita
'Torino'

Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 5


Variabili
§ Si ‘definisce’ una variabile dicendo all’interprete
o Il nome scelto per la variabile (con il quale, in seguito, ci si riferirà alla
variabile)
o Il valore iniziale della variabile

lattine = 4 # definisce & inizializza la variabile


lattine
§ Si usa un’istruzione di assegnazione per assegnare un valore alla
variabile
o Il valore iniziale o un nuovo valore (che sostituisce il precedente)

lattine = 7 # cambia il valore

Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 6


Definizione delle variabili
§ Per definire una variabile bisogna specificarne un nome e un valore
iniziale
lattine = 4 # definisce & inizializza la variabile
lattine

Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 7


Visualizzare le variabili http://pythontutor.com/

Valori e tipi
Nomi delle
📜 volume0.py variabili

Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 8


L’istruzione di assegnazione
§ Usare l’istruzione di assegnazione = per inserire un nuovo valore
all’interno di una variabile: il nome della variabile si riferirà al
nuovo valore
o lattine = 4 # definisce lattine e inizializza a 4
o lattine = 6 # cambia il valore associato a lattine, che
da ora sarà 6
§ Attenzione: il segno = NON rappresenta un confronto:
o Esso copia il valore alla destra del segno nella variabile alla sinistra del segno
o Vedrete l’operatore di verifica di uguaglianza nel prossimo capitolo

Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 9


Sintassi dell’assegnazione
§ Il valore calcolato alla destra del segno ‘=’ è assegnato alla
variabile sulla sinistra

Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 10


Un esempio: acquisto di una soda
§ Le bevande analcoliche sono vendute in lattina e in bottiglia. Un
negozio ne offre una confezione di 6 lattine da 12 once allo stesso
prezzo una bottiglia da due litri. Quale conviene comprare? (12
once fluide equivalgono a circa 0.355 litri)

Lista delle variabili: Tipi di numeri:


Numero di lattine a confezione Numero intero
Once per lattina Numero intero
Once per bottiglia Numero con frazione

Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 11


Perché diversi tipi?
§ Abbiamo visto tre diversi tipi di dato:
o Numero intero (senza parte frazionaria) 7 (integer or int)
o Numero con parte frazionaria 8.88 (float)
o Sequenza di caratteri "Bob" (string)

§ Il tipo è associato al valore, non alla variabile


o cansPerPack = 6 # int
o canVolume = 12.0 # float

Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 12


Aggiornare una variabile (assegnare un valore)
§ Se un nuovo valore viene associato a una variabile esistente, quel
valore rimpiazza il contenuto precedente della variabile
§ Per esempio:
o cansPerPack = 6
o cansPerPack = 8

Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 13


Aggiornare una variabile (calcolata)
§ Esecuzione dell’enunciato:
o cansPerPack = cansPerPack + 2
§ Step by Step:

o Step 1: Calcolare la parte destra dell’enunciato.


Trovare il valore di cansPerPack, e aggiungergli due.

o Step 2: Salvare il risultato nella variabile a sinistra dell’operatore di


assegnazione

Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 14


Variabili non definite
§ Bisogna definire (e inizializzare) una variabile prima di usarla: deve
essere definita da qualche parte sopra la linea di codice dove la si
usa per la prima volta
o canVolume = 12 * literPerOunce
o literPerOunce = 0.0296
o Will cause a NameError: name 'literPerOunce' is not defined
§ L’ordine corretto delle istruzioni è:
o literPerOunce = 0.0296
o canVolume = 12 * literPerOunce

Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 15


Tipi di dati
§ Il tipo di dato è associato al valore e non alla variabile. Quindi:
§ Una variabile può essere assegnata a diversi valori di diverso tipo,
in diverse parti del programma.

o taxRate = 5 # un intero
E poi…
o taxRate = 5.5 # un numero a virgola mobile
E poi…
o taxRate = "Non-taxable" # una stringa

§ Se si usa una variabile ed essa è di un tipo non previsto, il


programma darà errore.

Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 16


Esempio…
§ Aprire PyCharm (o replit.com) e creare un nuovo progetto

§ # Testing different types in the same variable


taxRate = 5 # int
print(taxRate)
taxRate = 5.5 # float
print(taxRate)
taxRate = "Non-taxable" # string
print(taxRate)

Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 17


Attenzione!
§ Il seguente programma stampa 5 , 5 , Non-Taxable. Perché?
Qual è l’errore?

§ # Testing different types in the same variable


taxRate = 5 # int
print(taxRate)
taxrate = 5.5 # float
print(taxRate)
taxRate = "Non-taxable" # string
print(taxRate)

Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 18


Ma…
§ taxRate = "Non-taxable" # string
print(taxRate)
print(taxRate + 5)
o Genera: TypeError: can only concatenate str (not "int") to str

§ print(taxRate + "??")
o Stampa Non-taxable??

§ Quindi…
o Una volta inizializzata una variabile con un valore di un particolare tipo si deve
avere cura di continuare a salvare nella variabile valori del medesimo tipo

Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 19


Avvertimenti
§ Vanno eseguite solamente le operazioni che sono valide a seconda
del valore corrente della variabile
o Ricordarsi a che tipo si riferisce ogni variabile

§ Quando si utilizza l’operatore “+” con stringhe, il secondo


argomento viene concatenato alla fine del primo, ma entrambi gli
argomenti devono essere stringhe
o Le operazioni sulle stringhe verranno viste più nel dettaglio più avanti in
questa Unità

Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 20


Tabella 1: Numeri espliciti (literal) in Python

Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 21


Nomi delle variabili
§ Seguire queste semplici regole
o I nomi delle variabili devono iniziare con una lettera o con il carattere
underscore-sottolineato ( _ )
• I caratteri seguenti possono essere lettere (maiuscole o minuscole), numeri o underscore
o Non si possono usare altri simboli (? or %, ...), né gli spazi
o Separare le parole secondo la convenzione
• ‘snake_case’: Utilizzare gli underscore per separare le diverse parole (preferito)
• ‘camelCase’: Utilizzare le maiuscole per indicare i confini delle diverse parole
o Non utilizzare le parole ‘riservate’ di Python (vedere Appendice C, pag. A6 e
A7)

Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 22


Tabella 2: Nomi di variabili in Python

Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 23


Suggerimento: nomi descrittivi
§ Scegliere per le variabili dei nomi descrittivi
§ Quale nome è più descrittivo?
o canVolume = 0.35
o cv = 0.355
§ Questo risulta particolarmente importante quando un programma
è scritto da più persone.

Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 24


Costanti
§ In Python una constante è una variabile il cui valore non andrebbe
modificato dopo che le è stato assegnato un valore iniziale.
§ È buona norma usare le maiuscole per nominare le costanti
o BOTTLE_VOLUME = 2.0
§ Come stile di programmazione si ritiene utile usare, nei calcoli, costanti
dotate di nome al posto di valori espliciti: quale è più chiaro?
o totalVolume = bottles * 2
o totalVolume = bottles * BOTTLE_VOLUME
§ Un programmatore, leggendo la prima espressione, potrebbe non capire
il significato del “2”
§ Python permette di modificare il valore di una costante
o Solo perché si può fare, non significa che si deve fare

Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 25


Costanti: Nomi & Stile
§ È consuetudine usare le MAIUSCOLE per le costanti in modo da
distinguerle dalle variabili.
o È molto chiaro visivamente
§ BOTTLE_VOLUME = 2 # Constant
§ MAX_SIZE = 100 # Constant
§ taxRate = 5 # Variable

Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 26


Python & Commenti
§ È bene utilizzare commenti all’inizio di ogni programma e chiarire i
dettagli del codice
§ I commenti sono d’aiuto agli altri e un modo per tenere traccia del
ragionamento
o Commentare serve ad aggiungere spiegazioni per chi legge il codice
§ Il compilatore ignora i commenti
o Altri programmatori li leggeranno
o Anche tu, un giorno
Documentation is a love letter that you write to
your future self. Damian Conway (2005).
“Perl Best Practices”, p.153, "O'Reilly Media, Inc."

Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 27


Commentare il codice

📜 volume1.py

Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 28


Aritmetica 2.2

Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 29


Operatori aritmetici elementari
§ Python supporta tutte le operazioni aritmetiche elementari:
o Addizione +
o Sottrazione -
o Moltiplicazione *
o Divisione /
o Potenza **
§ Usare le parentesi per scrivere le espressioni

b * ((1 + r / 100) ** n)

§ La precedenza è simile a quella algebrica:


o PEMDAS
• Parenthesis, Exponent, Multiply/Divide, Add/Subtract

Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 30


Utilizzare diversi tipi numerici
§ Se si usano numeri interi e a virgola mobile in un’espressione
matematica, il risultato sarà un numero a virgola mobile.
§ 7 + 4.0 # Porta al valore a virgola mobile
11.0

§ 4 e 4.0 sono tipi di dato diversi, per un computer

§ Ricordare:
o Se si usano stringhe con numeri interi o a virgola mobile, il risultato sarà un
errore

Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 31


Divisione intera
§ Quando si dividono due numeri interi con l’operatore /, si ottiene
un valore a virgola mobile.
o Ad esempio, 7 / 4 dà 1.75
§ Si può però anche eseguire una divisione intera usando l’operatore
//.
o L’operatore “//” calcola il quoziente e ignora la parte frazionaria
o Per esempio, 7 // 4 dà come risultato 1
• Infatti, 7 diviso 4 è 1.75 con una parte frazionaria di 0.75, che viene ignorata.
o Se gli operandi sono frazionari, effettua la divisione e poi tronca il risultato

Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 32


Calcolare il resto
§ Se si è interessati al resto della divisione tra interi, va usato
l’operatore “%” (detto modulo):
o resto = 7 % 4
§ Il valore del resto sarà 3
§ Talvolta detto «modulo»
§ Usata prevalentemente tra numeri interi
o Per operandi frazionari, l’operazione non è particolarmente utile

Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 33


Esempio
# Convert pennies to dollars and cents
pennies = 1729
dollars = pennies // 100 # Calculates the number
of dollars
cents = pennies % 100 # Calculates the number
of pennies
print("I have", dollars, "and", cents, "cents")

📜 pennies.py

Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 34


Esempi di divisione intera e resto

Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 35


Invocare funzioni
§ Una funzione è un gruppo di istruzioni di programmazione che
esegue un determinato compito.
§ La funzione print() visualizza informazioni, ma ci sono molte
altre funzioni disponibili in Python
o Imparerete a chiamare le funzioni disponibili e a crearne delle nuove
§ Invocando una funzione bisogna passare il numero corretto di
argomenti (anche chiamati parametri)
o Se non viene fatto, il programma genera un messaggio di errore

Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 36


Invocare funzioni che restituiscono un valore
§ La maggior parte delle funzioni restituisce un valore. Ossia
quando una funzione completa il suo compito passa il valore al
punto dove la funzione è stata invocata
§ Per esempio:
o L’invocazione abs(-173) restituisce il valore 173.
o Il valore restituito da una funzione può essere usato in un’espressione o
salvato in una variabile
• distance = abs(x)
o Si può usare l’invocazione di una funzione come argomento della funzione
print
o print(abs(-173))

Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 37


Funzioni matematiche predefinite

Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 38


Librerie di Python (moduli)
§ Una libreria è una raccolta di codice (e.g., funzioni, costanti, tipi di
dato), scritto e compilato da terzi, che è pronto all’uso in un
programma
o Sempre controllarne la documentazione prima dell’utilizzo
§ Una libreria standard è una libreria che si considera parte del
linguaggio ed è inclusa in qualsiasi ambiente di sviluppo Python
o https://docs.python.org/3/library/index.html
§ Le librerie (comprese quella standard) sono organizzate in moduli
o Funzioni e tipi di dati correlati sono raggruppati nello stesso modulo
o Le funzioni definite in un modulo devono essere esplicitamente caricate in
in programma prima che questo le possa utilizzare

Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 39


Librerie, moduli, funzioni
§ Funzioni predefinite
o Sempre disponibili (come print(), abs(), …)
§ Libreria standard
o Parte di ogni installazione Python
o Organizzate in moduli
o Ogni modulo contiene più funzioni
o Prima di usare la funzione, bisogna importare il modulo
§ Librerie addizionali
o Non fanno parte di Python
o Devono essere scaricate/installate nel progetto (usando l’IDE o la linea di
comando)
o Dopo essere state installate, possono essere importate e se ne possono usare le
funzioni

Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 40


Funzioni predefinite (sempre disponibili)

https://docs.python.org/3/library/functions.html

Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 41


Funzioni della libreria standard
§ La funzione sqrt(), che calcola la radice quadrata dell’argomento,
è nel modulo ‘math’ della libreria standard
o https://docs.python.org/3/library/math.html

# First include this statement at the top of your


# program file.
from math import sqrt

# Then you can simply call the function as


y = sqrt(x)

Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 42


Alcune funzioni dal modulo math

from math import xxxxx

Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 43


Importare i moduli
§ Tre modi per importare le funzioni dai moduli:
o from math import sqrt, sin, cos
# imports listed functions
o from math import *
# imports all functions from the module
o import math
# imports the module and gives access to all functions
§ Se si usa il terzo metodo, bisogna aggiungere il nome del modulo e
un “.” prima di ogni invocazione di funzione
o import math
o y = math.sqrt(x)

Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 44


Conversione da numero a virgola mobile a intero
§ Si possono usare le funzioni int() e float() per convertire tra
numeri interi e a virgola mobile:
balance = total + tax # balance: float
dollars = int(balance) # dollars: integer
§ Si perde la parte frazionaria del numero a virgola mobile (non c’è
arrotondamento)

Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 45


Conversione da virgola mobile a intero
Function Definition
math.floor(x) Restituisce l’approssimazione per difetto di x come numero in virgola mobile.
math.ceil(x) Restituisce l’approssimazione per eccesso di x come numero in virgola mobile.
math.trunc(x) Restituisce il valore reale di x troncato ad un intero (non è equivalente a floor, per I
numeri negativi)
round(x,d) Restituisce x approssimato con una precision di d cifre dopo il punto decimale. Se d
è omesso o è None, ritorna l’intero più vicino.
int(x) Ritorna un valore intero a partire da un numero x o una stringa s. Se x è un numero
int(s) in virgola mobile, tronca verso lo zero. Per le stringhe, converte la stringa in un
intero (se la stringa rappresenta un numero).

Per maggiori informazioni:


How to Round Numbers in Python
https://realpython.com/python-rounding

Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 46


Errori di arrotondamento
§ I numeri a virgola mobile non sono esatti
o Questa è una limitazione del sistema binario, non tutti i numeri a virgola mobile
hanno una rappresentazione esatta
§ Provare:
price = 4.35
quantity = 100
total = price * quantity
# Should be 100 * 4.35 = 435.00
print(total) # prints 434.99999999999994
§ Si possono gestire gli errori di arrotondamento:
o Approssimando all’intero più vicino (vedere Sezione 2.2.4)
o Mostrando un numero fisso di numeri dopo la virgola (vedere Sezione 2.5.3)
o Definire una tolleranza EPSILON e fare solo confronti approssimati (vedere Sezione
3.2, e vedere math.isclose())

Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 47


Espressioni aritmetiche

Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 48


Parentesi non accoppiate
§ Considerare l’espressione
((a + b) * t / 2 * (1 - t)
o Che cosa c’è di sbagliato?
§ Ora si consideri questa espressione
(a + b) * t) / (2 * (1 - t)
o Questa espressione ha tre “(” e tre“)”, ma non è ancora corretta
§ In qualsiasi punto interno ad un’espressione, il numero di parentesi
che sono state aperte dall’inizio dell’espressione deve essere
maggiore o uguale a quello delle parentesi che sono state chiuse
§ Al termine dell’espressione i due conteggi devono equivalersi

Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 49


Suggerimenti per la programmazione
§ Utilizzare gli spazi nelle espressioni
totalCans = fullCans + emptyCans
o È più leggibile di:
totalCans=fullCans+emptyCans

Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 50


Esercizi di problem
solving 2.3

PRIMA SI PENSA ALL’ALGORITMO, POI SI SCRIVE IL CODICE PYTHON

Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 51


Problem solving: prima lo si fa a mano
§ Un passo importantissimo dello sviluppo di un algoritmo è eseguire
«a mano» l’elaborazione prevista.
o Se non si è in grado di risolverlo a mano, difficilmente si riuscirà a scrivere il
programma
§ Esempio di problema:
o Bisogna posizionare lungo il muro una fila di piastrelle nere e bianche. Per
ragioni estetiche l’architetto ha specificato che la prima e l’ultima piastrella
devono essere nere. Il vostro compito è calcolare il numero di piastrelle
necessarie e il vuoto a ciascuna delle due estremità della riga, dato lo spazio
disponibile e la larghezza di ogni piastrella.

Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 52


Iniziare con valori d’esempio
§ Dati
o Larghezza totale: 100 pollici
o Larghezza di una piastrella: 5 pollici
§ Testare i valori
§ Vediamo… 100/5 = 20, perfetto! 20 piastrelle. Niente spazio vuoto.
o Però… BN…BN «… la prima e l’ultima piastrella dovrebbero essere nere.»
§ Bisogna guardare con più attenzione al problema...
o Iniziando con una nera, poi con coppie BN

§ Osservazione: ogni coppia è 2 volte la larghezza di 1 piastrella


o In questo esempio, 2 x 5 = 10 pollici

Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 53


Continuare ad applicare la soluzione
o Larghezza totale: 100 pollici
o Larghezza di una piastrella: 5 pollici

§ Calcolare la larghezza totale di tutte le piastrelle


o Una piastrella nera: 5 pollici
o 9 coppie di BN: 90 pollici
o Larghezza totale: 95 pollici
§ Calcolare gli spazi (uno a ciascuna estremità)
o 100 – 95 = 5 pollici = spazio totale
o Spazio di 5 pollici / 2 = 2.5 pollici a ciascuna estremità

Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 54


Traduzione in algoritmo
§ Usare l’esempio per capire come vadano eseguiti i calcoli
§ Quante coppie di piastrelle B e N?
o Notare: deve essere un numero intero
o Parte intera di: (larghezza totale – larghezza piastrella) / ( 2 * larghezza
piastrella)
§ Quante piastrelle?
o 1 + 2 x numero di coppie
§ Spazio a ciascuna estremità
o (larghezza totale – numero di piastrelle * larghezza piastrella) / 2

Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 55


L’algoritmo
§ Calcolare il numero di coppie di piastrelle
o Numero di coppie = parte intera di (larghezza totale – larghezza piastrella) /
(2 * larghezza piastrella)
§ Calcolare il numero di piastrelle
o Numero di piastrelle = 1 + (2 * numero di coppie)
§ Calcolare lo spazio
o Spazio ad ogni estremità = (larghezza totale – numero di piastrelle*
larghezza piastrella ) / 2
§ Visualizzare il numero di coppie di piastrelle
§ Visualizzare il numero di piastrelle totale in una riga
§ Visualizzare lo spazio vuoto

Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 56


Soluzione
##
# Computes the number of tiles needed and the gap at each end when
# placing tiles along a wall.
#

# Define the dimensions.


totalWidth = 100
tileWidth = 5

# Calculate the tiles and gaps.


numberOfPairs = (totalWidth - tileWidth) // (2 * tileWidth)
numberOfTiles = 1 + 2 * numberOfPairs
gap = (totalWidth - numberOfTiles * tileWidth) / 2.0

print("Number of tiles:", numberOfTiles)


print("Gap at each end:", gap)

📜 tiles.py

Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 57


Stringhe 2.4

Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 58


Stringhe
§ Definizione base:
o Un testo è costituito da caratteri
o I caratteri sono lettere, numeri, segni punteggiatura, spazi, …
o Una stringa è una sequenza di caratteri
§ In Python, le stringhe esplicite (literal) sono specificate racchiudendo la
sequenza di caratteri tra virgolette singole o doppie.
print("This is a string.", 'So is this.')
§ Permettendo entrambi i tipi di virgolette, Python rende più semplice
l’inclusione di un apostrofo o di virgolette all’interno della stringa
o message = 'He said "Hello"'
o Ricordare di usare lo stesso tipo di virgolette, singole con singole e doppie con
doppie

Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 59


Concatenazione di stringhe (“+”)
§ Si può ‘aggiungere’ una stringa alla fine di un’altra
firstName = "Harry"
lastName = "Morgan"
name = firstName + lastName # HarryMorgan
print("my name is:", name)
§ Si vuole aggiungere uno spazio tra le due stringhe?
name = firstName + " " + lastName # Harry Morgan

Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 60


Lunghezza delle stringhe
§ Il numero di caratteri in una stringa è detto lunghezza della stringa.
o Esempio, la lunghezza di "Harry" è 5
§ Si può calcolare la lunghezza di una stringa usando la funzione
Python len():
length = len("World!") # length è 6
§ La stringa di lunghezza 0 è detta stringa vuota. Non contiene
caratteri ed è scritta come "" oppure ''.

Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 61


Note
§ Usare “+” per concatenare le stringhe è un esempio di un concetto
detto operator overloading (ossia operatori che hanno diverse
funzioni a seconda dell’utilizzo).
§ L’operatore “+” svolge diverse funzioni, dipendendo dal tipo di
valori coinvolti:
o intero + intero → addizione intera
o float (virgola mobile) + float, float + intero → addizione float
o stringa + stringa → concatenazione di stringhe
o lista + lista → concatenazione di liste
o…
§ Ma…
o stringa + numero intero → errore

Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 62


Ripetizione di stringhe (“*”)
§ Si può anche produrre una stringa che sia il risultato della
ripetizione di una stringa
§ Ipotizzare che si voglia visualizzare una linea tratteggiata
§ Invece di specificare una stringa con 50 trattini, si può usare
l’operatore * per creare una stringa che sia composta dalla stringa
"-" ripetuta 50 volte
dashes = "-" * 50
o Dà come risultato la stringa
"-------------------------------------------------"
§ Anche l’operatore “*” è un tipo di operatore overloaded

Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 63


Convertire i numeri in stringhe
§ Si usa la funzione str() per convertire da numeri a stringhe
balance = 888.88
dollars = 888
balanceAsString = str(balance)
dollarsAsString = str(dollars)
print(balanceAsString)
print(dollarsAsString)

Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 64


Convertire le stringhe in numeri
§ Quando una stringa contiene la rappresentazione di un numero
(intero o floating point), la si può convertire in un valore numerico
usando le funzioni int() e float():
val = int("1729")
price = float("17.29")
print(val)
print(price)
§ Questa conversione è importante quando le stringhe sono fornite
in input dall’utente (vedremo la prossima settimana come)

Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 65


Errori di conversione
§ Nel convertire una stringa in numero, è necessario che la stringa
contenga una rappresentazione corretta del numero stesso
§ In caso contrario, il programma genera un errore di tipo «Value
Error»

val = int("ciao")

ValueError: invalid literal for int() with base


10: 'ciao'

Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 66


Stringhe e caratteri
§ Le stringhe sono sequenze di caratteri

§ Le stringhe sono immutabili: non possono essere modificate dopo


la loro creazione
o La stessa variabile può però essere aggiornata per riferirla ad un’altra stringa

Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 67


Estrarre un carattere da una stringa
§ Ad ogni carattere in una stringa corrisponde un indice numerico
indice
0 1 2 3 4 5 6 7 8 9
c h a r s h e r e carattere

§ Il primo carattere ha indice zero (0)


o L’ultimo carattere ha indice len(name)-1
§ L’operatore [] ritorna il carattere corrispondente ad un dato
indice:
0 1 2 3 4
name = "Harry"
H a r r y
first = name[0]
last = name[4]
name[0] name[4]

Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 68


Indici validi
§ Gli unici indici validi vanno da 0 a len(string)-1
§ Indici non validi generano errore
o IndexError: string index out of range.

name = 'Bob' Bob has length 3


print(name, 'has length', len(name)) B
print(name[0]) o
print(name[1]) b
print(name[2]) Traceback (most recent call last):
print(name[3]) File "main.py", line 6, in <module>
print(name[3])
IndexError: string index out of range

Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 69


Immutabilità
§ Le stringhe sono immutabili in Python
§ Non si possono cambiare i valori dei caratteri
o Viene generato l’errore TypeError

name = 'Bob' B
Traceback (most recent call last):
print(name[0]) File "main.py", line 5, in <module>
name[0] = 'G'
name[0] = 'G' TypeError: 'str' object does not support
item assignment

§ Workaround: impareremo a costruire stringhe ‘aggiornate’ invece


di modificare le stringhe correnti

Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 70


Porzioni (slice) di una stringa
§ Serve ad estrarre una parte della stringa
§ Data una stringa:
nome = "Paperon de' Paperoni"
§ Si è interessati solo alla porzione di stringa dal quinto carattere
(indice: 4, ‘r’) al decimo carattere (indice: 9, ‘e’)
§ Si può estrarre una porzione di stringa ottenere l’operatore di slice:
porzione = nome[4 : 10]
§ Gli argomenti sono il primo elemento (incluso) e l’ultimo (escluso)
o Quindi nell’esempio si otterranno gli elementi di indice 4, 5, 6, 7, 8, 9
o "ron de"

Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 71


Porzioni (slice) di una stringa (2)
§ Entrambi gli indici usati con l’operatore slice sono opzionali
o Se il primo indice viene omesso, è sottinteso il primo carattere della stringa
(indice 0)
o Se il secondo indice viene omesso, saranno inclusi tutti gli elementi fino
all’ultimo

§ Esempi
nome[ : 6]
• Inclusi i caratteri dal primo al 6 (escluso)
nome[6 : ]
• Inclusi gli elementi dal 6 (compreso) fino alla fine della stringa
nome[ : ]
• Tutti gli elementi, dal primo all’ultimo (ne fa una copia, operazione inutile per le stringhe)

Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 72


Porzioni con «passo» diverso da 1
§ Nelle porzioni è possibile indicare un terzo argomento
o stringa[ start : stop : step ]
o Es.: nome[ 2 : 8 : 2 ] restituisce una stringa contenente i caratteri di
indice 2, 4, 6 à «prn»
o nome[::2] tutti i caratteri di indice pari
o nome[1::2] tutti i caratteri di indice dispari
§ E se lo step è negativo?
o Intuitivamente, invece di spostarmi in avanti ad ogni passo, mi sposto
indietro (e quindi prendo gli elementi in ordine inverso)
o In questo caso occorre che l’indice start sia maggiore di stop
o nome[9:3:-1] restituisce «ed nor»
o nome[::-1] tutta la stringa, in ordine inverso «inorepaP 'ed
norepaP»

Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 73


Operazioni su stringhe T
P y t r y it w
ho
nTu ith
tor
!

Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 74


Caratteri
§ I caratteri sono memorizzati come valori interi
o Vedere il subset ASCII nella tabella Unicode, Appendice A
o Per esempio, la lettera ‘H’ ha il valore ASCII 72
§ Python usa i caratteri Unicode
o Unicode definisce oltre 100,000 caratteri
o Unicode è stato creato capace di codificare il testo sostanzialmente in tutte
le lingue scritte
• https://home.unicode.org/ e http://www.unicode.org/charts/

Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 75


Codici ASCII

For Unicode characters see: https://unicode-table.com/

Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 76


Codici Unicode

For Unicode characters see: https://unicode-table.com/

Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 77


Conversione dei caratteri

Carattere Valore
(str) ASCII/Unicode
'x' (int)
120

Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 78


Funzioni vs. metodi
§ Python è un linguaggio orientato agli oggetti (object-oriented) e
tutti i valori sono oggetti.
o La programmazione object-oriented è fuori dagli obiettivi del corso, ne
vedremo solamente alcuni aspetti pratici
§ Ogni oggetto può avere metodi, ossia funzioni che possono essere
chiamate su quegli oggetti specifici, usando la sintassi
object.method()
§ Esempio: tutte le stringhe hanno il metodo upper() che
restituisce una nuova stringa con i caratteri maiuscoli
name = "John Smith"
# Sets uppercaseName to "JOHN SMITH"
uppercaseName = name.upper()

Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 79


Funzioni vs. metodi – cosa ricordare
FUNZIONI METODI

§ Le funzioni sono generali e possono § Diversi metodi sono specifici per diversi
accettare argomenti di diverso tipo tipi di oggetti
o Tutte le stringhe hanno un gruppo di metodi
§ Le funzioni sono chiamate o Tutti gli interi hanno un gruppo di metodi
direttamente, con un elenco di o…
parametri
o func(param) § I metodi sono chiamati con la
notazione del punto (dot-syntax)
§ Le funzioni restituiscono un risultato o object.method()
che può essere salvato in una variabile
o result = func(param) § I metodi restituiscono un risultato che
può essere salvato in una variabile
o result = obj.method()

Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 80


Alcuni utili metodi delle stringhe

Una lista completa di tutti i metodi per lavorare sulle stringhe è:


• https://www.programiz.com/python-programming/methods/string
• https://docs.python.org/3/library/stdtypes.html#string-methods

Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 81


Sequenze di escape
§ Come visualizzare le virgolette?
o Anteporre a " il carattere “\”, all’interno della stringa virgolettata
print("He said \"Hello\"")

§ Come visualizzare il backslash?


o Anteporre a \ un altro \
print("C:\\Temp\\Secret.txt")

§ Caratteri speciali nelle stringhe


*
o Andare a capo con ‘\n’
**
print("*\n**\n***")
***

Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 82


Sequenze di escape

https://www.programiz.com/python-programming/string

Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 83


Sequenze di per caratteri Unicode
§ Tutti i caratteri Unicode si possono rappresentare
o Includendoli direttamente nella stringa
• '♞'
o Attraverso i codici di escape \uxxxx (dove xxxx è un codice esadecimale
su 16 bit)
• '\u265e'
• '\u2620'
• '\u0420\u043e\u0441\u0441\u0438\u044f'
• '\u0395\u03bb\u03bb\u03ac\u03c2'
o Attraverso i codici di escape \Uxxxxxxxx (dove xxxxxxxx è un codice
esadecimale su 32 bit)
• '\U0001f600'

Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 84


Sommario

Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 85


Sommario: variabili
§ Un ‘valore’ è una zona di memoria contenente dei dati di un certo
tipo
§ Una ‘variabile’ è nome usato in un programma per riferirsi ad un
certo valore.
§ Definendo una variabile, bisogna specificare il valore iniziale.
§ Per convenzione, i nomi delle variabili iniziano con la minuscola.
§ Un’istruzione di assegnazione fa sì che la variabile faccia
riferimento ad un nuovo valore (solitamente dello stesso tipo),
dimenticando quello precedente.

Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 86


Sommario: operatori
§ L’operatore di assegnazione = non indica l’uguaglianza matematica.
§ Le variabili i cui valori iniziali non vanno modificati (‘costanti’) sono,
per convenzione, nominate con caratteri completamente
maiuscoli.
§ L’operatore / opera una divisione che porta ad un risultato che può
avere valore frazionario.
§ L’operatore // opera una divisione intera, il resto viene ignorato.
§ L’operatore % calcola il resto di una divisione.

Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 87


Sommario: Python
§ Le librerie Python dichiarano varie funzioni matematiche, come
sqrt() e abs()
§ Si può convertire tra interi, numeri a virgola mobile e stringhe
usando le rispettive funzioni: int(), float(), str()
§ La conversione può generare errori, qualora la stringa da convertire
non sia nel formato corretto
§ Le librerie Python sono raggruppate in moduli. Si usa l’enunciato
import per utilizzare i metodi da un modulo.

Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 88


Sommario: stringhe
§ Le stringhe sono sequenze di caratteri
§ La funzione len() restituisce il numero di caratteri in una stringa
§ Si usa l’operatore + per concatenare le stringhe; ossia per metterle
assieme ottenendo una stringa più lunga
§ Per la concatenazione, l’operatore + impone che entrambi gli
argomenti siano stringhe. I numeri vanno convertiti in stringhe con
la funzione str()

Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 89


Sommario: stringhe
§ Si usa l’operatore [pos] per estrarre gli elementi (singoli caratteri)
dalle stringhe, oppure [a:b:c] per estrarre una porzione (slice) di
caratteri
§ Gli indici dei caratteri delle stringhe sono calcolati partendo da 0
§ La libreria standard contiene numerose funzioni di manipolazione
delle stringhe
§ Tutti i metodi e le funzioni sulle stringhe restituiscono sempre una
nuova stringa, non modificano mai quella precedente
§ Per convertire i singoli caratteri dal formato stringa al valore
numerico ASCII/Unicode utilizzare le funzioni ord() e chr()

Politecnico di Torino, 2023/24 INFORMATICA / COMPUTER SCIENCES 90

Potrebbero piacerti anche