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:
defdec_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:
defdec_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.
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:
defnomefunzione(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.
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=0e 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.
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:
defordine():
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.
I numeri random in Python, cioè i numeri pseudocasuali si utilizzano importando innanzitutto il modulo random. Quindi inseriamo semplicemente nello script: import random.
Se provate anche a digitare in modalità interattiva help(‘random’), vedrete le specifiche di questo modulo, con le funzioni che potete utilizzare nei vostri script.
Dopo aver importato il modulo dunque possiamo usare tutti i metodi per generare i numeri random.
Numeri random in Python – random()
Il metodo random genera un numero casuale decimale tra 0 e 1.
random.random()
Si generano dunque dei numeri con la virgola compresi tra 0 e 1.
Importazione dei moduli per i numeri random in Python
In Python è possibile richiamare solo alcuni elementi di un modulo, evitando così di richiamare un intero modulo.
Ad esempio possiamo importare solo le funzioni che ci servono utilizzando la parola chiave from seguita dal nome del modulo e poi da import e dal nome del metodo che si vuole importare.
Ecco un possibile esempio:
fromrandom importrandom
print(random())
Come potete notare in questo modo non è più necessario indicare random.random(), come nell’esempio precedente ma basta solo random().
Inoltre è possibile importare tutti i metodi anche in questo modo:
fromrandom import*
print(random())
print(randint(1,10))
Così è possibile utilizzare tutti i metodi senza ripetere ogni volta random, ma utilizzando solo il nome.
Numeri random in Python – randint()
Il metodo randint genera un numero casuale intero in un intervallo specificato tra parentesi.
random.randint(1, 10)
In questo esempio si generano i numeri casuali tra 1 e 10.
Numeri random in Python – randrange()
Il metodo randrange genera un numero casuale intero, in un intervallo di valori come randint, ma si può specificare lo step.
Ad esempio:
random.randrange(1, 10, 2)
In questo caso si possono generare solo i numeri dispari da 1 a 10, dunque: 1, 3, 5, 7, 9.
Lo step è comunque opzionale, nel senso che si può indicare anche solo:
random.randrange(1, 10)
Ed in questo caso si possono generare i numeri interi da 1 a 10.
seed()
Con questo metodo si può inizializzare il generatore di numeri casuali.
Facciamo dunque un esempio:
random.randint(1, 100)
Se eseguiamo questo script otterremo ogni volta un numero casuale diverso.
Se invece prima impostiamo il seed:
random.seed(10)
random.randint(1, 100)
Otterrete sempre lo stesso numero casuale, in questo caso 74. Provate adesso voi a cambiare il valore del seed.
Conclusioni
Questi sono solo alcuni dei metodi sui numeri random in Python, nella prossima lezione vi introdurrò qualche altro metodo.