Numeri random in Python

Numeri random in Python

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.

random

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:

from random import random

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:

from random 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.

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

Tuple in Python

Tuple in Python

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.

Facciamo quindi un primo esempio di tupla:

giorni=('lunedì', 'martedì', 'mercoledì', 'giovedì', 'venerdì', 'sabato', 'domenica')

Al contrario delle liste, in questo caso non posso riassegnare dei valori.

Quindi ad esempio, questa operazione non è consentita:

giorni[1]='Mar'

Infatti se provate voi stessi, noterete che vi restituirà errore.

I vantaggi nell’uso delle tuple rispetto alle liste consiste in un tempo di elaborazione più veloce e in uno spazio di memoria inferiore.


Conversione di una tupla ad una lista, funzioni list e tuple in Python

Per poter modificare una tupla allora si può convertirla in lista, apportare delle modifiche e quindi riconvertirla in tupla.

Ecco quindi un semplice esempio:

voti=(4,6,8,9)

v=list(voti)

v[0]=6

voti=tuple(v)

print(v[0])


Tuple in Python con un singolo elemento

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à.

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

If e liste in Pyhton

If e liste in Pyhton

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.

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

Liste in Python

Liste in Python

Le liste in Python sono una serie ordinata di valori identificati da un indice.

Quindi una lista è un dato composto che aggrega dei valori di qualsiasi tipo, racchiusi tra una coppia di parentesi quadre e separati da una virgola.

I valori che fanno parte di una lista si chiamano elementi e possono essere numeri o stringhe.

Esempi di liste in Python

Facciamo quindi degli esempi di liste in Python.

Creiamo una lista di nome voti che contiene i valori numerici da 6 a 9 e anche una stringa, ad esempio Ottimo.

voti = [6,7,8,9,‘Ottimo’]

Quindi, come detto prima, i valori possono essere di tipo diverso.


Facciamo un altro esempio di una lista che contiene valori dello stesso tipo.

Creiamo dunque una lista di nome stagioni, nella quale memorizziamo le stagioni dell’anno.

Dopo stampiamo la lista con la funzione print.

stagioni = [‘Primavera’, ‘Estate’, ‘Autunno’, ‘Inverno’]

print(stagioni)

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!

corsi Python

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.

Posizione dell’elemento nella lista con il metodo index

Si può conoscere la posizione di un elemento nella lista utilizzando il metodo index.

voti = [8,7,5,10]
c = voti.index(5)
print(c)

In questo esempio si stamperà 2, cioè la posizione dell’indice dell’elemento con valore 5, partendo da sinistra. Ricordate che l’indice parte da 0.


Nella prossima lezione parleremo ancora delle liste in Python e come utilizzarle con le strutture condizionali e iterative.

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 primi in Python

Numeri primi in Python

Realizziamo un programma sui numeri primi in Python utilizzando le strutture iterative studiate finora, al fine di approfondirle.

Ricordiamo dunque la definizione di numero primo:

Un numero è primo quando ha solo due divisori: uno e se stesso.

Quindi è primo ciascun numero naturale maggiore di 1 che sia divisibile solamente per 1 e per sé stesso.

La successione dei numeri primi comincia con 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, …

Algoritmo per i numeri primi in Python

Abbiamo già realizzato questo algoritmo in linguaggio C: numero primo in C. Inoltre, anche con Algobuild, abbiamo affrontato lo stesso argomento: numeri primi da 1 a 100 con Algobuild e con Scratch: numeri primi da 1 a 100 con Scratch.

Dato in input un numero verificare che sia primo.

Descrizione dell’algoritmo:

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. Dopo ogni iterazione, incrementiamo div di uno.
  6. 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:

  1. 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.
  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.
  3. 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.
  4. 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:

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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.
  6. 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.
  7. 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!

corsi Python

Se stai pensando di iscriverti ad un corso in diretta su Python, ecco alcuni suggerimenti per esplorare al meglio questa opportunità:

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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.
  6. 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.

Ancora indeciso? Contattaci per maggiori informazioni: info@insegnarecoding.com

Alcuni link utili

Corso in diretta su Python

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