018 Python3 – Utilizzare notazione scientifica per esprimere numeri a virgola mobile

11 Marzo, 2023 (23:04) | Python | By: sargonsei

#
# 018 Python3 - Utilizzare notazione scientifica per esprimere numeri a virgola mobile
# 
# Questo script acquisisce UN numero a virgola mobile e lo trasforma nel corrispondente numero espresso con la Notazione Esponenziale
# dove il numero significativo è un numero intero, e l'ordine di grandezza è calcolato di conseguenza.
#
# Per avviare questo script:
# 1) Salvarlo nella cartella di lavoro, con nome ed estensione che si preferisce (Estensioni comuni: .py .pyw .pyc .pyo .pyd )
#    In questo caso specifico, io l'ho salvato come "018-NumeriVirgolaMobile.py"
# 2) Aprire un terminale nella cartella di lavoro 
# 3) Impartire il comando: "python3 018-NumeriVirgolaMobile.py".
#
NUMERO = ["Numero reale ? ", 0, 0, 0] # Definisce variabile contenente: ["Descrizione", "Numero reale", Num.Significativo, OrdineDiGrandezza]
def ACQUISIZIONE(X):    # Inizio definizione funzione ACQUISIZIONE()
    try:           # Inizio istruzioni soggette a gestione errore
        X_ = input(X)   # Acquisisce il numero e lo mette in una variabile stringa
        XX = float(X_)  # Mette il numero in una variabile a virgola mobile
        if XX == int(XX):      # Se le cifre dopo la virgola sono degli zeri, esegue la riga seguente
            X_ = str(int(XX))  # Mette nella variabile stringa X_ il numero acquisito, privo di cifre dopo la virgola 
    except ValueError:  # Inizio istruzioni da eseguire in caso di errore 'ValueError'
        print("ERRORE!!! Occorre inserire esclusivamente numeri, e con la notazione anglosassone (la parte intera è separata dalla parte decimale mediante il punto '.').")
        X_ = ACQUISIZIONE(X)   # Chiama la funzione ACQUISIZIONE() previo trasferimento del contenuto della variabile X.
    return(X_) # Restituisce il valore contenuto nella variabile stringa X_

def CONVERTE(NUM_STRINGA):    # Inizio definizione funzione CONVERTE()
    LUNG_NUM = len(NUM_STRINGA)    # Trova la lunghezza del numero
    PUNTO = NUM_STRINGA.count(".") # Mette nella variabile PUNTO il numero di caratteri "." contenuti nella variabile NUM_STRINGA
    if PUNTO == 0: # Se il numero inserito è un numero intero, esegue le 2 righe seguenti
        GRANDEZZA = 0   # Calcola "Ordine di GRANDEZZA" quando il numero SIGNIFICATIVO è un numero intero
        SIGNIFICATIVO = NUM_STRINGA  # Trova il corrispondente "Numero SIGNIFICATIVO" intero.
    else:               # Se il numero inserito NON è un numero intero, esegue le 3 righe seguenti
        POS_PUNTO = NUM_STRINGA.index(".") # Trova la posizione del punto decimale
        GRANDEZZA = LUNG_NUM - POS_PUNTO - 1   # Calcola "Ordine di GRANDEZZA" quando il numero SIGNIFICATIVO diventa un numero intero.
        SIGNIFICATIVO = NUM_STRINGA.replace(".", "") # Trova il corrispondente "Numero SIGNIFICATIVO" intero.
    return(SIGNIFICATIVO, GRANDEZZA) # Restituisce il numero SIGNIFICATIVO ed il numero di GRANDEZZA della variabile a virgola mobile iniziale

print("Inserimento numeri a virgola mobile con notazione anglosassone (la virgola è il punto) .")
NUMERO[1] = ACQUISIZIONE(NUMERO[0])        # Chiama la funzione ACQUISIZIONE() previo trasferimento del contenuto della variabile NUMERO[0].
NUMERO[2], NUMERO[3] = CONVERTE(NUMERO[1]) # Chiama la funzione CONVERTE() previo trasferimento del contenuto della variabile NUMERO[1].

RISULTATO = f"Il numero reale {NUMERO[1]} equivale a {NUMERO[2]}×10^({-NUMERO[3]})"
print(RISULTATO)
input("Per poter proseguire, premere il tasto [Invio]")
#