In questo articolo vediamo cosa sono I Numeri e le stringhe

In questo articolo vediamo cosa sono I Numeri e le stringhe

Variabili e valori

In un programma, una variabile è una porzione di memoria associata a un nome. Questo nome consente di accedere e manipolare il valore memorizzato. Le variabili permettono di scrivere programmi flessibili, in grado di trattare valori diversi in momenti diversi dell’esecuzione.

Esistono diversi tipi di valori, ciascuno adatto a rappresentare una specifica tipologia di dato. Tra i più comuni troviamo:

  • numeri interi (es. 6)
  • numeri con la virgola (es. 24.0)
  • stringhe di testo (es. 'Torino')

Ad esempio, possiamo definire le seguenti variabili:

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

Definizione e assegnazione

Una variabile si definisce assegnandole un valore iniziale mediante l’operatore di assegnazione =. Ad esempio:

lattine = 4

Con questa istruzione si crea una variabile di nome lattine e le si assegna il valore 4. In seguito, lo stesso nome può essere riutilizzato per modificare il contenuto della variabile:

lattine = 7

Questa nuova assegnazione sostituisce il valore precedente. È importante notare che Python, come altri linguaggi interpretati, non richiede di specificare esplicitamente il tipo di variabile: esso viene dedotto dal valore assegnato.

📌 Visualizzare l’esempio volume0.py nella sezione DOWNLOAD

L’istruzione di assegnazione

In Python, per associare un valore a una variabile, si utilizza l’istruzione di assegnazione, rappresentata dal simbolo =. La sintassi è molto semplice:

nome_variabile = valore

Esempio:

lattine = 4  # definisce la variabile 'lattine' e la inizializza con il valore 4
lattine = 6  # sovrascrive il valore precedente: ora 'lattine' vale 6

L’assegnazione non è un confronto! A differenza della matematica, il simbolo = in un linguaggio di programmazione non verifica l’uguaglianza tra due valori. Al contrario, indica che il valore a destra deve essere memorizzato nella variabile a sinistra.

Per esempio, l’istruzione:

x = 3 + 4

fa sì che x prenda il valore calcolato dall’espressione 3 + 4, cioè 7.

Nota: l’operatore di confronto di uguaglianza in Python è == e verrà trattato nel capitolo dedicato alle espressioni logiche e ai confronti.

Un esempio: acquisto di una soda

Supponiamo di voler confrontare due diverse confezioni di bevande analcoliche per capire quale sia più conveniente:

  • Confezione A: 6 lattine da 12 once ciascuna
  • Confezione B: 1 bottiglia da 2 litri

Vogliamo calcolare il volume totale in litri offerto dalla confezione di lattine per confrontarlo con quello della bottiglia.

Poiché 12 once fluide equivalgono a circa 0,355 litri, possiamo impostare un semplice programma Python che effettui questo calcolo.

cansPerPack = 6
ouncesPerCan = 12
literPerOunce = 0.0296

totalLiters = cansPerPack * ouncesPerCan * literPerOunce
print("Volume totale (in litri):", totalLiters)

In questo esempio:

  • cansPerPack e ouncesPerCan sono numeri interi (int),
  • literPerOunce è un numero decimale (float),
  • totalLiters conterrà un valore float risultante dal prodotto.

Tipi di dato in Python

Python gestisce automaticamente diversi tipi di dato associati ai valori, non alle variabili. I principali tipi che abbiamo incontrato sono:

  • Numeri interi (int) – es. 7
  • Numeri decimali (float) – es. 8.88
  • Stringhe (str) – es. "Bob"

Quando assegniamo un valore a una variabile, Python determina il tipo in base al contenuto.

cansPerPack = 6       # int
canVolume = 12.0      # float
name = "Alice"        # string

Aggiornare una variabile

In Python, è possibile modificare il valore di una variabile già definita semplicemente assegnandole un nuovo valore:

cansPerPack = 6
cansPerPack = 8  # ora cansPerPack vale 8

Se vogliamo aggiornare una variabile in base al suo valore attuale:

cansPerPack = cansPerPack + 2

Questo significa:

  1. Leggi il valore attuale di cansPerPack
  2. Aggiungi 2
  3. Assegna il nuovo valore alla stessa variabile

Attenzione: variabili non definite

Una variabile deve essere definita prima di essere utilizzata. In caso contrario, si otterrà un errore di tipo NameError.

Esempio errato

canVolume = 12 * literPerOunce  # ERRORE: 'literPerOunce' non è ancora definita
literPerOunce = 0.0296

Ordine corretto:

literPerOunce = 0.0296
canVolume = 12 * literPerOunce  # Funziona correttamente

Python esegue il codice riga per riga, quindi le variabili devono essere inizializzate prima del loro utilizzo.

Tipi di Dato in Python

Il tipo è associato al valore, non alla variabile

In Python, il tipo di dato (intero, decimale, stringa, ecc.) non è fissato alla variabile, ma al valore che viene assegnato. Questo significa che una stessa variabile può contenere valori di tipo diverso in momenti differenti dell’esecuzione.

Esempio

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

Nel frammento sopra, la variabile taxRate viene inizialmente associata a un numero intero, poi a un numero decimale, infine a una stringa. Python permette questo comportamento, ma occorre fare molta attenzione, perché usare una variabile con un tipo inaspettato può causare errori.


Esempio pratico

# Testing different types in the same variable
taxRate = 5           # int
print(taxRate)
taxRate = 5.5         # float
print(taxRate)
taxRate = "Non-taxable"  # string
print(taxRate)

Questo codice funzionerà correttamente e stamperà:

5
5.5
Non-taxable

Attenzione alla sensibilità al maiuscolo/minuscolo

Python distingue tra taxRate e taxrate: sono variabili diverse. Questo è un errore comune per i principianti.

Esempio errato

taxRate = 5       # int
print(taxRate)
taxrate = 5.5     # float, ma è una nuova variabile!
print(taxRate)    # stampa ancora 5, non 5.5
taxRate = "Non-taxable"
print(taxRate)

Output:

5
5
Non-taxable

Nel codice sopra, la riga taxrate = 5.5 non modifica la variabile taxRate, poiché il nome è scritto in modo diverso (r minuscola). Python è case-sensitive: distingue tra lettere maiuscole e minuscole.

Operazioni non valide tra tipi diversi

È importante ricordare che non si possono combinare direttamente valori di tipo diverso. Ad esempio, non è possibile sommare una stringa a un numero:

taxRate = "Non-taxable"
print(taxRate + 5)  # Errore!

Questo codice genererà l’errore:

TypeError: can only concatenate str (not "int") to str

Se invece concateno due stringhe:

print(taxRate + "??")

Otterrò:

Non-taxable??

Buone pratiche

Quando si lavora con le variabili:

  • Ricordarsi sempre il tipo di dato attuale associato a ciascuna variabile.
  • Evitare di riassegnare alla stessa variabile valori di tipo molto diverso, a meno che non sia strettamente necessario.
  • Usare l’operatore + solo tra valori compatibili (ad esempio due numeri, oppure due stringhe).

Nomi delle Variabili

In Python, i nomi delle variabili devono rispettare precise regole sintattiche e convenzioni stilistiche:

Regole sintattiche

  • Devono iniziare con una lettera (A–Z, a–z) oppure con il simbolo di underscore (_).
  • Possono contenere lettere, numeri e underscore dopo il primo carattere.
  • Non possono contenere spazi né simboli speciali come ?, %, @, ecc.
  • Non devono coincidere con le parole riservate del linguaggio (come if, while, class, ecc.).

Convenzioni di stile

  • Preferibile l’uso della convenzione snake_case (parole separate da underscore):
    Esempio: can_volume, total_price.
  • Alternativamente, si può usare la notazione camelCase:
    Esempio: canVolume, totalPrice.
  • Le costanti (valori che non dovrebbero cambiare) si scrivono in maiuscolo:
    Esempio: MAX_SIZE, BOTTLE_VOLUME.

Nomi descrittivi

È fortemente consigliato usare nomi chiari e descrittivi, che rendano comprensibile il significato della variabile.

Esempio

canVolume = 0.35    # chiaro
cv = 0.355          # poco chiaro

In programmi collaborativi (scritti da più persone), usare nomi descrittivi migliora la leggibilità e la manutenibilità del codice.


Costanti

In Python, non esistono costanti vere e proprie: una variabile può sempre essere modificata. Tuttavia, è buona pratica considerare alcune variabili come costanti, non cambiandone mai il valore dopo l’inizializzazione.

Convenzione

  • Scrivere i nomi delle costanti in maiuscolo.
  • Usare underscore per separare le parole.

Esempio

BOTTLE_VOLUME = 2.0
MAX_SIZE = 100

Usare costanti rende il codice più leggibile:

totalVolume = bottles * 2              # meno chiaro
totalVolume = bottles * BOTTLE_VOLUME  # più chiaro

Sebbene Python consenta tecnicamente la modifica delle costanti, non è raccomandato farlo.


Commenti

I commenti sono parti del codice che non vengono eseguite, ma servono per fornire spiegazioni.

  • Si scrivono anteponendo il simbolo # alla riga.
  • Servono a chiarire il funzionamento del codice per:
    • Altri programmatori.
    • Se stessi in un momento futuro.

Esempio

# Calcola il volume totale in litri
totalVolume = bottles * BOTTLE_VOLUME

Buona prassi

  • Iniziare ogni script con un commento descrittivo.
  • Commentare blocchi di codice complessi o poco immediati.
  • Evitare di commentare ogni singola riga banale.

📌 Citazione utile:

“Documentation is a love letter that you write to your future self.”
— Damian Conway, Perl Best Practices, O’Reilly, 2005

📌 Visualizzare l’esempio volume1.py nella sezione DOWNLOAD

🧮 Aritmetica in Python: guida agli operatori e funzioni matematiche

Python è un linguaggio semplice e potente, che offre strumenti immediati per eseguire operazioni aritmetiche. In questa guida vedremo gli operatori aritmetici fondamentali, il comportamento dei tipi numerici, come gestire divisioni, moduli, e l’uso delle librerie matematiche più comuni.


🔢 Operatori aritmetici di base

Python supporta tutti gli operatori aritmetici elementari:

OperazioneOperatoreEsempioRisultato
Addizione+5 + 27
Sottrazione-5 - 23
Moltiplicazione*5 * 210
Divisione/5 / 22.5
Potenza**2 ** 38

➕ Uso delle parentesi

Come in algebra, le parentesi modificano la precedenza delle operazioni. È importante usarle per evitare ambiguità:

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

La regola di precedenza in Python segue il principio PEMDAS:

  • Parentesi
  • Esponenziazione
  • MD Moltiplicazione/Divisione (da sinistra a destra)
  • AS Addizione/Sottrazione (da sinistra a destra)

📐 Tipi numerici: interi e float

Python distingue tra interi (int) e numeri a virgola mobile (float).

  • Se combini interi e float in un’espressione, il risultato sarà un float.
7 + 4.0  # Risultato: 11.0

⚠️ Attenzione: 4 e 4.0 sono considerati di tipo diverso!

Non puoi eseguire operazioni aritmetiche tra numeri e stringhe:

"7" + 4  # Errore!

➗ Divisioni: intere e con resto

Divisione intera //

Questo operatore restituisce il quoziente intero, ignorando la parte decimale:

7 // 4  # Risultato: 1

Operatore modulo %

Restituisce il resto della divisione tra interi:

7 % 4  # Risultato: 3

🔍 Tabella esempi

EspressioneRisultato //Risultato %
7 // 413
9 // 241
10 % 331

📌 Visualizzare l’esempio pennies.py nella sezione DOWNLOAD


📣 Invocare funzioni in Python

Una funzione è un blocco di codice che esegue un compito specifico. Le funzioni in Python si invocano tramite il loro nome, seguito da parentesi:

print("Hello!")       # Stampa un messaggio
abs(-173)             # Restituisce 173
distance = abs(x)     # Salva il risultato in una variabile

🧠 Funzioni matematiche predefinite

Python include alcune funzioni built-in, sempre disponibili, e altre che si trovano nella libreria standard math.

📋 Funzioni built-in (senza import)

FunzioneDescrizione
abs(x)Valore assoluto di x
round(x, d)Arrotonda x a d decimali
int(x)Converte x a intero (troncamento)
float(x)Converte x a numero a virgola mobile

📚 Libreria math: funzioni avanzate

Per usare le funzioni del modulo math, devi importarlo:

from math import sqrt, floor, ceil

Oppure:

import math
x = math.sqrt(16)

📋 Funzioni del modulo math

FunzioneDescrizione
math.sqrt(x)Radice quadrata di x
math.floor(x)Approssimazione per difetto
math.ceil(x)Approssimazione per eccesso
math.trunc(x)Troncamento verso zero
math.isclose(a, b)Confronta due valori con una certa tolleranza

🔗 Documentazione: math — Mathematical functions


🔄 Conversioni numeriche

Puoi convertire esplicitamente tra tipi numerici:

float(4)      # Risultato: 4.0
int(4.9)      # Risultato: 4 (troncamento, non arrotondamento)

⚠️ Errori di arrotondamento

I numeri in virgola mobile non sono sempre precisi:

price = 4.35
quantity = 100
print(price * quantity)  # Stampa: 434.99999999999994

Come gestire:

  • Usa round()
  • Confronta con math.isclose()
  • Mostra un numero fisso di cifre decimali

✅ Buone pratiche di scrittura

Utilizza spazi nelle espressioni per migliorarne la leggibilità:

totalCans = fullCans + emptyCans

Controlla sempre il bilanciamento delle parentesi:

# Errato:
((a + b) * t / 2 * (1 - t)

# Corretto:
((a + b) * t) / (2 * (1 - t))

Esercizi di problem
solving

Problem solving: prima lo si fa a mano

  • Un passo importantissimo dello sviluppo di un algoritmo è eseguire «a mano» l’elaborazione prevista.
    • Se non si è in grado di risolverlo a mano, difficilmente si riuscirà a scrivere il programma
  • Esempio di problema:
    • 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.

Iniziare con valori d’esempio

  • Dati
    • Larghezza totale: 100 pollici
    • Larghezza di una piastrella: 5 pollici
  • Testare i valori
    • Vediamo… 100/5 = 20, perfetto! 20 piastrelle. Niente spazio vuoto.
    • Però… BN…BN «… la prima e l’ultima piastrella dovrebbero essere nere.»
    • Bisogna guardare con più attenzione al problema…
    • Iniziando con una nera, poi con coppie BN
  • Osservazione: ogni coppia è 2 volte la larghezza di 1 piastrella
    • In questo esempio, 2 x 5 = 10 pollici

Continuare ad applicare la soluzione

  • Larghezza totale: 100 pollici
  • Larghezza di una piastrella: 5 pollici
  • Calcolare la larghezza totale di tutte le piastrelle
    • Una piastrella nera: 5 pollici
    • 9 coppie di BN: 90 pollici
    • Larghezza totale: 95 pollici
  • Calcolare gli spazi (uno a ciascuna estremità)
    • 100 – 95 = 5 pollici = spazio totale
    • Spazio di 5 pollici / 2 = 2.5 pollici a ciascuna estremità

Traduzione in algoritmo

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

L’algoritmo

  • Calcolare il numero di coppie di piastrelle
    • Numero di coppie = parte intera di (larghezza totale – larghezza piastrella) / (2 * larghezza piastrella)
  • Calcolare il numero di piastrelle
    • Numero di piastrelle = 1 + (2 * numero di coppie)
  • Calcolare lo spazio
    • 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

📌 Visualizzare l’esempio pennies.py nella sezione DOWNLOAD

🧵 Le Stringhe in Python

Le stringhe sono uno dei tipi fondamentali in Python. In questa guida vedremo come funzionano, come manipolarle, come trattare i singoli caratteri e cosa sono le sequenze di escape.


🚨 Errori di conversione

Quando si cerca di convertire una stringa in numero, è necessario che la stringa rappresenti correttamente un numero.

val = int("ciao")  # Errore!

Errore generato:

ValueError: invalid literal for int() with base 10: 'ciao'

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

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)

🔤 Stringhe e caratteri

  • Le stringhe sono sequenze immutabili di caratteri.
  • Una volta create, non possono essere modificate direttamente.
name = "Harry"

📌 Accesso ai caratteri con gli indici

Ogni carattere ha un indice numerico che parte da 0.

name = "Harry"
first = name[0]  # 'H'
last = name[4]   # 'y'

📛 Un indice non valido genera un errore:

name = "Bob"
print(name[3])  # IndexError: string index out of range

🚫 Immutabilità delle stringhe

Non è possibile modificare un carattere di una stringa direttamente:

name = "Bob"
name[0] = "G"  # TypeError: 'str' object does not support item assignment

✅ Soluzione: creare una nuova stringa combinando porzioni della vecchia.


✂️ Porzioni (slicing) di stringa

Sintassi base:

stringa[inizio:fine]

L’indice inizio è incluso.

L’indice fine è escluso.

nome = "Paperon de' Paperoni"
porzione = nome[4:10]  # "ron de"

Estensioni dello slicing

nome[:6]     # Dal primo al 6° carattere (escluso)
nome[6:]     # Dal 6° carattere alla fine
nome[:]      # L’intera stringa (una copia)
nome[::2]    # Tutti i caratteri con indice pari
nome[::-1]   # Stringa invertita

📊 Tabella riassuntiva operazioni su stringhe

OperazioneSintassiEsempioRisultato
Accesso caratteres[i]"Python"[0]'P'
Lunghezzalen(s)len("abc")3
Slice semplices[2:5]"abcdefgh"[2:5]'cde'
Slice con steps[::2]"abcdef"[::2]'ace'
Inversiones[::-1]"hello"[::-1]'olleh'

🔠 Caratteri e codici

Python usa la codifica Unicode, che include il set ASCII:

CarattereCodice ASCII
A65
a97
048
H72

🔗 Risorse: Unicode charts


🧩 Funzioni vs Metodi nelle stringhe

Differenze principali

CaratteristicaFunzioniMetodi
Sintassifunzione(argomento)oggetto.metodo()
AmbitoGeneraliSpecifici per ogni tipo di oggetto
Esempiolen("ciao")"ciao".upper()

🧰 Metodi utili per le stringhe

MetodoDescrizioneEsempio
upper()Tutto maiuscolo "ciao".upper()'CIAO'
lower()Tutto minuscolo "CIAO".lower()'ciao'
strip()Rimuove spazi iniziali/finali " ciao ".strip()'ciao'
replace(a, b)Sostituisce a con b "ciao".replace("a", "e")'cieo'
find(sub)Restituisce l’indice della prima occorrenza "ciao".find("a")2
split()Divide la stringa in una lista "a,b,c".split(",")['a','b','c']

🔣 Sequenze di escape

SequenzaSignificatoEsempioRisultato
\\Backslash"C:\\Path"C:\Path
\'Apostrofo'L\'uomo'L'uomo
\"Virgoletta doppia"He said \"Hello\""He said "Hello"
\nA capo"A\nB\nC"Testo su più righe
\tTabulazione"A\tB"A B

🌐 Caratteri Unicode

Python permette di rappresentare caratteri Unicode tramite:

  • Codici brevi:
'\u265e'  # ♞
'\u2620'  # ☠
  • Codici lunghi:
'\U0001F600'  # 😀
  • Oppure direttamente:
simbolo = '♞'
print(simbolo)  # ♞

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *