Eccoci alla seconda puntata dei tutorial su Python!
In questo post vedremo 3 cose (come si capisce dal titolo), sotto con la prima!
Tipi di dati
In praticamente tutti i linguaggi di programmazione esistono 3 principali categorie di tipi di dati: i numeri, le stringhe e i booleani.
Cosa siano i numeri è chiaro…
Esempi
1 2 3 |
4 0.62 -3 |
Le stringhe sono insiemi di lettere, come ad esempio una parola o una frase
Esempi:
1 2 3 |
'ciao' 'ciao mamma guarda come mi diverto con le stringhe' 'ci son 2 coccodrilli ed 1 orangotango' |
I booleani invece sono solamente due valori: vero e falso.
Servono principalmente a verificare delle condizioni, come ad esempio se una torta è cotta (vedi l’articolo Imparare a programmare da zero)
Variabili
Vediamo insieme questo semplice programma:
1 2 3 |
#questo programma ci chiede il nome e ci saluta! nome = raw_input("Come ti chiami? ") print "Ciao " + nome |
La prima riga, quella che comincia con #, è un commento, cioè una parte del programma che viene ignorata dal computer.
Solitamente sono appunti scritti dai programmatori per aiutarsi nella lettura del codice.
Nella seconda riga invece creiamo una variabile chiamata “nome” e ci mettiamo dentro quello che scrive l’utente.
“raw_input()” in pratica è una funzione che equivale a dire “prendi tutto quello che viene scritto finchè non si schiaccia invio”. Cosa sia una funzione lo vediamo dopo.
Una variabile invece possiamo immaginarcela cone una specie di scatola vuota dove dentro ci si può mettere qualcosa, un numero, una stringa, qualunque cosa.
Nella terza riga scriviamo semplicemente “Ciao” e ci attacchiamo dopo il nome che l’utente ha appena inserito.
In alcuni linguaggi di programmazione le variabili devono essere dichiarate prima di poterle utilizzare, e ne deve essere specificato il tipo (es. numero, stringa, ecc.), nel senso che QUELLA variabile potrà contenere SOLO “cose” di QUEL tipo.
Per capirci, immaginiamo questo:
1 2 3 |
- In questo programma una variabile chiamata "nome" - La variabile "nome" sarà di tipo stringa - Chiedo il nome all'utente e lo inserisco nella variabile "nome" |
Tradotto in codice, lo STESSO identico programma scritto in C# risulterebbe così:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
//questo programma ci chiede il nome e ci saluta! using System; namespace CiaoUtente { class Program { static void Main(string[] args) { string nome; Console.Write("Come ti chiami? "); nome = Console.ReadLine(); Console.Write("Ciao " + nome); } } } |
(prendetelo per buono, non sto a spiegare il C#, qui stiamo parlando di python! :D)
In python, come possiamo vedere dal codice scritto sopra, tutti questi problemi non si pongono: ci serve una variabile? Ne creiamo una al volo e la utilizziamo!
Comodo no?
Funzioni
Ora ampliamo il programmino di prima aggiungendoci una funzione:
1 2 3 4 5 6 7 8 9 |
#questo programma ci chiede il nome e ci saluta! def PiuUno(x): return x + 1 nome = raw_input("Come ti chiami? ") print "Ciao " + nome eta = raw_input("Quanti anni hai? ") print "L'anno prossimo ne avrai " + PiuUno(eta) |
(si, così non funziona, un attimo e vediamo perchè)
In cima abbiamo creato (o definito) la funzione “PiuUno”.
Una funzione è come una specie di programma a sua volta, un pezzo di codice che può essere riutilizzato più volte “chiamandolo” in diversi punti del programma.
Le funzioni possono prendere uno o più parametri (o anche nessuno) e possono ritornare qualcosa (o no).
Mi spiego utilizzando il codice appena scritto: la nostra funzione PiuUno non fa altro che prendere un valore, la x, e restituire il valore preso aggiungendoci 1.
Quindi ad esempio PiuUno(4) sarà uguale a 5, abbastanza semplice, no?
Ah, come per le variabili, in alcuni linguaggi viene richiesto di dichiarare il “tipo di ritorno” della funzione, che nel nostro caso potrebbe essere int, cioè numeri interi, ma anche stavolta il python fa un’eccezione e, ad esempio, una funzione come quella qui sotto può prendere sia numeri che stringhe senza problemi
1 2 3 4 5 |
def Raddoppia(qualcosa): return qualcosa * 2 print Raddoppia("Ciao") print Raddoppia(3) |
e come risultato avrà
1 2 |
CiaoCiao 6 |
Alla faccia del C#! Eheheh :D
Si, ma…
Ok, appurato cosa siano le funzioni, allora perchè il nostro codice non funziona?
Il messaggio di errore che esce quando proviamo a eseguirlo è
1 |
TypeError: cannot concatenate 'str' and 'int' objects |
Ossia, una roba simile a quello che ci viene detto dalle elementari: non puoi sommare le pere con le mele.
La nostra funzione PiuUno aggiunge 1, che è un numero, a x, che nel nostro caso è una stringa (raw_input, la funzione che legge quello che viene scritto dall’utente, restituisce sempre una stringa).
Quindi dobbiamo effettuare un’operazione di cast, ossia dobbiamo chiamare delle funzioni speciali per trasformare il parametro da stringa in numero per sommarci 1, e poi da numero in stringa per restituirla e poterla concatenare al resto senza problemi:
1 2 3 4 5 6 7 8 9 10 11 |
#questo programma ci chiede il nome e ci saluta! def PiuUno(x): numero = int(x) + 1 stringa = str(numero) return stringa nome = raw_input("Come ti chiami? ") print "Ciao " + nome eta = raw_input("Quanti anni hai? ") print "L'anno prossimo ne avrai " + PiuUno(eta) |
e ta-daaaan!
Nota:
Come avrete notato, all’interno del codice non ho usato le lettere accentate: non è che non so scrivere, è che i linguaggi di programmazione sono al 99.99999% in inglese, gli inglesi non hanno le lettere accentate e di conseguenza non si usano neanche mentre si programma.
Poi volendo c’è modo di usarle, ma di solito non si fa…
Poi volendo c’è Swift, il nuovo linguaggio di programmazione della Apple che permette di utilizzare anche le emoji, ma vabbè…
Giochino!
Guarda un insieme delle cose di cui abbiamo parlato finora usate all’interno di un giochino:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
#importiamo la funzione randint() dal modulo random from random import randint #inizializziamo il numero da indovinare generandone uno casuale compreso tra 1 e 100 numero = randint(1,100) #inizializziamo il numero di tentativi... tentativi = 0 #...e i tentativi massimi per l'utente tentativi_max = 10 #continuiamo a chiedere all'utente un numero finche' il non e' stato indovinato o sono stati superati i tentativi massimi while (tentativi < tentativi_max): #chiediamo all'utente di inserire un numero e lo inseriamo nella variabile tent tent = int(raw_input('Inserisci un numero: ')) #incrementiamo il numero di tentativi fatti tentativi += 1 #verifichiamo se il numero e' maggiore o minore o e' stato indovinato if (tent > numero): print 'Troppo alto' elif (tent < numero): print 'Troppo basso' else: print 'Complimenti! Hai indovinato in soli ' + str(tentativi) + ' tentativi!' #usciamo dal ciclo break #se il ciclo è finito perchè l'utente ci ha messo troppi tentativi... else: print 'Ci hai messo troppi tentativi! Il numero da indovinare era ' + str(numero) |
Figo eh?
La struttura è abbastanza semplice, e i commenti aiutano a capire cosa sta succedendo riga per riga.
Niente panico se non capite cosa sono quegli if e i while, li vedremo la prossima volta ;)
Sapreste trovare un modo per barare e riuscire a indovinare sempre al primo tentativo?