mercoledì 14 novembre 2012

Mission Python: Liste e sostituzione di variabili

Iniziamo  dalle liste.

Le liste sono un tipo di variabile. La variabile, dicevamo qualche post fa, è come una scatola nella quale mettiamo dentro un contenuto. La lista invece è quel tipo di scatola che contiene più cose; infatti possiamo assegnargli più di un valore.


Ecco una lista:

nomi = ["Luigi", "Luca", "Nino", "Ennio"]

Vediamo come funziona. Poniamo il caso che si voglia stampare a video il nome Nino.

Dovrò scrivere

print nomi[2]

mentre per per stampare il nome Luigi,

print nomi[0]

Ricordate? In Python quando si conta si parte sempre da zero e non da uno.

Per sapere invece la dimensione della lista "nomi"

print len(nomi)

Facciamo un altro esempio di lista.

password =["0123", "0234", "0334", "9403"]

Per vedere il primo valore

print password[0]

Per vedere il secondo valore

print password[1]

e via dicendo.

Per sapere la dimensione della lista "password"

print len(password)

Passiamo alla sostituzione di variabili.

Facciamo subito uno script.

#!/usr/bin/env python
# -*- coding: utf-8 -*-
nome = raw_input('Inserisci il tuo nome: ')
anni = input('inserisci la tua età: ')
luogo = raw_input('Inserisci la tua città: ')
print nome,"è nato a ",luogo,"ed ha",anni,"anni"

Ecco, la nostra intenzione è quella di mettere ordine dopo l'istruzione print. Tra apici e virgole mica si capisce tanto...

E' arrivato il momento di spiegare il concetto di sostituzione di variabili.

La regola è che le variabili il cui valore è una stringa verranno sostituite con %s, mentre le variabili il cui valore è un numero con %d.

Procediamo alla sostituzione partendo dall'ultima riga dello script.

print nome,"è nato a ",luogo,"ed ha",anni,"anni"

nome è una variabile stringa perciò la sostituiamo con %s
luogo è una variabile stringa perciò la sostituiamo con %s
anni è una varibile numerica quindi la sostituiamo con %d

Ora andiamo a ricostruire la nostra riga

print "%s è nato a %s ed ha %d" %(nome,luogo,anni)

%(nome,luogo,anni) rappresenta l'ordine delle variabili: il primo %s equivale alla variabile nome, il secondo %s equivale alla variabile luogo, %d equivale alla variabile anni.

Alla luce di quello che abbiamo appena detto possiamo scrivere:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
nome = raw_input('Inserisci il tuo nome: ')
anni = input('inserisci la tua età: ')
luogo = raw_input('Inserisci la tua città: ')
print "%s è nato a %s ed ha %d anni" %(nome,luogo,anni)

Decisamente più ordinato e più leggibile.

Ora costruiamo uno script che contenga entrambi gli argomenti trattati oggi.

#!/usr/bin/env python
# -*- coding: utf-8 -*-

nomi = ["Luigi", "Luca", "Nino", "Ennio"]
password = [0123, 0234, 0334, 9403]
tuo_nome = raw_input('Inserisci il tuo nome: ')
tua_password = input('inserisci la tua password: ')
if tuo_nome in nomi:
   posizione = nomi.index(tuo_nome)
   if tua_password == password[posizione]:
      print "ciao %s. Accesso consentito." %tuo_nome
   else:
      print "Ciao %s. Accesso non consentito." %tuo_nome
else: 
   print "%s, si presenti, non la conosco" %tuo_nome

if tuo_nome in nomi:

Controlla se il nome che hai digitato è presente nella lista "nomi"

posizione = nomi.index(tuo_nome)

Se il nome che hai digitato è presente nella lista, la funzione nomi.index(tuo_nome) ne assegna la posizione alla variabile "posizione".

if tua_password == password[posizione]:

Se la password che hai digitato corrisponde alla posizione del nome, Python dirà che l'accesso è consentito, altrimenti dirà che non si ha accesso. Il tutto secondo questa logica:

prima posizione: Luigi 0123
seconda posizione: Luca 0234...e così via

Se ad esempio scrivo Luigi con la password di Nino, Python mi dirà che l'accesso non mi è consentito. Se invece scrivo un nome che non è presente nella lista "nomi", mi dirà che non mi conosce affatto. 
Sulla sostituzione delle variabili c'è altro da dire, ma oggi ci fermiamo qui.

L'indice di Mission Python lo trovate qui.

Alla prossima!

2 commenti: