giovedì 1 dicembre 2011

Le basi di PyMaemo – terza parte

Questo articolo che segue è la traduzione italia, rivisitata dell'articolo "Python for Newbies – Tutorial" http://www.themaemo.com/python-for-newbies/.

Il contenuto del tutorial è fornito sotto la licenza "Creative Commons Attribution-Share Alike 3.0":
http://creativecommons.org/licenses/by-sa/3.0/ http://creativecommons.org/licenses/by-sa/3.0/legalcode

Contenuto di questo post:

Numeri

Notate che nell'ultimo esempio il numero ritornato da Python è un numero con il punto dopo il decimale. In termini informatici questo è chiamato numero a virgola mobile. Dato che l'esperssione include un numero a virgola mobile (3.0), il suo valore è automaticamente convertito il numero a virgola mobile. La ragione della differenziazione per i tipi di numeri non è scopo di questo tutorial. Nella maggior parte dei linguaggi di programmazione si deve stare attenti a usare il giusto tipo di numero per ogni applicazione. In Python è bene sapere che ci sono diversi tipi di numeri, ma di solito è Python che si occupa dei vari dettagli. L'unica cosa di cui bisogna stare attenti è la divisione. Guardate:
>>> 7 / 2
3
Dal momento che entrambi i numeri della divisione sono interi (un tipo di numero senza decimali) Python esegue una divisione intera. Questo può non è ciò che si aspetta qualcuno ha esperienza di programmazione. Attualmente, per ovviare a questo si può fare così:
>>> 7.0 / 2     # or float(7) / 2
3.5
Nelle versioni più recenti di Python (version 3.x), i progettisti hanno deciso di cambiare questo comportamento in modo che i nuovi utilizzatori di Python ottengano quello che si aspettano. Con la versione corrente di Python di Maemo 5 si può già utilizzare questa funzionalità importando il modulo "__future__". Parleremo più avanti di 'importazione'.

Alcuni operatori comuni associati ai numeri sono i seguenti:

Descrizione operatori

+ Addizione
- Sottrazione
* Moltiplicazione
/ Divisione
% Resto (e.g. 9%2=1; 8%2=0)
** Potenza (4**2=16)

Ci sono anche molte funzioni matematiche in Python per fare praticamente qualsiasi operazione necessaria. Ecco un piccolo esempio (si veda la documentazione per ulteriori). Per utilizzarli devi prima importarli dal modulo per la matematica, come questo ad esempio:
from math import acos
Descrizione funzioni

acos(x) Ritorna l'arcoseno di x
cos(x) Ritorna il coseno di x
log(x) Ritorna l'algoritmo naturale di x
sqrt(x) Ritorna la radice di x
tanh(x) Ritorna la tangente iperbolica di x

Un consiglio pratico è che nel prompt dei comandi interattivo è possibile richiamare l'ultima espressione stampata con il carattere di sottolineatura "_". Così, per esempio, è possibile utilizzare Python come una calcolatrice a portata di mano:
>>> 2 + 2
4
>>> _ + 6
10
C'è anche una estensione Python speciale chiamato Numerical Python (NumPy) che gli permette di utilizzare le funzioni matematiche superiori, come l'algebra lineare e matrici. Ma, basta con i numeri per ora.

Stringhe

Abbiamo già visto una stringa nel esempio "Hello World" di prima. "Una stringa è un insieme ordinato di caratteri, utilizzati per immagazzinare e rappresentare il testo-base di informazioni". Le stringhe Python possono essere racchiuse in doppia, singola, o addirittura tripla (per le linee multi-stringa) virgoletta. Ad esempio:
>>> 'Hello World'
'Hello World'
>>> "Hello 'Hello World'"
"Hello 'Hello World'"
>>> '''This is a longer string that spans
… several lines, doesn’t say anything
… meaningful, and ends here'''
Il fatto che le stringhe sono "ordinate" significa che siamo in grado di accedere ai propri componenti in base alla posizione. Ogni carattere in una stringa ha una posizione di indice dinanzi ad esso. Ad esempio la stringa "Python", ha gli indici seguenti:

Indici stringa
0 1 2   -2  -1
 P y  t h  o   n
Si noti che il primo carattere "P" nei linguaggi di programmazione tipo il C è situato a indice 0, invece è a 1 ad esempio nel basic. Tuttavia, a differenza del C, con Python è anche possibile utilizzare gli indici negativi, che iniziano a decorrere dalla fine della stringa.

Per ottenere i caratteri situati a determinati indici possiamo utilizzare il loro indice numerico scrivendolo all'interno delle parentesi. Diamo un'occhiata ad alcuni esempi.

Per ottenere il carattere situato all'inizio della stringa possiamo usare:
>>> "Python"[0]
'P'
Se stiamo usando una variabile:
>>> hw = "Hello World"
>>> hw[0]
'H'
>>> hw[1]
'e'
>>> hw[-1]
'd'
Possiamo anche ottenere "parti" di una stringa specificando il primo e l'ultimo indice della fetta separati da due punti.
>>> hw[1:7]
'ello W'
>>> hw[4:-2]
‘o Wor’
Il limite a destro o a sinistro della stringa può essere specificato anche, lasciando vuoto l'indice. Ad esempio:
>>> hw[:5]
'Hello'
>>> hw[6:]
'World'
>>> hw[:]
'Hello World'
Le stringhe "oggetti" molto intelligenti. Sanno come comportarsi correttamente in molte situazioni come ad esempio:
Quando aggiungiamo una stringa alla stringa
>>> hw + " Today"
'Hello World Today'
>>> hw[:5] + " You"
'Hello You'
Multiplication
>>> hw[:6] * 5
'Hello Hello Hello Hello Hello '
Si noti che in tutte le operazioni che abbiamo fatto finora con le stringhe, l'operazione restituisce un risultato, ma la stringa originale rimane sempre invariata. È così che le stringhe funzionano. Una stringa è quella che viene chiamata una sequenza di "immutabile". Ciò significa che per modificare una stringa in realtà dobbiamo creare una nuova stringa. Ad esempio:

Provando a cambiare il valore della stringa in un determinato punto
>>> hw[0] = "M"
Viene generato un errore!

Tuttavia, le variabili sono così flessibili che possiamo semplicemente assegnare un nuovo valore ad esso:
>>> hw= "M" + hw[1:]
>>> hw
'Mello World'
Questo funziona perchè l'espressione hw[1:] è calcolata per prima e poi "M" viene aggiunto ad essa, e infine il risultato è assegnato al valore della variabile hw.

Un altro modo per unire le stringhe con le variabili è la formattazione delle stringhe. Ad esempio, cosa succederebbe se si avesse un programma che accoglie l'utente in base al nome a seconda dell'ora del giorno. Per esempio, si potrebbe dire qualcosa del tipo: "Ciao Joe. Come stai sta mattina? ". In questo caso il programma potrebbe raccogliere il nome dell'utente in qualche modo e inserirlo in una variabile denominata "name". Si potrebbe anche prendere il momento della giornata guardando l'orologio computer, determinare se è mattina, pomeriggio o sera, e mettere il risultato in una variabile denominata "time_of_day". Con la seguente riga nel vostro programma possiamo fondere le variabili in una stringa:
>>> Saluto = "Ciao %s. Come stai questa %s" % (name, time_of_day)
Python sostituisce le occorrenze %s con la rispettiva variabile nella tupla dopo il carattere %. (Una "tupla" è una sequenza di elementi all'interno di una parentesi. Le tuple verranno spiegate più avanti.) Ecco un altro esempio:
>>> dessert = "Pecan Pie"
>>> max_per_person = 1
>>> answer = "The dessert of the day is %s. You can only take %i per person" % (dessert, max_per_person)
>>> answer
"The dessert of the day is Pecan Pie. You can only take 1 per person"
In questo esempio abbiamo aggiunto una variabile stringa e una variabile intero nella stringa di risposta. Stringhe e interi hanno differenti codici di formattazione (%s,%i). Guardare la documentazione di Python per gli altri codici di formattazione.

Stringhe inoltre sono dotati di alcuni metodi come i seguenti:
>>> "hello".capitalize()
'Hello'
>>> "HELLO".lower()
'hello'
>>> 'hello'.upper()
'HELLO'
>>> 'Hello World'.replace(" ", "-")     #Replace occurrences of first parameter with second
'Hello-World'
>>> ' Hello World '.lstrip()     #To strip the whitespace at the left of string
'Hello World '
>>> ' Hello World '.rstrip()     #To strip the whitespace at the right of string
' Hello World'
>>> ' Hello World '.strip()     #To strip the whitespace at the left and right
'Hello World'
>>> "This is a longer string".split()
['This', 'is', 'a', 'longer', 'string']
Nell'ultimo esempio vediamo come il metodo Split restituisce una lista di stringhe. La stringa originale è separata in parti delimitate dal delimitatore fornito. Quando non è fornito nessun delimitatore, di default è utilizzato lo spazio bianco. Ma, che cosa è una lista? Lo vedremo in seguito!