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.
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.
In questa lezione studieremo le tuple in Python, cioè una serie ordinata di valori immutabili identificati da un indice.
Una tupla è un tipo di dato molto simile alla lista, la differenza consiste nel fatto che le tuple sono immutabili, cioè non si possono cambiare i valori.
Quindi le tuple sono adatte a rappresentare dei dati che non cambiano mai.
Ad esempio possono non cambiare i dati anagrafici delle persone, i giorni della settimana, le stagioni dell’anno, ecc.
Convenzionalmente le tuple in Python si indicano con una lista di valori separati da virgole, racchiusi tra parentesi tonde che però non sono obbligatorie.
In Python è possibile creare una tupla con un singolo elemento, ma occorre aggiungere una virgola finale. Ad esempio:
giorno=('Lunedì',)
print(giorno[0])
La virgola è necessaria altrimenti Python tratterebbe la singola tupla come una stringa qualunque.
Operazioni con le tuple in Pyhton
Le operazioni che si possono effettuare con le tuple non sono tutte quelle che abbiamo visto con le liste.
Lunghezza di una tupla
Ad esempio si può calcolare la lunghezza di una tupla con la funzione len:
voti=(4,8,6,10)
lunghezza=len(voti)
Concatenazione di tuple
Le tuple in Python si possono anche concatenare:
a = ('Primavera', 'Estate')
b = ('Autunno', 'Inverno')
c=a+b
print(c)
Prodotto con le tuple
Si può effettuare anche il prodotto:
voto=(6,)
voto*=3
print(voto)
Si avrà quindi in output (6, 6, 6).
Ricerca di un dato in una tupla
Per ricercare un dato in una tupla si utilizza in.
a = (‘Primavera’, ‘Estate’) b = (‘Autunno’,‘Inverno’) ‘Estate’in a #restituisce True ‘Estate’in a #restituisce False
Conteggiare quante volte compare un elemento, metodo count
Inoltre, il metodo count consente di contare quante volte ricorre un elemento nella tupla. Se non lo trova dà un’eccezione e più avanti impareremo come gestirle.
voti=(4,8,6,10,6)
c=voti.count(6)
print(c)
In questo caso si stamperà 2, cioè il numero di volte che occorre il numero 6.
Posizione dell’elemento nella tupla con il metodo index
Il metodo index restituisce la posizione dell’elemento partendo da 0.
voti=(4,8,6,10)
c=voti.index(8)
print(c)
Usare if con le tuple
L’if, con le tuple in Python, si utilizza allo stesso modo delle liste, ecco un esempio:
voti=(4,6,8,9)
if voti[0]>=6:
print(‘Sufficiente’)
else:
print(‘Insufficiente’)
Cicli con le tuple
Anche i cicli si utilizzano allo stesso modo, dunque facciamo un esempio con il ciclo for.
voti=(4,6,8,9)
for i in voti:
print(‘Voti: ‘, i)
In questa lezione abbiamo introdotto le tuple in Python, più avanti approfondiremo l’argomento al fine di comprenderne meglio le potenzialità.
In questa lezione vedremo come utilizzare gli if e le liste in Python.
Abbiamo già parlato delle liste nella scorsa lezione e abbiamo detto che sono degli aggregatori di dati che possono essere di tipo diverso.
Adesso utilizziamo le strutture condizionali, ovvero gli if, con le liste.
Esempi di if e liste in Python
Potremmo ad esempio avere la necessità di verificare se un dato elemento esiste nella lista che abbiamo creato.
Consideriamo ad esempio una lista di questo tipo:
voti=[6,7,8,9,10]
Per verificare che un dato elemento esiste nella lista basterà scrivere:
if 7 in voti:
print(‘Il voto 7 è nella lista’)
Mentre per indicare che un elemento non è nella lista possiamo scrivere:
if 5 not in voti:
print(‘Il voto 5 non è nella lista’)
Altro esempio con le liste
Data una lista di 5 voti con possibili valori da 4 a 10, dire se ciascun voto è sufficiente o insufficiente.
Svolgeremo questo algoritmo senza l’utilizzo del for, in quanto serve solo per spiegare l’utilizzo delle strutture condizionali.
voto=[6,9,4,5]
if voto[0]>=6:
print(‘Il primo voto è sufficiente: ‘, voto[0])
else:
print(‘Il primo voto non è sufficiente: ‘, voto[0])
if voto[1]>=6:
print(‘Il secondo voto è sufficiente: ‘, voto[1])
else:
print(‘Il secondo voto non è sufficiente: ‘, voto[1])
if voto[2]>=6:
print(‘Il terzo voto è sufficiente: ‘, voto[2])
else:
print(‘Il terzo voto non è sufficiente: ‘, voto[2])
if voto[3]>=6:
print(‘Il quarto voto è sufficiente: ‘, voto[3])
else:
print(‘Il quarto voto non è sufficiente: ‘, voto[3])
Altro esempio con le liste
Sapendo di avere una lista di tre numeri. Controllare ogni numero e dire se è pari o dispari.
numeri=[4,5,8]
if numeri[0]%2==0:
print(‘Il primo numero è pari’)
else:
print(‘Il primo numero non è pari’)
if numeri[1]%2==0:
print(‘Il secondo numero è pari’)
else:
print(‘Il secondo numero non è pari’)
if numeri[2]%2==0:
print(‘Il terzo numero è pari’)
else:
print(‘Il terzo numero non è pari’)
Questi sono solo dei semplici esempi d’uso dell’istruzione if con le liste in Python, nelle prossime lezioni approfondiremo l’argomento delle strutture iterative con le liste.
Si stamperà: [‘Primavera’, ‘Estate’, ‘Autunno’, ‘Inverno’]
Indice della lista
Come abbiamo già detto ad ogni elemento della lista è assegnato un indice che parte da sinistra e inizia da 0. Dunque, per stampare ad esempio il primo elemento scriviamo:
print(stagioni[0])
Mentre per stampare l’ultimo elemento scriviamo:
print(stagioni[3])
Così come abbiamo visto con le stringhe, anche con le liste possiamo estrarre un insieme di valori, cioè una sottolista:
print(stagioni[:2])
Questo output visualizzerà solo i primi due elementi della lista.
Modificare elementi delle liste in Python
Gli elementi della lista possono anche essere modificati, riassegnandogli un nuovo valore.
Ad esempio assegniamo al primo elemento il valore ‘Estate‘, mentre al secondo assegniamo il valore ‘Primavera‘.
stagioni[0] = ‘Estate’
stagioni[1] = ‘Primavera’
In questo semplice esempio ho cambiato la prima stagione e la seconda.
Migliora le tue capacità di programmazione Python seguendo i nostri corsi in diretta!
Numero degli elementi di una lista
Il metodo len consente di ottenere il numero degli elementi di una lista.
Quindi:
len(stagioni)
Dà come risultato 4. Per stampare al solito utilizziamo print(len(stagioni))
Concatenare le liste
Per concatenare due liste si usa l’operatore +, quindi ad esempio:
a = [‘Primavera’, ‘Estate’]
b = [‘Autunno’, ‘Inverno’]
c = a + b
print(c)
In questo modo dunque si uniscono le due liste in una sola.
Prodotto con le liste in Python
Si può effettuare anche il prodotto con le liste:
voto = [6,8]
voto* = 3
print(voto)
L’output visualizzato sarà dunque [6, 8, 6, 8, 6, 8].
Ricerca di un dato in una lista
Per ricercare un dato in una lista si utilizza in. Ad esempio in modalità interattiva possiamo scrivere:
linguaggi = [‘python’, ‘php’]
‘php’in linguaggi #restituisce True
‘c’in linguaggi #restituisce False
Conteggiare quante volte compare un elemento, metodo count
Con le liste si può utilizzare anche il metodo count, che consente di contare quante volte ricorre un elemento nella lista. Se l’elemento non viene trovato si ha un’eccezione.
voti = [9,7,7,10] c = voti.count(7) print(c)
In questo caso si stamperà 2, cioè il numero di volte che occorre il numero 7.
Dato in input un numero, verifichiamo che sia maggiore di 1. Se non lo è, visualizziamo un messaggio di errore poiché i numeri primi sono definiti solo per numeri maggiori di 1.
Iniziamo con l’impostare una variabile div a 2 e una variabile count a 0. div è il divisore con cui verificheremo se il numero è primo, mentre count tiene traccia del numero di divisori trovati.
Utilizziamo un ciclo while che continua finché div è minore o uguale alla metà del numero e count è uguale a 0. Questo ci permette di ottimizzare l’algoritmo evitando di dividere inutilmente numeri molto grandi.
All’interno del ciclo, controlliamo se il numero è divisibile per div usando l’operatore modulo (%). Se il resto della divisione è zero, incrementiamo count poiché abbiamo trovato un divisore.
Dopo ogni iterazione, incrementiamo div di uno.
Se alla fine del ciclo count è ancora zero, il numero è primo. Altrimenti, non è primo.
Ecco dunque il codice completo:
numero = int(input('Inserire un numero: '))
if numero <= 1:
print('Devi inserire un numero maggiore di 1')
else:
div, count = 2, 0
while div <= numero / 2 and count == 0:
if numero % div == 0:
count += 1
div += 1
if count == 0:
print('Numero primo!')
else:
print('Il numero non è primo!')
Con questo algoritmo, siamo in grado di determinare se un numero inserito dall’utente è primo o meno.
Miglioramenti e ottimizzazioni algoritmo sui numeri primi in Python
Potremmo fare alcune ottimizzazioni all’algoritmo precedentemente proposto. In particolare possimo evidenziare questo miglioramenti e ottimizzazioni:
Verifica dei numeri pari: Possiamo ottimizzare ulteriormente l’algoritmo evitando di controllare i divisori per i numeri pari, ad eccezione di 2. Se il numero è pari diverso da 2, sappiamo già che non è primo perché è divisibile per 2.
Ottimizzazione della ricerca dei divisori: Possiamo limitare la ricerca dei divisori fino alla radice quadrata del numero anziché fino alla sua metà. Questo perché se un numero ha un divisore maggiore della sua radice quadrata, avrà anche un divisore minore della sua radice quadrata.
Refactoring del codice: Possiamo migliorare leggibilità e chiarezza del codice suddividendo le responsabilità in funzioni più piccole e descrivendo chiaramente l’intento di ciascuna parte dell’algoritmo.
Gestione degli input non validi: Possiamo aggiungere controlli aggiuntivi per gestire input non validi, ad esempio se l’utente inserisce caratteri non numerici anziché numeri.
Ecco un esempio di implementazione con ottimizzazioni:
import math
def is_prime(numero):
if numero <= 1:
return False
elif numero == 2:
return True
elif numero % 2 == 0:
return False
else:
limite = int(math.sqrt(numero)) + 1
for div in range(3, limite, 2):
if numero % div == 0:
return False
return True
numero = int(input('Inserire un numero: '))
if is_prime(numero):
print('Numero primo!')
else:
print('Il numero non è primo!')
Nella funzione is_prime, sono state apportate diverse ottimizzazioni per migliorare l’efficienza e la chiarezza dell’algoritmo per determinare se un numero è primo:
Controllo se il numero è minore o uguale a 1: Il primo controllo verifica se il numero è minore o uguale a 1. In tal caso, restituisce False poiché i numeri primi sono definiti come numeri naturali maggiori di 1.
Controllo se il numero è uguale a 2: Successivamente, controlla se il numero è uguale a 2. Se sì, restituisce True perché 2 è il primo numero primo.
Controllo se il numero è pari: Se il numero è pari diverso da 2, viene restituito False poiché i numeri pari (ad eccezione del 2) non possono essere primi.
Calcolo del limite della ricerca dei divisori: Per ottimizzare la ricerca dei divisori, il limite viene calcolato come la radice quadrata del numero (math.sqrt(numero)), arrotondata per eccesso e incrementata di 1. Questo perché se un numero ha un divisore maggiore della sua radice quadrata, avrà anche un divisore minore della sua radice quadrata.
Iterazione sui divisori dispari: Il ciclo for itera sui divisori dispari a partire da 3 fino al limite calcolato, incrementando di 2 ad ogni passaggio. Questo perché abbiamo già escluso i numeri pari diversi da 2 come potenziali divisori.
Controllo dei divisori: Durante l’iterazione, viene controllato se il numero è divisibile per il divisore corrente. Se sì, viene restituito False poiché il numero non è primo.
Restituzione del risultato: Se il ciclo termina senza trovare divisori, il numero è primo e viene restituito True.
Queste ottimizzazioni riducono il numero di iterazioni necessarie per determinare se un numero è primo, rendendo l’algoritmo più efficiente e veloce, soprattutto per numeri grandi.
Migliora le tue capacità di programmazione Python seguendo i nostri corsi in diretta!
Se stai pensando di iscriverti ad un corso in diretta su Python, ecco alcuni suggerimenti per esplorare al meglio questa opportunità:
Apprendimento Interattivo: I corsi in diretta offrono un’esperienza di apprendimento interattiva, che ti permette di interagire direttamente con l’istruttore e gli altri partecipanti. Questo può favorire un apprendimento più rapido e approfondito.
Guida Esperta: I corsi in diretta sono condotti da istruttori esperti che possono guidarti attraverso i concetti chiave e rispondere alle tue domande in tempo reale. Questo ti permette di ottenere una comprensione più approfondita dei concetti e delle best practices di programmazione Python.
Feedback Personalizzato: Durante il corso, avrai l’opportunità di ricevere feedback personalizzato sull’avanzamento del tuo apprendimento e sui tuoi progetti. Questo può aiutarti a identificare e superare le tue sfide specifiche di apprendimento.
Networking: Partecipare ad un corso in diretta ti offre l’opportunità di connetterti con altri studenti e professionisti del settore. Questo può portare a collaborazioni future, opportunità di mentoring e sviluppo di una rete professionale preziosa.
Progetti Pratici: I corsi in diretta spesso includono progetti pratici che ti consentono di applicare ciò che hai imparato in situazioni reali. Questi progetti ti aiutano a sviluppare competenze pratiche e a costruire un portfolio di lavoro.
Aggiornamenti Continui: Python è un linguaggio di programmazione in continua evoluzione. Partecipare ad un corso in diretta ti consente di rimanere aggiornato sulle ultime novità del linguaggio e sulle best practices di sviluppo.
Commenti recenti