Visualizzazione post con etichetta lezione. Mostra tutti i post
Visualizzazione post con etichetta lezione. Mostra tutti i post

05 marzo 2014

LA SINTASSI DI PYTHON: L'indentazione

Quando ci si avvicina per la prima volta ad un linguaggio di programmazione ancor prima di pensare a flussi, condizioni, costrutti, moduli e/o concetti avanzati, ci si ritrova davanti al primo scoglio da affrontare rappresentato dalla sintassi del linguaggio. Una delle paure che attanaglia il programmatore in erba è proprio quella di non ricordarsi esattamente quello che il linguaggio pretende di sapere da lui e, purtroppo per noi, senza grosse deroghe.

Però avete la fortuna di avere il vostro amico Python al vostro fianco e la sua sintassi leggera ed intuitiva vi farà entrare subito nel mondo della programmazione con pochi sforzi mnemonici.

PHP
echo "Hello World";

Python 2.x
print "Hello World"

Python 3.x
print ("Hello world")

Tralasciando per un attimo il "veicolo" che permette la stampa di questo semplice messaggio, come vedete sono poche le differenze tra il nostro amico e il diffusissimo linguaggio di programmazione web (che presto abbandonerete, sappiatelo). Abbiamo fatto un classico Hello World e non ci ha dato delle grandi soddisfazioni, perché non si intuisce una delle meraviglie di Python: l'indentazione, che però potrebbe disorientare i neofiti. Essendo parte del linguaggio, l'indentazione ci aiuterà a scrivere codice pulito e ordinato, ma non dovete credermi sulla fiducia, vi faccio dei facili esempi per capire di cosa sto parlando:

PHP
[...]
if ($variabile == "Qualcosa") {
$altra_variabile = "Altra cosa";
$stupida_variabile = "Stupida cosa";
[...]
} else {
$altra_variabile = "Qualcosa di default";
}

Python 2.x e 3.x
[...]
if variabile == "Qualcosa":
    altra_variabile = "Altra cosa"
    stupida_variabile = "Stupida cosa
    [...]
else:
    altra_variabile = "Qualcosa di default"

Grida di giubilo e manifestazioni collettive in piazza ed un solo urlo si alza al cielo: "La sintassi di Python è bellissima...". Chi ha detto no? Scusate quel rubista in fondo alla stanza può smettere di dar fastidio per cortesia? Ma analizziamo i due piccoli script e vediamo se vi convinco...

Come notate, ci sono delle notevoli differenze principalmente dovute al posizionamento delle varie righe. Se per inciso modificassimo lo script in PHP in questo modo:

[...]
if ($variabile == "Qualcosa") {
        $altra_variabile = "Altra cosa";
              $stupida_variabile = "Stupida cosa";
            [...]} else {
    $altra_variabile = "Qualcosa di default";
                                                               }

...questo funzionerebbe ugualmente. Ma non su Python, perché se producete un codice come il sottostante, attirerete l'ira funesta su di voi e verrà restituito un errore:

[...]
if variabile == "Qualcosa":
    altra_variabile = "Altra cosa"
   stupida_variabile = "Stupida cosa
  ^^^
  [...]
else:
altra_variabile = "Qualcosa di default"
^^^

Bene penserete, quella del PHP è flessibilità... NO E' MALE.

Quando scriverete applicazioni complesse di centinaia di migliaia di milioni di righe, ringrazierete di farlo con Python, perché vi obbligherà ad essere scrupolosi ed attenti, ed un buon programmatore deve esserlo (pausa scenica guardando il rubista a fondo sala).

Non sottovalutate il fatto che il vostro codice potrà in futuro essere utilizzato anche da altri programmatori. Trovandosi di fronte all'uniformità nel metodo di scrittura, questi saranno in grado di essere subito produttivi senza dover perdere tempo ad insultare tutta la vostra famiglia fino alla terza generazione solo perché il martedì indentate ed il giovedì no.

Piccola digressione normativa. Se vi state chiedendo se il formato dell'indentazione sia a libera interpretazione, sappiate che la risposta è sì perché potete usare quello che vi è più comodo (4 spazi, 1 tab, 8 spazi, etc...), basta che nello stesso file siano uguali (Python 3 non accetta nemmeno l'alternanza tra tab e spazi). Se poi volete vincere il premio del programmatore del mese, sappiate che la PEP8 suggerisce l'utilizzo di quattro spazi.


Ma torniamo per un attimo ai due script dove notiamo che in Python siamo liberi da ogni orpello sintattico. Niente "( )" e "{ }" per definire il ciclo, niente " ; " a fine riga (pena la decapitazione se dimenticati), insomma nulla se non l'indentazione ed il " : " dopo l'invocazione del ciclo.

Sia chiaro, non è un confronto né tantomeno un attacco a PHP, è solo un esempio e lo avrei potuto fare con altri mille linguaggi. Quello che deve restarvi è l'estrema pulizia con la quale Python permette di scrivere e "manutenzionare" il proprio codice.

Questo è il primo approccio di una lunga serie al nostro linguaggio, prossimamente parleremo dei tipi di dati, dei cicli e delle funzioni vitali Built-in.

03 agosto 2012

Il lavoro annichilisce le passioni

Purtroppo in questi ultimi tempi non riesco più a ritagliarmi uno spazio da dedicare a frizzi e lazzi. Il lavoro ed il costante aggiornamento professionale, mi occupano oltremisura, ed il poco tempo libero lo passo in famiglia, unica vera ancora di salvezza di noi miseri esseri umani.

Però mi sento in dovere di chiedere scusa a chi più volte mi ha chiesto quando le "lezioncine" sarebbero riprese con una certa regolarità (devo dire specie su wxPython a sorpresa). Da principio ho rassicurato che si era prossimi alla pubblicazione, ma sono ancora tremendamente indietro nella revisione di tutto il materiale che ho scritto. Però prometto di dedicarci del tempo appena possibile, e non è una promessa di marinaio...

Però ora dovete scusarmi, perché sono....


22 gennaio 2012

[Python] Primi passi - Lezione 5

Rock on Python mi piace così tanto come saluto che forse diventerà il titolo di tutte le mie elucubrazioni pythoniche. Ma veniamo a noi ed alle nostre mini lezioni che oggi affrontano....... [rullo di tamburi]...... le tuple.

_tu_ che? Ho scritto tuple e lo confermo. Se siete curiosi di sapere che cosa è una tupla sappiate che la possiamo tranquillamente definire come un lista immutabile. Non me ne vogliano i puristi che avrebbero preferito una definizione più pomposa e precisa, ma credo che la mia renda molto bene l'idea.

Dovreste sapere che sono della scuola del FARE e quindi buttiamoci subito nel codice più cattivo.

NOTA: In verde i comandi in input (con il numero di riga) ed in rosso i risultati dell'output senza numero di riga.

03 aprile 2011

[Python] Primi passi - Lezione 4

Torniamo a parlare del linguaggio più bello del mondo. Mhhh, no non parlo del Sanscrito, ma del linguaggio di programmazione Python.

Dopo aver affrontato la sintassi, l'indentazione, i numeri e le stringhe, ora non possiamo non soffermarci su uno degli strumenti più potenti del linguaggio che ci accompagneranno sempre nella nostra avventura pythonica: le Liste.

NOTA: Da questa lezione per facilitare la lettura userò la colorazione usata da iPython: in verde i comandi dati ed in rosso quelli restituiti da Python.

06 gennaio 2011

[Python] Primi passi - Lezione 3

Wow è passato un sacco di tempo dalla lezione numero 2, ma è stata una svista più di una reale volontà. Infatti ne avevo preparate diverse di lezioni, così come ho pronte già un paio di lezioni su wxPython. Quindi recuperiamo un po' di tempo perso e parliamo delle stringhe in Python.

NOTA: Non ricordo se lo avevo già scritto, ma ovviamente i concetti che esprimo in queste mini guide devono essere solo spunti di partenza e i metodi per approfondire sono davvero tanti a partire dal sito ufficiale del linguaggio.

Scriviamo una stringa, la nostra prima stringa (non fatevi sopraffare dall'emozione):
  1. stringa="Ciao sono una stringa"
E' stato facile non trovate? Ed adesso vi domanderete: "che ci posso fare?" Molto.. Ad esempio usare le potenti funzionalità di slicing per la loro manipolazione.

Voglio ottenere i primi 4 caratteri della stringa? Nulla di più facile...
  1. str=stringa[:4]
  2. print str
Risultato...
  1. Ciao
Tutto troppo facile non trovate? Provate a fare delle prove per estrarre i primi caratteri, gli ultimi, dal secondo al quinto e via così, lascio a voi il piacere della scoperta.

Ma andiamo avanti. Sommiamo le stringhe? Sì lo so, qualcuno pensa che abbia sbagliato capitolo e sia tornato ai numeri, ma non è così, in Python si può...
  1. str_1 ="Ciao a tutti "
  2. str_2="Belli e brutti"
  3. str_3=str_1+str_2
  4. print str_3
Il risultato sarà:
  1. Ciao a tutti Belli e brutti
Che emozione, non vi sentite come un artista che plasma la sua grezza creatura? Ok, mi sono fatto trascinare, torniamo a terra. Oltre alla somma, possiamo anche usare la moltiplicazione, col segno *, per ottenere la ripetizione della stringa stessa.
  1. stringa="Python"
  2. str=stringa*5
  3. print str
Risultato..
  1. PythonPythonPythonPythonPython
Dai ora che ci stiamo divertendo non ci fermiamo. Devo farvi notare che la stringa è raggiungibile anche per ogni elemento presente al suo interno. Faccio un esempio, così capite tutto molto meglio:
  1. stringa="Python"
  2. str=stringa[1] #si parte da 0 ricordate
  3. print str
Risulato...
  1. y
Ovviamente y si trova alla posizione 2, ma partendo da 0 l'elemento al secondo posto è identificato con 1 (e così via..). Proseguendo con le cose interessanti mi piacerebbe sapere se in una determinata stringa c'è un determinato valore. I metodi per farlo sono molti, il più semplice questo:
  1. string="Trova al mio interno la lettera y che hai manipolato prima..."
  2. str=string.find("y")
  3. print str
Ottenendo:
  1. 32
Ovviamente 32 rappresenta la posizione di y all'interno della stringa. Come vedete è tutto molto semplice e quindi lascio le altre mille sperimentazioni alla vostra fantasia.

Alla prossima e RoP (Rock on Python) a tutti.

26 dicembre 2010

[wxPython] La nostra prima finestra (video)

A volte le immagini valgono più di mille parole e quindi ecco un video per vedere in azione la prima lezione di wxPython.

17 dicembre 2010

[wxPython] Aggiungiamo un bottone ed un evento.

Dopo aver creato la nostra prima finestra, adesso è il momento di popolarla ed iniziamo col metterci un bel bottone.

Lasciamo lo stesso codice creato in precedenza, ma aggiungiamo (ovviamente) qualcosa.
  1. import wx
  2. class Main(wx.Frame):
  3.    def __init__(self,main,id):
  4.       wx.Frame.__init__(self,main,id,'Main',size=(600,400))
  5.       panel=wx.Panel(self)
  6.       button=wx.Button(panel,-1,label="Messaggio",pos=(10,10),size=(100,30))
  7. if __name__== "__main__":
  8.    app=wx.PySimpleApp()
  9.    frame=Main(None,-1)
  10.    frame.Show()
  11.    app.MainLoop()
Ma che abbiamo fatto in più di prima? Vedete la riga in blu, la 6? Essa aggiunge all'applicazione un bottone (wx.Button). Tra parentesi troviamo l'oggetto da cui dipende (panel), l'id (-1, quindi non esplicitato), la descrizione che comparirà sul pulsante (Messaggio) la sua posizione (10 px da destra e 10 px dall'alto) e la grandezza del pulsante stesso.

Eseguiamo il tutto e questo è il risultato.


Ma adesso che abbiamo creato un bottone non vogliamo fargli fare qualcosa? Ovvio che sì e quindi aggiungiamo un evento.

  1. import wx
  2. class Main(wx.Frame):
  3.    def __init__(self,main,id):
  4.       wx.Frame.__init__(self,main,id,'Main',size=(600,400))
  5.       panel=wx.Panel(self)
  6.       button=wx.Button(panel,-1,label="Messaggio",pos=(10,10),size=(100,30))
  7.        self.Bind(wx.EVT_BUTTON,self.closewindow, button)
  8.    def closewindow(self,event):
  9.       self.Destroy()
  10. if __name__== "__main__":
  11.    app=wx.PySimpleApp()
  12.    frame=Main(None,-1)
  13.    frame.Show()
  14.    app.MainLoop()
Le nuove righe introducono alcuni concetti nuovi. La riga 7 introduce un evento bottone (wx.EVT_BUTTON), che viene scatenato alla pressione del tasto quindi. Si seguito la funzione (closewindow) viene associata al nome del bottone (button).

Eseguendo l'applicativo e cliccando sul tasto si chiuderà la finestra.

Raccomandandomi fino all'esasperazione dell'importanza dell'indentazione del codice, ci si risente alla prossima.

11 dicembre 2010

[wxPython] La nostra prima finestra

Amo Python e lo considero il miglior linguaggio di programmazione orientato agli oggetti mai inventato da essere umano (grazie Guido). Ci faccio davvero di tutto, se solo lo bevessi anche il caffè, ed anche se le mie applicazioni sono in maggioranza in ambito web e dintorni, spesso devo mettere delle interfacce utente ai vari programmini scritti e per questo ormai da un po' mi affido a wxPython, una libreria grafica multipiattaforma per dare un volto al codice Python.

In ambiente GNU/Linux installare Python e wxPython è davvero semplice, troviamo tutto dentro il Synaptic di turno e quindi non mi soffermo più di tanto su questo aspetto.

Non perdiamo tempo e partiamo subito creando il codice per visualizzare la nostra prima applicazione, una finestra che 600x400 px. che contiene... nulla.


01 import wx
02
03 class Main(wx.Frame):
04   def __init__(self,main,id):
05      wx.Frame.__init__(self,main,id,'Main',size=(600,400))
06      panel=wx.Panel(self)
07
08 if __name__== "__main__":
09   app=wx.PySimpleApp()
10   frame=Main(None,-1)
11   frame.Show()
13   app.MainLoop()


Andiamo a spiegare quanto scritto. Nella riga 01 importo la libreria grafica e nella riga 03 creo la classe Main che conterrà un wx.Frame che altro non è che la base della mia finestra.

Entriamo nella classe e creiamo alla riga 04 la prima funzione, chiamata __init__, che è il vero e proprio costruttore della nostra finestra. I parametri passati sono quelli per identificare a chi ci stiamo riferendo, in questo caso a se stesso (self), il nome e l'id del nostro contenitore. Fatto questo diamo i parametri al nostro wx.Frame ed alla riga 05 avviene proprio questo ed in aggiunta a quanto proposto prima aggiungo il titolo, 'Main', che comparirà nella barra del titolo e le dimensioni in pixel (size).

Non resta poi che creare il wx.Panel che conterrà tutti i nostri oggetti, siano pulsanti, immagini o quant'altro. Ora naturalmente contiene... il nulla. (riga 06).

Da 08 a 13 ci sono le righe che mettono in secuzione quanto creato e potete anche copiarle ed incollarle per tutte le applicazioni. Sappiate che app è il cuore della nostra applicazione e frame quello che si vede.

Ecco il risultato del codice proposto, che potete lanciare dal vostro editor (se lo permette) oppure con l'interprete Python con $ python nome_file.py.



Ci siamo, la nostra prima finestra in wxPython. Unica raccomandazione OCCHIO ALL'INDENTAZIONE DEL CODICE, potreste ammattirvi per trovare un errore che in realtà errore non è.

A presto.

10 giugno 2009

[Python] Primi passi - Lezione 2

Adesso che abbiamo avuto il primo approccio col fantastico mondo di Python, non possiamo non soffermarci sulla sua sintassi. Infatti la scelta fatta dal buon Guido (se non sai chi è leggiti la prima lezione e segui i links) è stata quella di rendere mooooolto snella la scrittura del codice e di usare non tanto struttura con simboli e parentesi, ma semplicemente l'indentazione.


INDENTAZIONE
Vediamo di capire di che sto parlando con esempi pratici. Se volessimo scrivere un semplice ciclo IF con un linguaggio come PHP, sciveremo una cosa simile a:
if(condizione)
{
    istruzioni
}


Per fare la stessa cosa in Python invece scriveremo:
1. if (condizione):
2.     istruzioni


Come potete notare quindi bisogna porre molte importanza nell'utilizzo delle indentazioni e degli spazi, perché potrebbero generare degli errori non voluti. Quindi se volessimo annidare più cicli all'interno di funzioni o classi o cicli stessi, non dovrei far altro che procedere con indentazioni sempre più accentuate. Facciamo un esempio:


1. if(condizione):
2.     istruzioni
3.     if (altra condizione):
4.         istruzioni

..e così via. Molto semplice non trovate? Perché voler complicarsi la vita quando il modo è già così complicato disse Rubik al suo pargolo.

Ma adesso siamo caldi e quindi affrontiamo un altro aspetto del linguaggio: i numeri.

I NUMERI
Python supporta molti tipi diversi di dati e durante la vostra vita di programmatore ne incontrerete molti di questi se non tutti e scoprirete presto che questo linguaggio vi aiuterà nella loro gestione. Prendiamo ad esempio i numeri e la loro diversità. In maniera trasparente per l'utente, anche se poi sono presenti espressioni per forzare queste assegnazioni, Python si occuperà di riconoscere e gestire numeri di natura diversa, siano essi interi, decimali o altro.

Attenzione signore e signori, parte la ruota del nuovo esempio:
1. a=1
2. b=2.2
3. somma=a+b
4. print somma

otteremo:
3.2


Ohhhhhhhhhhhhh che meraviglia. Il nostro amico Python ha capito cosa gli stiamo passando e reagisce di conseguenza. Nelle righe 1 e 2 ho assegnato dei valori alle variabili, valori diversi, per poi sommarle (3) e stamparle (4).

Ci aspettano le stringhe, ma ce ne occuperemo nella terza lezione. A presto.

17 maggio 2009

[Python] Primi passi - Lezione 1

Comincia con questo post la prima di una serie di lezioni (mini-lezioni a dire il vero) sull'apprendimento dell'utilizzo del meraviglioso linguaggio di scripting che risponde al nome di Python. Non vi farò la storia del linguaggio e cose del genere, visto che tutto è reperibile in rete e lo potrete facilmente trovare sul sito ufficiale in inglese, su quello in italiano o sulla la sempre valida Wikipedia.

Un'altra cosa che mi preme sottolineare è che non parlerò di come installare installare l'interprete sui vari sistemi, perché il mitico Python lo potrete usare ovunque vogliate, su un ambiente Linux, Windows o Mac OS X.

NOTA: Tutto quello che vi illustrerò è stato provato su una Debian con Python 2.5.2.

Ed ora basta coi preamboli andiamo al sodo disse l'uovo dentro la pentola.

PRIMO CODICE: CIAO MONDO
Prima di tutto sappiate che gli script creati in Python possono essere scritti/provati direttamente in console (digitando solamente il comando python) oppure creando uno script con un editor di vostra scelta ed esplicitando nella prima riga:
#! /usr/bin/env python


Ok, siamo pronti e come consuetudine scriviamo il classico Ciao Mondo:
1. print "Ciao Mondo"

Fatto abbiamo creato il primo output a video. Complichiamo un po' le cose dai..
1. string = "Daniele"
2. print "Ciao Mondo, io sono %s" % string

L'output di questo sarà:
Ciao Mondo, io sono Daniele

Non abbiamo fatto altro che inserire un variabile stringa (%s) dentro la nostra istruzione di print, per poi esplicitarla al termine della riga 2. Adesso ha poco senso questo modo di scrivere, ma vi assicuro che in futuro sarà vitale.

Come vedete istanziare una variabile è molto semplice, lasciando a Python la libertà di capire di cosa stiamo parlando se stringa, numero, ecc, ecc.. In realtà i doppi apici giocano un rullo in questa attribuzione ed infatti nella stampa a video ho chiaramente indicato la variabile come stringa (%s) e non altro.

All'inizio farete fatica a comprenderlo, ma poi tutto sarà estremamente chiaro specie dopo la seconda lezione dedicata alla sintassi del linguaggio Python, che è davvero necessaria per capire come scrivere script correttamente.

A presto terrestri.

Tondo è bello...

Tondo è bello...