CodeGym /Corsi /Python SELF IT /Lavorare con i tipi numerici

Lavorare con i tipi numerici

Python SELF IT
Livello 5 , Lezione 3
Disponibile

3.1 Tipi numerici: int, float, complex

Python ha diversi tipi numerici, ciascuno dei quali è adatto per varie attività e elaborazione dati. Abbiamo già menzionato i tipi di dati int, float, complex, oltre ai tipi booleani bool, che sono una sottoclasse dei numeri interi. Ora analizziamo ciascuno di questi tipi più dettagliatamente.

int (Numeri interi):

Questo è forse il tipo numerico più usato in Python. I numeri interi possono essere positivi o negativi e non hanno cifre decimali. Python supporta precisione arbitraria, ciò significa che praticamente non ci sono restrizioni sulla dimensione dei numeri che puoi gestire, tranne per i limiti di memoria della tua macchina.

float (Numeri a virgola mobile):

Questi numeri sono usati per rappresentare numeri reali e possono includere punti decimali. Python implementa i numeri a virgola mobile in accordo con lo standard IEEE 754 double-precision, che fornisce una precisione di circa 15 cifre decimali.

complex (Numeri complessi):

I numeri complessi hanno una parte reale e una parte immaginaria. Entrambe sono rappresentate come numeri a virgola mobile. In Python, per indicare la parte immaginaria si utilizza il suffisso j o J. Ad esempio, si può creare un numero complesso così:

complex_number = 3 + 5j

bool (Valori booleani):

In Python, True e False sono versioni specializzate dei numeri interi e funzionano come 1 e 0 rispettivamente. Ciò permette di utilizzarli in operazioni aritmetiche e altre espressioni matematiche.

Operazioni aritmetiche:

Python supporta tutte le principali operazioni aritmetiche, inclusi somma, sottrazione, moltiplicazione, divisione, divisione intera, resto della divisione ed elevazione a potenza. Per esempio:

  • Somma: 3 + 2
  • Sottrazione: 5 - 2
  • Moltiplicazione: 2 * 3
  • Divisione: 7 / 2
  • Divisione intera: 7 // 2
  • Resto della divisione: 7 % 2
  • Elevazione a potenza: 2 ** 3

Conversione dei tipi:

Abbiamo già parlato della conversione (o casting) dei tipi. Puoi convertire i numeri da un tipo all'altro utilizzando funzioni di casting, come int(), float() e complex().

Alcuni aspetti della conversione dei tipi numerici li abbiamo già considerati, altri li vedremo più dettagliatamente nelle prossime lezioni.

3.2 Numeri pseudocasuali

A volte un programmatore si trova di fronte a compiti apparentemente semplici: "scegli un film a caso per la serata da una determinata lista", "scegli il vincitore della lotteria", "mescola una playlist scuotendo lo smartphone", "scegli un numero casuale per cifrare un messaggio". Ogni volta emerge una domanda molto naturale: come ottenere questo numero casuale?

Ottenere un vero "numero casuale" è piuttosto difficile. Fino al punto che nei computer vengono integrati speciali coprocessori matematici, che possono generare tali numeri soddisfacendo tutti i requisiti di "vera casualità".

Pertanto i programmatori hanno ideato la propria soluzione – numeri pseudocasuali. I numeri pseudocasuali sono una sequenza di numeri che a prima vista sembrano casuali, ma uno specialista potrebbe trovare determinate regolarità con un'analisi dettagliata. Per la cifratura di documenti segreti tali numeri non vanno bene, ma per simulare il lancio dei dadi in un gioco, sì.

Ci sono molti algoritmi per generare sequenze di numeri pseudocasuali e quasi tutti questi generano il numero successivo in base al precedente e su alcuni numeri ausiliari.

Ad esempio, questo programma stamperà a video 1000 numeri non ripetuti:


a = 41
c = 11119
m = 11113
seed = 1
                   

def get_next_random():
    global seed
    seed = (a * seed + c) % m
    return seed
                   
for t in range(1000):
    x = get_next_random()
    print(x)              

Tra l'altro, non parliamo di numeri pseudocasuali, ma proprio di sequenze di tali numeri. Dato che guardando un solo numero non si può capire se sia casuale o no.

Un numero casuale si può ottenere in vari modi:

def get_random_number():
    return 4  # questo è sicuramente un numero casuale (l'ho scelto con i dadi), vedi "Battuta sui dadi"               

3.3 Libreria random

In Python c'è una libreria random integrata, con la quale puoi divertirti a lavorare. Come avrai probabilmente già intuito dal suo nome, con questa libreria puoi generare numeri [pseudo]casuali.

La libreria random, anche se integrata, è comunque una libreria separata, quindi prima di usarla, dobbiamo includerla nel nostro codice. Questo si fa con la parola chiave import. Esempio:


import random 

La libreria random ha molti metodi interessanti, ma oggi ne conosceremo solo due: metodo random() e metodo randint(). Svolgono compiti simili, ma diversi:

Metodo random.random():

Questo metodo restituisce un numero casuale a virgola mobile tra 0.0 e 1.0. I numeri sono generati uniformemente in questo intervallo. Questo significa che ogni numero all'interno dell'intervallo ha la stessa probabilità di essere scelto.


import random 

probability = random.random()
print("Probabilità casuale:", probability)               

Metodo random.randint(a, b):

Questa funzione restituisce un numero intero casuale nell'intervallo da a a b inclusi. A differenza di random.random(), che restituisce un numero casuale a virgola mobile nell'intervallo da 0 a 1, randint() viene usato quando bisogna scegliere un numero intero. Ad esempio, random.randint(1, 10) può restituire qualsiasi numero intero da 1 a 10, inclusi entrambi i valori finali.


import random

dice_roll = random.randint(1, 6)  # Simulazione del lancio di un dado
print("Numero uscito:", dice_roll)               

Questi sono metodi molto utili e interessanti, quindi usateli in buona salute.

3.4 Libreria math

Dato che siamo in tema, lasciate che vi presenti un'altra libreria interessante. Questa è la libreria math. Contiene funzioni e costanti matematiche di base, come i numeri π ed e.

E proprio come la libreria random, deve essere importata prima di poter essere utilizzata:


import math 

Ecco una tabella con le principali funzioni e costanti della libreria math in Python:

Funzione/Costante Descrizione
math.pi Costante π, approssimativamente pari a 3.14159
math.e Base del logaritmo naturale, approssimativamente pari a 2.71828
math.sqrt(x) Restituisce la radice quadrata di x
math.exp(x) Restituisce e elevato alla potenza x
math.log(x[, base]) Restituisce il logaritmo di x con base base, se base è specificata; altrimenti restituisce il logaritmo naturale.
math.cos(x) Restituisce il coseno di x, dove x è espresso in radianti
math.sin(x) Restituisce il seno di x, dove x è espresso in radianti
math.tan(x) Restituisce la tangente di x, dove x è espresso in radianti
math.ceil(x) Arrotonda il numero verso l'alto al numero intero più vicino
math.floor(x) Arrotonda il numero verso il basso al numero intero più vicino
math.factorial(x) Restituisce il fattoriale di x

Anche se non ami particolarmente la matematica e non prevedi di usare queste funzioni nei prossimi 10 anni, qui ci sono almeno tre funzioni molto utili:

  • sqrt() — radice quadrata di un numero
  • ceil() — arrotondamento verso l'alto al numero intero più vicino
  • floor() — arrotondamento verso il basso al numero intero più vicino

Esempi:


import math

number = 9.7
rounded_up = math.ceil(number)  # Arrotonda verso l'alto, risultato 10 
rounded_down = math.floor(number)  # Arrotonda verso il basso, risultato 9 
            
print("Numero arrotondato verso l'alto:", rounded_up)
print("Numero arrotondato verso il basso:", rounded_down)              
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION