post

Python it:I fondamenti

Stampare solo ‘Hello world’ non è sufficiente, si vorrà fare molto di più, come avere dell’input, manipolarlo e farci qualcosa. Per ottenere questo con Python si dovranno usare costanti e variabili.

Contents

Costanti manifeste

Un esempio di costante manifesta è un numero come 5, 1.23, 9.25e-3 o una stringa come 'Questa è una stringa' o "E' una stringa!". Viene chiamata costante manifesta perché è letterale: si userà letteralmente il suo valore. Il numero 2 rappresenta sempre se stesso e nient’altro, è costante perché il suo valore non può essere modificato. Quindi ci si riferisce a queste come a costanti manifeste.

Numeri

I numeri in Python sono di tre tipi: interi, in virgola mobile e complessi.

  • Un esempio di numero intero è 2. I numeri interi coprono la totalità dei numeri.
  • Esempi di numeri in virgola mobile (o float per brevità) sono 3.23 e 52.3E-4. La notazione E indica la potenza di 10. In questo caso, 52.3E-4 significa

52.3 * 10-4.

  • Esempi di numeri complessi sono (-5+4j) e (2.3 - 4.6j)
Nota per programmatori esperti
Non c’è un tipo ‘long int’ dato che il tipo intero può assumere qualsiasi valore.

Stringhe

Una stringa è una sequenza di caratteri. Le stringhe sono basilarmente degli insiemi di parole. Tali parole possono essere in inglese o in qualisasi altra lingua supportata nello standard Unicode il che significa quasi tutte le lingue del mondo.

Nota per programmatori esperti
Non ci sono stringhe “solo ASCII” dato che Unicode è un superset di ASCII.Se è necessaria una codifica byte-stream strettamente ASCII, usare str.encode("ascii"). Per maggiori dettagli fare riferimento alla discussione presentet su StackOverflow.
Di default, tutte le stringhe sono Unicode.

Le stringhe verranno usate in quasi ogni programma che si scriverà per cui occorre fare particolare attenzione a questa parte. Di seguito verrà spiegato come usare le stringhe in Python.

Apici singoli

Si possono specificare stringhe usando gli apici come 'Stringa racchiusa tra apici' . Tutti gli spazi bianchi e i caratteri di tabulazione vengono preservati.

Virgolette

Le stringhe racchiuse tra virgolette funzionano esattamente come le stringhe racchiuse tra apici. Un esempio è "Qual è il vostro nome?"

Apici o virgolette triple

Si possono specificare stringhe su linee multiple usando apici tripli (“”” o ”’). Si possono tranquillamente usare virgolette o apici all’interno dei tripli apici. Per esempio

  '''Questa è una stringa multi linea. Questa è la prima riga.
   Questa è la seconda riga.
   Gli chiesi: "Qual'è il vostro nome?"
   Egli rispose "Bond, James Bond."
   '''

Sequenze di escape

Si supponga di volere una stringa che contenga un apice ('); come si dovrà specificare questa stringa? Ad esempio, la stringa è Quest'altra stringa. Non si può scrivere semplicemente 'Quest'altra stringa' perché in tal caso si creerebbe confusione tra l’inizio e la fine della stringa. Si dovrà quindi indicare che l’apice intermedio non è la fine della stringa. Questo può essere fatto con l’aiuto delle cosiddette sequenze di escape. Si specifica l’apice con la sequenza ', (si noti la barra rovesciata). Quindi la scrittura corretta della stringa sarà: 'Quest'altra stringa'.

Un altro modo per specificare questa stringa si avvale dell’uso di virgolette: "Quest'altra stringa". Per poter usare, invece, virgolette all’interno di virgolette o il carattere di barra rovesciata () si devono usare appropriate sequenze di escape: " e \ rispettivamente.

Se si vuole specificare una stringa su due righe si possono usare gli apici tripli come mostrato in precedenza o usare la sequenza di escape per il carattere newline n per indicare l’inizio di una nuova riga. Un esempio potrebbe essere Questa è la prima riganQuesta è la seconda riga. Un’altra sequenza di escape utile è quella del carattere di tabulazione: t. Anche se ci sono molte altre sequenze di escape, sono state menzionate solo quelle più usate.

Una cosa da notare è che in una stringa, una singola barra rovesciata alla fine della riga indica che la stringa continua sulla riga successiva ma non viene aggiunto nessun carattere newline. Per esempio:

   "Questa è la prima frase.
    Questa è la seconda frase."

equivale a "Questa è la prima frase. Questa è la seconda frase."

Stringhe Raw

Se si necessita di specificare delle stringhe in cui non avvengano processi speciali come la gestione delle sequenze di escape, occorre specificare che la stringa è di tipo raw, facendo precedere la stringa stessa da r o R. Un esempio è: r"Il carattere di escape per newline è n".

Le stringhe sono immutabili

Questo significa che una volta creata, una stringa non può essere modificata. Benché sembri una caratteristica inutile, in realtà non è così. Si vedrà in seguito perché questo non costituisce una limitazione nei vari programmi che si andranno ad esaminare.

Concatenazione di stringhe

Se si mettono due stringhe una accanto all’altra, verranno automaticamente concatenate da Python. Per esempio: 'Qual'è' 'il vostro nome?' verrà automaticamente convertito in "Qual'è il vostro nome?".

Nota per programmatori C/C++
Non ci sono dati di tipo char separati in Python. Non sono realmente necessari e siamo sicuri che non se ne sentirà la mancanza.
Nota per programmatori Perl/PHP
Da ricordare che stringhe poste tra apici e virgolette sono la stessa cosa, non vi è alcuna differenza.
Nota per utenti di espressioni regolari
Usare sempre le stringhe raw quando si lavora con le espressioni regolari. Altrimenti possono essere richieste molte barre rovesciate. Per esempio la ricerca di '\1' può essere scritta r'1'.

Il metodo format

Ci possono essere occasioni nelle quali si vogliono costruire stringhe da altre informazioni, ed è questo il caso in cui diviene utile il metodo format().

#!/usr/bin/python
# Filename: str_format.py

anni = 25
nome = 'Swaroop'

print('{0} ha {1} anni'.format(nome, anni))
print('Perché {0} sta giocando con questo pitone?'.format(nome))

Output:

   $ python str_format.py
   Swaroop ha 25 anni
   Perché Swaroop sta giocando con questo pitone?

Funzionamento:

Si possono usare certe specifiche in una stringa (ad esempio {0}) che vengono sostituite dai corrispondenti argomenti attraverso il metodo format.

La prima volta è stato usato {0} che corrisponde alla variabile nome che è anche il primo argomento del metodo format. In modo simile la seconda specifica è {1} corrispondente a anni che è il secondo argomento del metodo format.

Da notare che lo stesso risultato si sarebbe potuto ottenere usando la concatenazione di stringhe: nome + ' ha ' + str(anni) + ' anni'; ma si noti anche quanto sia passibile di errore e poco leggibile. Inoltre usando il metodo format la conversione in stringa avviene automaticamente invece di doverla esplicitare. Oltretutto quando viene usato il metodo format si può cambiare il messaggio da stampare senza dover toccare le variabili e vice versa.

Quello che Python fa usando il metodo format è di sostituire ad ogni specifica il relativo argomento. Si possono usare specifiche molto dettagliate, come ad esempio:

>>> '{0:.3}'.format(1/3) #  (.) con una precisione di 3 decimali
'0.333'
>>> '{0:_^11}'.format('hello') #  riempie con caratteri di sottolineatura (_) col testo centrato (^) in una finestra di 11 
'___hello___'
>>> '{name} ha scritto {book}'.format(name='Swaroop', book='A Byte of Python') # basato su keyword
'Swaroop wrote A Byte of Python'

I dettagli di queste specifiche di formattazione si trovano nel
Python Enhancement Proposal No. 3101.

Variabili

L’uso esclusivo di costanti diventa poco pratico quando è necessario memorizzare informazioni per successive manipolazioni. E’ qui che entrano in gioco le variabili. Le variabili sono esattamente quello che significano: il loro valore può variare, sono in grado di memorizzare qualsiasi cosa. Le variabili sono quella parte della memoria del computer dove vengono memorizzate le informazioni. A differenza delle costanti, occorrono dei metodi per accedere alle variabili e quindi è necessario dare loro dei nomi.

Identificatori

Le variabili sono esempi di identificatori. Gli identificatori sono i nomi dati per identificare qualcosa. Si devono seguire alcune regole per dare nomi agli identificatori:

  • Il primo carattere dell’identificatore deve essere una lettera dell’alfabeto (maiuscola o minuscola in codifica ASCII o Unicode) o un carattere di sottolineatura (‘_’).
  • Il resto del nome dell’identificatore può consistere di lettere (maiuscole o minuscole in codifica ASCII o Unicode), caratteri di sottolineatura (‘_’) o cifre (0-9).
  • I nomi degli identificatori sono case-sensitive. Per esempio nome e Nome non sono la stessa cosa. Notare la n minuscola nel primo caso e la N maiuscola nell’altro.
  • Esempi di identificatori validi sono i, __mio_nome, nome_23 e a1b2_c3
  • caratteri_utf8_casuali_Յժջ٣ㄆㄘㄩڨڪწჭⴠςεζਫשׁມຣߓ߆ପବଭ.
  • Esempi di identificatori non validi sono 2cose, questo è spaziato, mio-nome "questo è tra virgolette".

Tipi di dato

Le variabili possono contenere differenti tipi di dati chiamati data types. I tipi fondamentali sono i numeri e le stringhe visti precedentemente. Nei capitoli successivi si vedrà come creare dei tipi definiti dall’utente usando le classi.

Oggetti

Python si riferisce a qualsiasi cosa appartenente al programma come ad un oggetto. Questo in senso generale: invece di dire ‘un qualcosa‘, si dice ‘un oggetto‘.

Nota per coloro che usano la programmazione orientata agli oggetti
Python è strettamente orientato agli oggetti nel senso che per lui ogni cosa è un oggetto, inclusi numeri stringhe ed anche funzioni.

Il paragrafo che segue mostra l’uso delle variabili insieme a costanti. Salvare il seguente esempio ed eseguire il programma.

Come scrivere programmi Python
Da ora in avanti la procedura standard per salvare ed eseguire programmi Python sarà la seguente:

  1. Aprire l’editor preferito.
  2. Scrivere il codice del programma dato nell’esempio.
  3. Salvare il codice come file col nome menzionato nel commento. Si segua la convenzione di avere tutti i programmi Python salvati con l’estensione .py.
  4. Eseguire l’interprete col comando python programma.py o usare IDLE per eseguire i programmi. Si può anche usare il metodo di esecuzione spiegato più in avanti.

Usare variabili e costanti letterali

# Filename: var.py

i = 5
print(i)
i = i + 1
print(i)

s = '''Questa è una stringa multi linea.
Questa è la seconda riga.'''
print(s)

Output:

   $ python var.py
   5
   6
   Questa è una stringa multi linea.
   Questa è la seconda riga.

Funzionamento:

Viene prima assegnato il valore della costante 5 alla variabile i usando l’operatore di assegnamento (=). Questa linea viene chiamata istruzione, dato che dichiara che qualcosa deve essere fatto; in questo caso, collegare il nome della variabile i al valore 5. Viene quindi stampato sullo schermo il valore di i usando la funzione print.

Si aggiunge quindi 1 al valore memorizzato in i e si stampa il suo valore che come ci si aspetta è 6.

In modo simile, si assegna la stringa letterale alla variabile s e la si stampa.

Nota per programmatori di linguaggi statici
Le variabili vengono usate semplicemente assegnando loro un valore. Non è necessaria alcuna dichiarazione o definizione di tipo.

Linee logiche e fisiche

Una linea fisica è ciò che si vede quando si scrive un programma. Una linea logica è ciò che Python vede come una singola istruzione. Python assume implicitamente che ogni linea fisica corrisponda a una linea logica.

Un esempio di linea logica è un’istruzione come print('Ciao mondo'); se questa fosse su una riga singola (come la si vedrebbe in un editor) corrisponderebbe ad una linea fisica.

Implicitamente, Python incoraggia l’uso di una singola istruzione per linea il che rende il codice più leggibile.

Se si vogliono specificare più linee logiche in una singola linea fisica, occorre specificarlo usando il carattere punto e virgola(;) come marcatore di fine linea/istruzione logica. Per esempio:

   i = 5
   print(i)

equivale a:

   i = 5;
   print(i);

e può anche essere scritta come:

   i = 5; print(i);

o anche

   i = 5; print(i)

Comunque, io raccomando caldamente che si segua la scrittura di una sola singola linea logica per ogni singola linea fisica. Solo se la linea logica è molto lunga, si usano più linee fisiche per una singola linea logica. L’idea è di evitare la necessità di ricorrere al carattere punto e virgola, giacché rende il codice molto meno leggibile. Personalmente non ho mai usato (o visto usare) caratteri punto e virgola in programmi Python.

Ecco un esempio di come scrivere linee logiche che usano molte linee fisiche. Ci si riferisce ad essa come unione esplicita di linee.

    s = 'Questa è una stringa. 
    Questa è la continuazione della stringa.'
    print(s)

Segue il suo output:

    Questa è una stringa. Questa è la continuazione della stringa.

In modo simile,

   print
   (i)

è la stessa cosa di

   print(i)

Qualche volta vale l’assunzione implicita che non sia necessario usare barre inverse. Questo è il caso in cui la linea logica usi parentesi tonde, quadre o graffe, nella cosiddetta unione implicita di linee. Nei prossimi capitoli si potrà approfondire l’argomento quando si scriveranno programmi che usano le liste.

Indentazione

In Python gli spazi sono importanti; e per certo quelli iniziali di una riga sono fondamentali. La spaziatura iniziale delle linee viene normalmente chiamata indentazione. Gli spazi o i caratteri di tabulazione posti all’inizio della linea logica stabiliscono il livello di indentazione della linea stessa e determinano il raggruppamento (riconoscimento) delle istruzioni successive.

Questo significa che le istruzioni che devono necessariamente andare insieme devono anche avere la stessa indentazione. Ogni gruppo di istruzioni viene chiamato blocco. In seguito si vedranno esempi di come possano essere importanti i blocchi.

Una cosa da tenere bene in mente è che la cattiva indentazione genera immancabilmente degli errori. Per esempio:

i = 5
 print('Il valore è ', i) # Errore! Si noti uno spazio all'inizio della riga
print('I repeat, the value is ', i)

Quando si esegue questo esempio, si ottiene il seguente errore:

     File "whitespace.py", line 4
       print('Il valore è ', i) # Errore! Si noti uno spazio all'inizio della riga
       ^
   IndentationError: unexpected indent

Si noti che c’è un singolo spazio all’inizio della seconda linea. L’errore indicato da Python ci mostra che è la sintassi del programma ad essere errata, cioè il programma non è scritto in modo appropriato. Nel caso specifico, questo significa che non è corretto iniziare a scrivere nuovi blocchi di istruzioni in una posizione arbitraria (eccetto, naturalmente, per il blocco principale che è stato usato all’inizio). I casi nei quali si possono usare nuovi blocchi verranno esposti dettagliatamente nei prossimi capitoli come quello del controllo di flusso.

Come indentare
Per indentare correttamente è bene non fare uso misto di tabulazioni e spazi, dato che potrebbero non funzionare in modo identico su piattaforme differenti. Si raccomanda pertanto di usare un singolo carattere di tabulazione o quattro spazi per definire ogni livello di indentazione.
Basta scegliere uno tra questi due stili di indentazione e usarlo in modo consistente ed esclusivo nella stesura di tutto il programma.
Nota per programmatori di linguaggi statici
In Python si farà uso esclusivamente dell’indentazione per i blocchi e non verranno mai usate le parentesi graffe. Eseguire from __future__ import braces per saperne di più.

Sommario

Dopo aver preso in esame alcuni dettagli pratici, a partire dai prossimi capitoli si inizieranno ad imparare cose ben più interessanti, come le istruzioni per il controllo di flusso. Occorre comunque avere bene in mente il contenuto di questo capitolo prima di proseguire.

Advertisements