# Modulo Python random: panoramica delle funzioni

Il modulo Python random mette a tua disposizione una gran varietà di funzioni per la **generazione di numeri casuali** in diversi formati, dai numeri interi ai numeri a virgola mobile, fino alla selezione di elementi dalle liste.

## Che cos’è il modulo Python random?

Il modulo Python random è una libreria integrata che ti permette di generare numeri casuali ed eseguire operazioni basate sulla casualità nei tuoi programmi. Esso comprende diverse funzioni per la **generazione di numeri pseudo-casuali**, che puoi utilizzare in molte applicazioni, dalla simulazione fino allo sviluppo di giochi, nonché per la criptografia.

Una caratteristica importante del modulo random è la sua ripetibilità. Definendo un valore iniziale o **seed** è possibile rendere riproducibile la generazione casuale. Questa possibilità è molto utile per eseguire test, esperimenti e simulazioni in cui servono dati casuali ma coerenti.

## Lista delle funzioni del modulo random

Il modulo Python random contiene diversi metodi per **la generazione e l’elaborazione di numeri casuali**. La tabella seguente mostra una panoramica delle funzioni e delle loro caratteristiche:

<table>
  <thead>
    <tr>
      <th>Nome funzione</th>
      <th>Descrizione</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>`seed(a=None, version=2)`</td>
      <td>Definisce il valore iniziale (seed) per il generatore di numeri casuali.</td>
    </tr>
    <tr>
      <td>`getstate()`</td>
      <td>Restituisce lo stato aggiornato del generatore di numeri casuali come oggetto.</td>
    </tr>
    <tr>
      <td>`setstate(state)`</td>
      <td>Resetta lo stato del generatore di numeri casuali per mezzo di un oggetto di stato.</td>
    </tr>
    <tr>
      <td>`getrandbits(k)`</td>
      <td>Restituisce un numero intero con k bit.</td>
    </tr>
    <tr>
      <td>`randrange(start, stop, step)`</td>
      <td>Genera un numero intero casuale scelto nell’intervallo indicato.</td>
    </tr>
    <tr>
      <td>`randint(a, b)`</td>
      <td>Restituisce un numero intero casuale nell’intervallo indicato.</td>
    </tr>
    <tr>
      <td>`choice(seq)`</td>
      <td>Restituisce un elemento casuale scelto nella sequenza indicata.</td>
    </tr>
    <tr>
      <td>`choices(population, weights=None, *, cum_weights=None, k=1)`</td>
      <td>Crea una lista con k elementi scelti casualmente nella popolazione; le probabilità possono essere indicate tra le opzioni.</td>
    </tr>
    <tr>
      <td>`sample(k, population)`</td>
      <td>Genera una lista con k elementi scelti casualmente nella popolazione, senza duplicati.</td>
    </tr>
    <tr>
      <td>`shuffle(x)`</td>
      <td>Rimescola gli elementi di una lista mettendoli in ordine casuale.</td>
    </tr>
    <tr>
      <td>`random()`</td>
      <td>Restituisce un numero a virgola mobile casuale compreso fra 0 e 1.</td>
    </tr>
    <tr>
      <td>`uniform(a, b)`</td>
      <td>Restituisce un numero a virgola mobile casuale nell’intervallo indicato, compresi i valori limite.</td>
    </tr>
    <tr>
      <td>`triangular(low, high, mode)`</td>
      <td>Genera un numero a virgola mobile casuale nell’intervallo di distribuzione triangolare.</td>
    </tr>
    <tr>
      <td>`betavariate(alpha, beta)`</td>
      <td>Restituisce un numero a virgola mobile casuale scelto in una distribuzione beta.</td>
    </tr>
    <tr>
      <td>`expovariate(lambd)`</td>
      <td>Restituisce un numero a virgola mobile casuale scelto in una distribuzione esponenziale.</td>
    </tr>
    <tr>
      <td>`gammavariate(alpha, beta)`</td>
      <td>Genera un numero a virgola mobile casuale scelto in una distribuzione gamma.</td>
    </tr>
    <tr>
      <td>`gauss(mu, sigma)`</td>
      <td>Restituisce un numero a virgola mobile casuale scelto in una distribuzione gaussiana.</td>
    </tr>
    <tr>
      <td>`lognormvariate(mu, sigma)`</td>
      <td>Genera un numero a virgola mobile casuale scelto in una distribuzione normale logaritmica.</td>
    </tr>
    <tr>
      <td>`normalvariate(mu, sigma)`</td>
      <td>Restituisce un numero a virgola mobile casuale scelto in una distribuzione normale.</td>
    </tr>
    <tr>
      <td>`vonmisesvariate(mu, kappa)`</td>
      <td>Restituisce un numero a virgola mobile casuale scelto in una distribuzione di von Mises.</td>
    </tr>
    <tr>
      <td>`paretovariate(alpha)`</td>
      <td>Restituisce un numero a virgola mobile casuale scelto in una distribuzione di Pareto.</td>
    </tr>
    <tr>
      <td>`weibullvariate(alpha, beta)`</td>
      <td>Restituisce un numero a virgola mobile casuale scelto in una distribuzione di Weibull.</td>
    </tr>
  </tbody>
</table>

## Selezione casuale di elementi in una lista

Se vorresti selezionare più elementi casuali in una lista, puoi utilizzare la funzione `choices(seq, k=n)` del modulo Python random, dove `n` è il numero di elementi casuali desiderati.

```python
import random
# A list of elements
my_list = ['Apple', 'Banana', 'Orange', 'Strawberry', 'Cherry']
# Randomly selecting an element from the list
random_elements = random.choices(my_list, k=3)
print("Randomly selected elements:", random_element)
```

In questo caso utilizziamo la funzione `choices()` per selezionare tre elementi casuali nella lista `my_list`. I risultati sono restituiti sotto forma di lista composta da tre elementi casuali.

## Mescolare una lista

La funzione `shuffle()` mette in ordine casuale gli elementi delle [liste in Python](https://www.ionos.it/digitalguide/siti-web/programmazione-del-sito-web/liste-in-python/).

```python
import random
# A list of elements
my_list = ['Apple', 'Banana', 'Orange', 'Strawberry', 'Cherry']
# Shuffle the elements in the list
random.shuffle(my_list)
print("Shuffled list:", my_list) # Example Output: Shuffled list: ['Strawberry', 'Banana', 'Apple', 'Cherry', 'Orange']
```

Ricorda che `shuffle()` modifica la lista stessa e non ne restituisce una nuova. Dopo l’uso di `shuffle()`, la lista originale si presenta con un ordine casuale.

## Definizione di un seed

Se utilizzi la funzione `random.seed()` del modulo Python random per **definire un valore seed specifico**, il generatore di numeri casuali viene avviato e genera numeri casuali in base a questo seed. In pratica, impostando lo stesso valore seed in un momento successivo si ottiene la generazione dello stesso insieme di numeri casuali nella tua applicazione.

```python
import random
# Setting the seed value to 42
random.seed(42)
# Generating random numbers
print(random.random())  # Example output: 0.6394267984578837
print(random.random())  # Example output: 0.025010755222666936
# Resetting the seed value to 42
random.seed(42)
# Generating random numbers again
print(random.random())  # Example output: 0.6394267984578837 (identical to the previous value)
print(random.random())  # Example output: 0.025010755222666936 (identical to the previous value)
```

Dopo aver impostato il valore seed, vengono generati ed emessi i numeri casuali. Quindi, impostando il seed **sullo stesso valore**, vengono generati nuovamente gli stessi numeri casuali. Nel nostro esempio, il seed ha valore 42. In questo modo i numeri casuali sono riproducibili utilizzando lo stesso valore seed.


This is a markdown version of: [https://www.ionos.it/digitalguide/siti-web/programmazione-del-sito-web/python-random/](https://www.ionos.it/digitalguide/siti-web/programmazione-del-sito-web/python-random/) for AI/LLM consumption.