2: STRINGHE E DATI BOOLEANI

STRINGHE

Un linguaggio di programmazione deve permettere di maneggiare non soltanto numeri, ma anche caratteri di testo. Nel linguaggio informatico italiano una sequenza di caratteri viene chiamata stringa: il termine deriva dall'assonanza con l'inglese string, (che significa corda, filo).

Apriamo IDLE e digitiamo (attenti a non dimenticare le virgolette prima e dopo):


>>> "Ciao"

'Ciao'

>>> "Io sono Luigi"

'Io sono Luigi'

>>> "e ho 15 anni!"

'e ho 15 anni!'

>>> 

Vediamo che ogni volta che scriviamo del testo tra virgolette, IDLE capisce che si tratta di una stringa e ce lo segnala colorandola di verde. Se premiamo Invio ci risponde con gli stessi caratteri che abbiamo immesso (la risposta di IDLE è sempre colorata in blu).

Una stringa può contenere quindi lettere (maiuscole e minuscole), numeri, spazi e caratteri di punteggiatura. Sono possibili anche i caratteri estesi, come le vocali accentate italiane, ma consiglio di non usarli (e quindi di scrivere e' anzichè è) perchè potrebbero non essere riconosciuti eseguendo Python in altre lingue.

Per definire una stringa in Python bisogna scrivere i caratteri che la compongono:

tra apici: >>> 'Amo tanto la mia mamma'
'Amo tanto la mia mamma'
oppure tra virgolette: >>> "Voglio Tanto Bene A Mammina"
'Voglio Tanto Bene A Mammina'
o tra tripli apici: >>> '''Mamma ti voglio bene'''
'Mamma ti voglio bene'
o tra triple virgolette: >>> """Mammina ti amo"""
'Mammina ti amo'

A questo punto sarete probabilmente confusi: perchè ci sono quattro modi diversi per fare la stessa cosa? La risposta è probabilmente questa: Python, essendo stato codificato abbastanza recentemente, ha cercato di "accontentare" chi già conosceva altri linguaggi (ad esempio, in C le stringhe si scrivono usando le virgolette mentre in Pascal usando gli apici) permettendogli di continuare ad usare la sintassi a cui è abituato. Questo è probabilmente una comodità per un programmatore esperto, ma confonde un principiante.

Va detto che le quattro alternative non sono perfettamente equivalenti: la prima e la seconda non permettono di andare a capo all'interno di una stringa, mentre usando la terza e la quarta possiamo scrivere stringhe su più righe (ne faremo uso più avanti). Comunque, per risolvere il problema, basta decidere di usare sempre una delle quattro forme possibili: dato che chi scrive è abituato a programmare in C e C++ (dove si usano le virgolette) nel seguito del tutorial useremo la sintassi con le "" (invece IDLE, come avete visto, quando ci risponde usa sempre gli apici).

Possiamo scrivere espressioni anche con le stringhe: infatti su di esse sono possibili due operazioni: l'addizione tra stringhe (che produce la loro concatenazione) e la moltiplicazione per un intero (che concatena più volte la stessa stringa). Proviamo a scrivere in IDLE:


>>> "mamma" + "mia"

'mammamia'

>>> "mamma " + "mia"

'mamma mia'

>>> "mamma" * 2

'mammamamma'

>>> "mamma " * 2

'mamma mamma '

>>> 3 * 5 * " zzz "

' zzz  zzz  zzz  zzz  zzz  zzz  zzz  zzz  zzz  zzz  zzz  zzz  zzz  zzz  zzz '

Notate che quando facciamo operazioni su stringhe che contengono parole sorge un problema per gli spazi: se concateniamo due stringhe esse vengono poste immediatamente una di seguito all'altra, quindi se vogliamo degli spazi tra le parole li dobbiamo aggiungere noi alla fine o all'inizio di una stringa (notate la differenza tra il primo ed il secondo esempio o tra il terzo ed il quarto).

ESERCIZIO 2.1: Scrivere un'espressione che abbia come risultato:
'm m m m m '
'MammaMammaMammaMaMaMaMaMa'
'cane cane cane canecanecane'
SOLUZIONI

ESPRESSIONI BOOLEANE

Un'altra importante caratteristica dei linguaggi di programmazione è la loro capacità di maneggiare espressioni logiche (cioè affermazioni del tipo "dieci è maggiore di cinque" che possono essere vere o false). In Matematica le leggi che riguardano questo tipo di proposizioni sono regolate dall'Algebra di Boole (dal matematico inglese George Boole) con la quale dovreste avere qualche familiarità (se avete bisogno di chiarimenti guardate qui). Proviamo a scrivere:


>>> 5 > 1

True

>>> 1 > 5

False

Un'espressione booleana è un'espressione che può avere solo due possibili risultati: True o False. Attenzione: True e False sono due costanti predefinite di Python e non delle stringhe, quindi vanno scritte senza virgolette e sempre con l'iniziale maiuscola.

Come al solito se scriviamo una tale espressione in IDLE, questi ci risponde stampandone il valore. Nelle espressioni booleane possiamo usare (oltre agli usuali operatori), anche i seguenti (provate a digitare gli esempi):

Operatore Significato Esempio
< Minore >>> 3 < 5
True
<= Minore o uguale >>> 10 <= 10
True
> Maggiore >>> 3 > 5
False
>= Maggiore o uguale >>> 10 >= 10
True
== Uguale >>> 3 == 5
False
!= Diverso >>> 3 != 5
True

Alcune annotazioni importanti:

Si possono comparare anche le stringhe, in ordine alfabetico e tenendo presente che le maiuscole vengono sempre prima delle minuscole.


>>> "babbo" < "mamma"  

True

>>> "papa'" < "mamma"

False

>>> "Papa'" < "Mamma"

False

>>> "Papa'" < "mamma"

True

>>> "babbo" < "Mamma"

False

Infine si possono creare espressioni booleane più complesse concatenando espressioni semplici tramite gli operatori and or not (con l'usuale significato dell'algebra booleana)


>>> not (1 > 5)

True

>>> (2 < 4) and (3 < 7)

True

>>> (1 > 5) or (1 > 6)

False

(ricordiamo che il not rovescia il valore di verità di un'espressione, l'and posto tra due espressioni vale True solo se entrambe le espressioni sono True e l'or vale True se almeno una delle espressioni è True).

Python permette anche di concatenare due operatori con una sintassi simile a quella che si usa in matematica:


>>> 3 < 5 < 10 

True

Questo tipo di espressione, (equivalente a 3 < and 5 < 10) è molto usato per verificare se un certo numero appartiene ad un intervallo di valori.

Nelle espressioni booleane vengono a volte usati anche valori numerici, effettuando delle conversioni piuttosto complicate da numero a booleano e viceversa. In generale un numero è considerato True se diverso da 0 e False se uguale a 0, mentre True e False vengono convertiti in 1 e 0 nelle espressioni numeriche. Finche non sarete più esperti vi conviene evitare di usare espressioni di questo tipo.


>>> 5 and (3 > 0)

True

>>> 5 + True

6

Nella prima espressione abbiamo un and tra due valori True (e quindi il risultato è True); nella seconda il True viene convertito in 1.

Esercizio 2.2: Scrivere in IDLE le seguenti espressioni; prima di dare Invio cercare di indovinare il risultato.
>>> 10 != 20
>>> 6 == 7
>>> 10 >= 10
>>> "ciccio" < "peppe"
>>> (4 != 5) or (10 > 0)
>>> not (2 == 5)
>>> (4 == 5) and (1 > 0)
>>> True and (1 < 20)
>>> 5 < 10 <= 8
>>> (True and False) or (3 == 3)
>>> (5 < 1) or (4 == 6) or (1 == 1)

Fine della lezione