Indovinelli con Scratch

In questa lezione realizzemo un gioco con gli indovinelli con Scratch.
Proporremo 4 semplici indovinelli:
1) Giro curioso nel bosco fitto e frondoso. Mi arrotolo in palla, sono piccolo e gioioso.
2) Mi nutro di insetti nell’oscurità, Un piccolo mammifero nella mia verità.
3) Nella notte mi senti cantare, Con occhi grandi posso guardare.
4) Faccio il sonnellino durante la lunga stagione. Amo miele e pesce, sono un buon pescatore!

Per individuare la risposta corretta, occorre trascinare ciascun animale sulla macchina. Se la macchina parte con l’animale vuol dire che la risposta è corretta, altrimenti la macchina cambia colore e l’animale ritorna in posizione.

Ecco una possibile implementazione del gioco indovinelli con Scratch:

Convertitore decimale binario in Python

Convertitore decimale binario in Python

Realizziamo in questa lezione un semplice convertitore decimale binario in Python utilizzando le funzioni appena studiate.

Quindi iniziamo creando una funzione che prende come parametro un numero decimale e restituisce il numero convertito in binario.

Convertitore decimale binario in Python

Assegniamo a b, cioè alla variabile che conterrà il numero binario, la stringa vuota.

Dopo con un ciclo while che itera finché n è maggiore di zero, controlliamo se il resto della divisione è zero. Se il resto è zero aggiungiamo 1 alla stringa inizializzata, altrimenti aggiungiamo 1.

Ecco dunque il codice completo:

def dec_bin(n):

b=‘ ‘

while n>0:

if n%2==0:

b=‘0’+b

else:

b=‘1’+b

n=int(n/2)  #casting in intero

print(b)

c=int(input(‘Inserisci un numero decimale:  ‘))

dec_bin(c)


Convertitore decimale ottale in Python

Realizziamo anche una funzione che effettui la conversione da decimale a ottale.

In questo caso dobbiamo considerare i resti della divisione per 8.

Facciamo un esempio, considerando il numero decimale 32:

31:8=3 resto 7

Quindi 7 sarà l’ultima cifra del numero ottale che vogliamo trovare.

Dopo dobbiamo prendere 3 che si trova con questa formula (n-resto)/8, cioè (31-7)/8 e ancora 24/8 che appunto è uguale a tre.

Aggiungiamo alla stringa ottale la stringa resto che ottengo con un’operazione di casting.

Poi divido 3 per 8:

3:8=0 resto 3

Aggiungo 3 alla stringa precedente nella posizione sinistra, ottenendo così il numero 37.

Quindi mi fermo perché la condizione n>0 non è più verificata.

Ecco dunque il codice completo:

def dec_ot(n):

ottale=”

while n>0:

resto=n%8

n=int((n-resto)/8)

ottale=str(resto)+ottale

print(ottale)

o=int(input(‘Inserisci un numero decimale: ‘))

dec_ot(o)

Questo era solo un semplice modo per sviluppare un convertitore da decimale a binario e ottale in Python, potete trovare voi stessi un’altra soluzione.


Funzioni predefinite per la conversione

Ovviamente esistono le funzioni predefinite per convertire un numero da una base all’altra, ma è interessante ragionare su questi algoritmi.

Ecco quindi le funzioni predefinite:

print(‘In base 2: ‘, bin(33))

print(‘In base 8: ‘, oct(33))

Alcuni link utili

Indice tutorial sul linguaggio Python

1 – Introduzione al linguaggio Python

2 – Le variabili

3 – Operatori aritmetici e di assegnazione

4 – Stringhe

5 – Casting

6 – Input e print

7 – Primi esercizi in Python

8 – Errori in Python

9 – Script Python

10 – Scambio di variabili

Funzioni Python

Funzioni Python

In questa lezione studieremo le funzioni in Python che, così come in matematica, ricevono dei valori come argomenti e restituiscono un valore come risultato.

Infatti si usa dire, nei linguaggi di programmazione, che la funzione ritorna un valore.

Per dichiarare una funzione in python si usa la parola chiave def, e poi di seguito il nome della funzione e i parametri racchiusi tra parentesi tonde. Dopo si inseriscono i due punti e, a capo, con la dovuta indentazione, il blocco di istruzioni che devono essere eseguite.

Sintassi funzioni Python

La sintassi di una funzione è dunque questa:

def nomefunzione(argomenti):

istruzioni

return valore

Gli argomenti possono essere opzionali e la funzione può anche non restituire nessun valore, dunque può essere omessa. Inoltre, la funzione può anche restituire più return.


Funzioni Python che restituiscono un valore

Il classico esempio è quello della funzione somma, quindi ecco di seguito il codice:

def somma(x,y):

s = x+y

return s

Questa funzione và poi richiamata, come spiegherò più avanti nel tutorial.


Funzione che non restituisce alcun valore

Continuiamo quindi a parlare delle funzioni in Python, definendo una funzione che non restituisce alcun valore. Un esempio può essere dato dalla funzione stampa.

Ecco quindi di seguito il semplice codice di esempio:

def stampa(x,y):

s = x+y

print(s)


Funzione che restituisce più di un valore

Le funzioni in Python possono restituire un valore a seconda dei casi.

Facciamo dunque un esempio:

def somma_pos(x,y):

s = x+y

if s > 0:

return s

else:

if x > y

return x

else:

return y

In questo caso a seconda del valore della somma la funzione ritornerà valori diversi.


Funzioni senza parametri

Le funzioni in Python possono anche essere senza parametri.

Come questa di esempio:

def stampa_frase():

print(‘Ciò che dobbiamo imparare a fare, lo impariamo facendolo. (Aristotele)’)

Le funzioni che non restituiscono alcun valore, in altri linguaggi di programmazione vengono chiamate procedure e servono principalmente a scomporre un problema complesso in sotto-problemi più semplici.

In questa lezione abbiamo parlato di funzioni in Python, nelle prossime lezioni continueremo ancora a proporre degli esempi.

Alcuni link utili

Indice tutorial sul linguaggio Python

1 – Introduzione al linguaggio Python

2 – Le variabili

3 – Operatori aritmetici e di assegnazione

4 – Come usare le stringhe

5 – Casting

6 – Input e print

7 – Primi esercizi in Python

8 – Come gestire gli errori in Python

Metodi delle liste in Python

Metodi delle liste in Python

In questa lezione studieremo altri metodi delle liste in Python, che non possono essere utilizzati però con le tuple. In particolare vedremo in dettaglio il metodo append e insert.


Alcuni metodi delle liste in Python

Inserire elementi in una lista

Per inserire elementi in una lista si possono usare due metodi append(val) e insert(pos,val).

La differenza è che il metodo append consente di aggiungere elementi in coda ad una lista in Python, mentre insert consente di aggiungere un valore nella posizione pos specificata.

Append()

Vediamo quindi un esempio pratico sull’uso di append:

stagioni=[‘Primavera’, ‘Estate’]

stagioni.append(‘Autunno’)

print(stagioni)


Insert()

Come già detto il metodo insert, consente di inserire un elemento in una posizione specificata dall’indice. Ad esempio:

stagioni=[‘Primavera’, ‘Estate’]

stagioni.insert(0, ‘Autunno’)

print(stagioni)

Questo script stamperà quindi la lista con l’aggiunta di Autunno in prima posizione: [‘Autunno’, ‘Primavera’, ‘Estate’].

Facciamo altri esempi con i due metodi.

Uso di append

Inserire in una lista di n elementi, i valori del suo indice. Dopo averli inseriti tutti, visualizzare gli elementi e la relativa posizione.


n = int(input('Inserisci il numero degli elementi:'))
lista = []

for i in range(n):
    lista.append(i)

for i in range(n):
    print('Elemento in posizione:', i, 'vale', lista[i])

Analizziamo i cicli che abbiamo utilizzato per risolvere l’algoritmo proposto.

In questo esempio i rappresenta l’indice, mentre lista[i] rappresenta l’elemento.

Supponendo che n valga 5, quindi eseguiamo il primo ciclo for passo passo. Partendo dalla prima iterazione abbiamo:

i=0 e dunque con lista.append(i) ottengo lista[0]=0

i=1 e dunque con lista.append(i) ottengo lista[1]=1

….

i=4 e dunque con lista.append(i) ottengo lista[4]=4


Con il secondo ciclo for poi visualizzo tutti gli elementi ed il suo indice, infatti con i visualizzo l’indice, cioè la posizione dell’elemento mentre con lista[i] visualizzo l’elemento.

Possiamo anche utilizzare questo secondo metodo per leggere gli elementi della lista. Quindi al posto del secondo for posso scrivere:

for i in lista:
    print('Elemento in posizione', lista.index(i), 'vale', i)

N.B. Questo metodo però non funziona se ci sono elementi uguali nella lista!

In questo secondo esempio i rappresenta l’elemento, non l’indice come nel primo esempio, dunque per ottenere l’indice richiamo il già citato metodo index.

L’output generato, in entrambi i casi, sarà dunque questo:

Elemento in posizione 0 vale 0
Elemento in posizione 1 vale 1
Elemento in posizione 2 vale 2
Elemento in posizione 3 vale 3
Elemento in posizione 4 vale 4

Uso di Insert

Adesso implementiamo lo stesso esempio utilizzando insert.


n = 5
lista = []

for i in range(n):
    lista.insert(0,i)

for i in range(n):
    print('Elemento in posizione:', i, 'vale', lista[i])

In questo caso gli elementi sono inseriti in testa alla lista in quanto ho specificato la posizione 0 da cui partire per ogni inserimento. Gli elementi, cioè, a mano a mano vengono spostati verso destra.

La lista, al termine del ciclo for, conterrà i seguenti valori: lista[4,3,2,1,0].

Quindi l’output ottenuto è:

Elemento in posizione: 0 vale 4
Elemento in posizione: 1 vale 3
Elemento in posizione: 2 vale 2
Elemento in posizione: 3 vale 1
Elemento in posizione: 4 vale 0

Anche qui per visualizzare gli elementi avrei potuto utilizzare questo procedimento:

for i in lista:
    print('Elemento in posizione:', lista.index(i), 'vale', i)

Anche in questo caso possiamo utilizzare questo metodo, attenzione però quando ci sono elementi ripetuti!

In questa lezione abbiamo studiato i metodi delle liste in Python, presto faremo delle applicazioni pratiche.

Alcuni link utili

Indice tutorial sul linguaggio Python

1 – Introduzione al linguaggio Python

2 – Le variabili

3 – Operatori aritmetici e di assegnazione

4 – Stringhe

5 – Casting

6 – Input e print

7 – Primi esercizi in Python

8 – Errori in Python

9 – Script Python

10 – Scambio di variabili

Numeri random e metodi in Python

Numeri random e metodi in Python

Continuiamo a parlare di numeri random e metodi in Python.

Numeri random e metodi in Python – choice()

Il metodo choice consente di estrarre a caso un elemento della lista o anche della tupla.

Allora potremmo modificare il gioco della morra cinese, che potete consultare a questo link morra cinese in python, utilizzando choice.

morra=('sasso', 'carta', 'forbice')

print(random.choice(morra))

Provate quindi a modificare tutto il gioco utilizzando questo metodo.


Vi ricordo inoltre che potete utilizzare from, come spiegato nellae lezioni precedenti e dunque:

from random import choice

morra=('sasso', 'carta', 'forbice')

print(choice(morra))


Il metodo choice può anche essere utilizzato per estrarre lettere da una stringa ad esempio:

frase='Coding'

print(random.choice(frase))

Il metodo choice può essere utile per generare delle password, come vedremo nei prossimi tutorial.


choices()

Continuiamo a parlare di numeri random e metodi in Python introducendo un altro metodo, choices che ritorna una lista di valori.

Facciamo dunque un esempio:

voti=[4,6,7]

print(random.choices(voti, k=7))

In questo caso ritorna una lista di 7 valori a caso tra 4, 6 e 7.

Facciamo quindi un altro esempio:

voti=[4,6,7]

print(random.choices(voti, weights=[1,8,1], k=10))

In questo caso si ha un elenco di 10 elementi, con possibilità 8 volte maggiore che ci sia il numero 6.


Numeri random e metodi in Python – shuffle()

Introduciamo adesso il metodo shuffle che ha il compito di riorganizzare una lista.

Quindi ad esempio:

morra=['sasso', 'carta', 'forbice']

random.shuffle(morra)

print(morra)

Produce come output una nuova sequenza. Chiaramente questo metodo si può applicare alle liste ma non alle tuple, in quanto le tuple contengono valori che non possono essere modificati, nemmeno nella sequenza.

Si può anche specificare una funzione che restituisce sempre lo stesso valore.

Quindi ad esempio creo una funzione di nome ordine che poi vado a richiamare nel metodo shuffle:

def ordine():

return 0

morra=[‘sasso’, ‘carta’, ‘forbice’]

random.shuffle(morra, ordine)

print(morra)


getrandbits()

Continuiamo ancora a parlare di numeri random e metodi in Python introducendo il metodo getrandbits che ritorna un intero della dimensione dei bit specificati.

Ad esempio per 8 bit avremo i numeri tra o e 255, ricordiamo infatti che 2^8=256.

Facciamo dunque un esempio:

print(getrandbits(8))

print(getrandbits(6))

Nel primo caso si generano numeri tra 0 e 255, nel secondo tra 0 e 64.

Ci sono ancora altri metodi da utilizzare per i numeri random in Python, ne parleremo più avanti.

Alcuni link utili

Indice tutorial sul linguaggio Python

1 – Introduzione al linguaggio Python

2 – Le variabili

3 – Operatori aritmetici e di assegnazione in python

4 – Stringhe

5 – Casting

6 – Input e print

7 – Primi esercizi in Python

8 – Errori in Python

9 – Script Python

10 – Scambio di variabili