019 Python3 – Script Calcolatrice (+ – x : Potenza Radice) + Moduli + Funzioni + Gestione Errori/Eccezioni

19 Marzo, 2023 (08:23) | Python | By: sargonsei

01) Cose da sapere prima di procedere
In questa pagina si ripropone il tema della calcolatrice in grado di fare: Addizioni, Sottrazioni, Moltiplicazioni, Divisioni, Elevazioni a potenza, Radice. A differenza della calcolatrice vista in precedenza, qui si propone il tema della suddivisione del programma in MODULI: il modulo principale (contenente il programma principale, che, all’occorrenza, “chiama” FUNZIONI e MODULI), il modulo di acquisizione (contenente le istruzioni aventi il compito di acquisire i dati) e due ulteriori moduli che si dividono il compito di contenere le istruzioni per calcolare il risultato delle varie operazioni).
In effetti, sarebbe stato possibile mettere tutte le istruzioni in un unico script; tuttavia, suddividere un programma in moduli distinti permette a più persone di lavorare in autonomia sulla parte del codice destinato ad assolvere un numero predeterminato di funzioni senza intralciarsi a vicenda, limita enormemente la probabilità che si verifichino errori accidentali, e rende più semplice sia la stesura, sia la rilettura, sia la correzione, sia l’aggiornamento del codice.
Il numero ed il nome dei singoli moduli, può essere deciso arbitrariamente dal programmatore in base alle proprie esigenze, purché nessun nome sia identico ad un nome già assegnato ad una parola-chiave di Python 3.
Ogni modulo, quantunque presente e funzionante, può essere utilizzato solo se precedentemente importato. Il comando per importare i moduli è
import Nome_Del_Modulo # Importa il modulo [Nome_Del_Modulo]
Per praticità, il codice è stato scritto supponendo che tutti i moduli si trovino nella medesima cartella in cui si trova il modulo principale, e si consiglia di fare altrettanto. E’ altresì possibile scrivere il codice prevedendo di mettere i singoli moduli in cartelle diverse da quella in cui si trova il programma principale, ma ciò implica che l’importazione e la chiamata di moduli avvenga indicando non solo il nome del modulo chiamato, ma anche il percorso, e che il percorso sia indicato secondo la logica prevista dal Sistema Operativo, complicando così le cose e rendendo i programmi in grado di funzionare solo su determinati Sistemi Operativi.

02) Calcolatrice – Il modulo contenente: programma principale, la funzione

# 
# 019 Python3 - Script Calcolatrice (+ - x : Potenza Radice)+ Moduli + Funzioni + Gestione Errori/Eccezioni
# Primo addendo + Secondo addendo = Somma
# Minuendo - Sottraendo = Differenza
# Primo fattore x Secondo fattore = Prodotto
# Dividendo : Divisore = Quoto = Quoziente e Resto
# Base ^ Esponente = Potenza
# Radicando ^ (1/Indice) = Radice
#
# Gestione errori/eccezioni in corrispondenza delle funzioni ACQUISIZIONE() e DIVISIONE()
# tramite 'try' ed 'except'
#
# Per avviare questo script:
# 1) Salvarlo nella cartella di lavoro, con nome CalcolatriceMain.py
# 2) Assicurarsi che la cartella di lavoro, oltre a questo script, contenga anche gli script contenenti le funzioni chiamate.
# 3) Aprire un terminale nella cartella di lavoro 
# 4) Impartire il comando: [python3 CalcolatriceMain.py]

# Inizio definizione funzioni
def NUMERI(SCELTA): # Inizio definizione funzione NUMERI()
    NUM_1 = ["STOP", "Primo addendo: ", "Minuendo: ", "Moltiplicando: ", "Dividendo: ", "Base: ", "Radicando: ", "In Costruzione"]
    NUM_2 = ["STOP", "Secondo addendo: ", "Sottraendo: ", "Moltiplicatore: ", "Divisore: ", "Esponente: ", "Indice: ", "Finire"]
    NUM1 = ["Primo Numero: ", "0.0", 0, 0] # Definisce la variabile-Lista NUM1 contenente ["Descrizione", "num_reale", num_significativo, num_grandezza]
    NUM2 = ["Secondo Numero: ", "0.0", 0, 0] # Definisce la variabile-Lista NUM2 contenente ["Descrizione", "num_reale", num_significativo, num_grandezza]
    SCELTA = int(SCELTA) # Converte il contenuto della variabile SCELTA in un numero intero
    NUM1[0] = NUM_1[SCELTA]
    NUM1[1] = ModACQUISIZIONE.ACQUISIZIONE(NUM_1[SCELTA]) # Chiama la funzione [ACQUISIZIONE] contenuta nel modulo [ModACQUISIZIONE]
    #    ^ Il risultato di ritorno, verrà messo nella Variabile Lista NUM2[1]
    NUM1[2], NUM1[3] = ModACQUISIZIONE.CONVERTE(NUM1[1]) # Chiama la funzione [CONVERTE] contenuta nel modulo [ModACQUISIZIONE]
    #    ^ Il risultato di ritorno, verrà messo nella Variabile-Lista NUM1[2] e NUM1[3]
    #
    NUM2[0] = NUM_2[SCELTA]
    NUM2[1] = ModACQUISIZIONE.ACQUISIZIONE(NUM_2[SCELTA]) # Chiama la funzione [ACQUISIZIONE] contenuta nel modulo [ModACQUISIZIONE]
    #    ^ Il risultato di ritorno, verrà messo nella Variabile Lista NUM1[2] e                                         
    NUM2[2], NUM2[3] = ModACQUISIZIONE.CONVERTE(NUM2[1]) # Chiama la funzione [CONVERTE] contenuta nel modulo [ModACQUISIZIONE]
    #    ^ Il risultato di ritorno, verrà messo nella Variabile-Lista NUM2[2] e NUM2[3]
    return(NUM1, NUM2)

def LAVORI_IN_CORSO(X): # Inizio definizione funzione LAVORI_IN_CORSO()
    if X == "7":
        MESSAGGIO = "Hai deliberatamente scelto di digitare la scelta 7, che ha come unico scopo di visualizzare questo messaggio."
    else:
        MESSAGGIO = "L'opzione "+X+" non è al momento selezionabile; ci scusiamo per il disagio."
    return(MESSAGGIO)
# Fine definizione funzioni

# Inizio importazione moduli
import ModACQUISIZIONE                # Importa il modulo [ModACQUISIZIONE]
import ModSomSotMolt                  # Importa il modulo [ModSomSotMolt]
import ModDivPotRad                   # Importa il modulo [ModDivPotRad]
# Fine importazione moduli

# Inizio definizione variabili
MENU = """Operazioni possibili:
0) Chiudere questo script.
1) Addizione
2) Sottrazione
3) Moltiplicazione
4) Divisione
5) Elevazione a potenza
6) Estrazione radice
7) Funzione in costruzione
"""
NUM_1 = ["STOP", "Primo addendo: ", "Minuendo: ", "Moltiplicando: ", "Dividendo: ", "Base: ", "Radicando: ", "In Costruzione"]
NUM_2 = ["STOP", "Secondo addendo: ", "Sottraendo: ", "Moltiplicatore: ", "Divisore: ", "Esponente: ", "Indice: ", "Finire"]
NUM_3 = ["STOP", "Somma: ", "Differenza: ", "Prodotto: ", "Quoto: ", "_Quoziente: ", "_Resto: ", "Finire"]
NUM1 = ["Primo Numero: ", "0.0", 0, 0] # Definisce la variabile-Lista NUM1 contenente ["Descrizione", "num_reale", num_significativo, num_grandezza]
NUM2 = ["Secondo Numero: ", "0.0", 0, 0] # Definisce la variabile-Lista NUM2 contenente ["Descrizione", "num_reale", num_significativo, num_grandezza]
NUM3 = ["Calcolato: ", "0.0", 0, 0] # Definisce la variabile-Lista NUM3 contenente ["Descrizione", "num_reale", num_significativo, num_grandezza]
RISULTATO = "RISULTATO" # Definisce la variabile alfanumerica RISULTATO
# Fine definizione variabili

while True:
    print(MENU)
    SCELTA = input("Per scegliere, inserire il numero corrispondente. ")
    if SCELTA == "0":
        print("Hai digitato la scelta 0, quindi questo script si ferma.")
        break # Interrompe il ciclo 'while'

    elif SCELTA == "1":
        print("Hai digitato la scelta 1, quindi verrà eseguita la somma fra 2 numeri.")

        NUM1, NUM2 = NUMERI(SCELTA) # Chiama la funzione NUMERI() previo trasferimento del contenuto della variabile SCELTA
        # Il risultato viene messo nelle variabili-Lista NUM1 e NUM2

        NUM3 = ModSomSotMolt.SOMMA(NUM1, NUM2) # Chiama la funzione SOMMA() contenuta nel modulo [ModSomSotMolt]
        # previo trasferimento del contenuto delle variabili-Lista NUM1 ed NUM2
        # Il risultato viene messo nella variabile-Lista NUM3

        RISULTATO = f"{NUM1[0]} {NUM1[1]} = {NUM1[2]}x10^({NUM1[3]})\n"
        RISULTATO = RISULTATO + f"{NUM2[0]} {NUM2[1]} = {NUM2[2]}x10^({NUM2[3]})\n"
        RISULTATO = RISULTATO + f"{NUM3[0]} {NUM3[1]} = {NUM3[2]}x10^({NUM3[3]}) = {NUM3[2] * 10 ** NUM3[3]}"

    elif SCELTA == "2":
        print("Hai digitato la scelta 2, quindi verrà eseguita la sottrazione fra 2 numeri.")

        NUM1, NUM2 = NUMERI(SCELTA) # Chiama la funzione NUMERI() previo trasferimento del contenuto della variabile SCELTA
        # Il risultato viene messo nelle variabili-Lista NUM1 e NUM2
        
        NUM3 = ModSomSotMolt.SOTTRAZIONE(NUM1, NUM2) # Chiama la funzione SOTTRAZIONE() contenuta nel modulo [ModSomSotMolt]
        # previo trasferimento del contenuto delle variabili-Lista NUM1 ed NUM2
        # Il risultato viene messo nella variabile NUM3

        RISULTATO = f"{NUM1[0]} {NUM1[1]} = {NUM1[2]}x10^({NUM1[3]})\n"
        RISULTATO = RISULTATO + f"{NUM2[0]} {NUM2[1]} = {NUM2[2]}x10^({NUM2[3]})\n"
        RISULTATO = RISULTATO + f"{NUM3[0]} {NUM3[1]} = {NUM3[2]}x10^({NUM3[3]}) = {NUM3[2] * 10 ** NUM3[3]}"

    elif SCELTA == "3":
        print("Hai digitato la scelta 3, quindi verrà eseguita la moltiplicazione fra 2 numeri.")

        NUM1, NUM2 = NUMERI(SCELTA) # Chiama la funzione NUMERI() previo trasferimento del contenuto della variabile SCELTA
        # Il risultato viene messo nelle variabili-Lista NUM1 e NUM2
        
        NUM3 = ModSomSotMolt.MOLTIPLICAZIONE(NUM1, NUM2) # Chiama la funzione MOLTIPLICAZIONE() contenuta nel modulo [ModSomSotMolt]
        # previo trasferimento del contenuto delle variabili-Lista NUM1 ed NUM2
        # Il risultato viene messo nella variabile-Lista NUM3

        RISULTATO = f"{NUM1[0]} {NUM1[1]} = {NUM1[2]}x10^({NUM1[3]})\n"
        RISULTATO = RISULTATO + f"{NUM2[0]} {NUM2[1]} = {NUM2[2]}x10^({NUM2[3]})\n"
        RISULTATO = RISULTATO + f"{NUM3[0]} {NUM3[1]} = {NUM3[2]}x10^({NUM3[3]}) = {NUM3[2] * 10 ** NUM3[3]}"

    elif SCELTA == "4":
        print("Hai digitato la scelta 4, quindi verrà eseguita la divisione fra 2 numeri.")

        NUM1, NUM2 = NUMERI(SCELTA) # Chiama la funzione NUMERI() previo trasferimento del contenuto della variabile SCELTA
        # Il risultato viene messo nelle variabili-Lista NUM1 e NUM2
        
        RISULTATO = "Risultato"
        RISULTATO = ModDivPotRad.DIVISIONE(NUM1, NUM2) # Chiama la funzione DIVISIONE() contenuta nel modulo [ModDivPotRad]
        # previo trasferimento del contenuto delle variabili-Lista NUM1 ed NUM2.
        # Il risultato viene messo nella variabile RISULTATO

        RISULTATO = f"{NUM1[0]} {NUM1[1]} = {NUM1[2]}x10^({NUM1[3]}) \n{NUM2[0]} {NUM2[1]} = {NUM2[2]}x10^({NUM2[3]})\n" + RISULTATO
        # RISULTATO = RISULTATO + f"\n{NUM3[0]} {NUM3[1]} = {NUM3[2]}x10^({NUM3[3]}) = {NUM3[2] * 10 ** NUM3[3]}"
        
    elif SCELTA == "5":
        print("Hai digitato la scelta 5, quindi verrà eseguita l'elevazione a potenza fra 2 numeri.")

        NUM1, NUM2 = NUMERI(SCELTA) # Chiama la funzione NUMERI() previo trasferimento del contenuto della variabile SCELTA
        # Il risultato viene messo nelle variabili-Lista NUM1 e NUM2
        
        NUM3 = ModDivPotRad.POTENZA(NUM1, NUM2) # Chiama la funzione POTENZA() contenuta nel modulo [ModDivPotRad]
        # previo trasferimento del contenuto delle variabili-Lista NUM1 ed NUM2.
        # Il risultato viene messo nella variabile-Lista NUM3

        RISULTATO = f"{NUM1[1]}^({NUM2[1]}) = {NUM3[1]}\n{NUM1[0]} {NUM1[1]}; "
        RISULTATO = RISULTATO + f"{NUM2[0]} {NUM2[1]}; "
        RISULTATO = RISULTATO + f"{NUM3[0]} {NUM3[1]}"
        
    elif SCELTA == "6":
        print("Hai digitato la scelta 6, quindi verrà eseguita la radice fra 2 numeri.")

        NUM1, NUM2 = NUMERI(SCELTA) # Chiama la funzione NUMERI() previo trasferimento del contenuto della variabile SCELTA
        # Il risultato viene messo nelle variabili-Lista NUM1 e NUM2
        
        NUM3 = ModDivPotRad.RADICE(NUM1, NUM2) # Chiama la funzione RADICE() contenuta nel modulo [ModDivPotRad]
        # previo trasferimento del contenuto delle variabili-Lista NUM1 ed NUM2.
        # Il risultato viene messo nella variabile-Lista NUM3

        RISULTATO = f"{NUM1[0]} {NUM1[1]}; "
        RISULTATO = RISULTATO + f"{NUM2[0]} {NUM2[1]}; "
        RISULTATO = RISULTATO + f"{NUM3[0]} {NUM3[1]}"
        
    elif SCELTA == "7":
        print("Hai digitato la scelta 7, quindi comparirà un messaggio che comunica che la funzione è in costruzione.")
        RISULTATO = LAVORI_IN_CORSO(SCELTA) # Lancia la funzione [LAVORI_IN_CORSO]

    else:
        print("La scelta " + SCELTA + " non è una scelta valida")
        continue # Ricomincia il ciclo 'while'
    # Fine del ciclo 'if', 'elif', 'else'
    print(f"\n{RISULTATO}\n")
    input("Per poter proseguire, premere il tasto [Invio]")
# Fine del ciclo 'while'
#

03) Calcolatrice – Modulo contenente le funzioni che si occupano di acquisire i dati da elaborare

# Inizio modulo da salvare col nome [ModACQUISIZIONE.py] nella cartella in cui si trova il modulo principale [CalcolatriceMain.py]
def ACQUISIZIONE(X):    # Inizio definizione funzione ACQUISIZIONE()
    try:           # Inizio istruzioni soggette a gestione errore
        XA = input(X)   # Acquisisce il numero e lo mette in una variabile stringa
        XN = float(XA)  # Mette il numero in una variabile a virgola mobile
        if XN == int(XN):      # Se le cifre dopo la virgola sono degli zeri, esegue la riga seguente
            XA = str(int(XN))  # Mette nella variabile stringa XA 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 '.').")
        XA = ACQUISIZIONE(X)   # Chiama la funzione ACQUISIZIONE() previo trasferimento del contenuto della variabile X.
    return(XA) # Restituisce il valore contenuto nella variabile stringa XA


def CONVERTE(NUM_STRINGA):    # Inizio definizione funzione CONVERTE()
    if float(NUM_STRINGA) == 0: # Se il numero da convertire contiene il numero 0, esegue la riga seguente
        return(0, 0)            # La funzione CONVERTE termina qui, restituendo i valori 0 e 0.
    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 = int(NUM_STRINGA) # Trova il corrispondente "Numero SIGNIFICATIVO" intero.
        while float(SIGNIFICATIVO / 10) == int(SIGNIFICATIVO / 10): # Finchè la condizione è verificata, esegue le righe seguenti
            SIGNIFICATIVO = int(SIGNIFICATIVO / 10) # Elimina lo zero finale dal numero SIGNIFICATIVO
            GRANDEZZA += 1                          # La variabile GRANDEZZA è incrementata di 1
        # Fine del ciclo While    
    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 = int(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


04) Calcolatrice – Modulo contenente le funzioni che si occupano di Somma + Sottrazione + Moltiplicazione

# Inizio modulo da salvare col nome [ModSomSotMolt.py] nella cartella in cui si trova il modulo principale [CalcolatriceMain.py]
def SOMMA(ADD1, ADD2): # Inizio definizione funzione SOMMA()
    SUM = ["Somma: ", "0.0", 0, 0] # Definisce la variabile-Lista SUM contenente ["Descrizione", "num_reale", num_significativo, num_grandezza]
    while ADD1[3] > ADD2[3]:   # Finchè l'ordine di grandezza del primo addendo è maggiore dell'ordine di grandezza del secondo addendo, esegue le 2 righe seguenti
        ADD1[2] *= 10          # Decuplica il numero significativo del primo addendo
        ADD1[3] -= 1           # Riduce di un'unità l'ordine di grandezza del primo addendo
    while ADD2[3] > ADD1[3]: # Finchè l'ordine di grandezza del secondo addendo è maggiore dell'ordine di grandezza del primo addendo, esegue le 2 righe seguenti
        ADD2[2] *= 10        # Decuplica il numero significativo del secondo addendo
        ADD2[3] -= 1         # Riduce di un'unità l'ordine di grandezza del secondo addendo
    # Ora entrambi gli addendi hanno il medesimo ordine di grandezza
    SUM[1] = str(float(ADD1[1]) + float(ADD2[1]))  # Calcola la somma dei 2 addendi
    SUM[2] = ADD1[2] + ADD2[2] # Calcola la somma dei numeri significativi dei due addendi
    SUM[3] = ADD1[3]           # Definisce l'ordine di grandezza della somma dei 2 addendi
    return(SUM) # La funzione SOMMA termina qui, restituendo i dati contenuti nella variabile-Lista SUM

def SOTTRAZIONE(MIN, SOT): # Inizio definizione funzione SOTTRAZIONE()
    DIFF = ["Differenza: ", "0.0", 0, 0] # Definisce la variabile-lista DIFF contenente "Descrizione", "num_reale", num_significativo, num_grandezza
    while MIN[3] > SOT[3]:   # Esegue le 2righe seguenti finchè l'ordine di grandezza del minuendo è maggiore dell'ordine di grandezza del sottraendo
        MIN[2] *= 10         # Decuplica il numero significativo del minuendo
        MIN[3] -= 1          # Riduce di un'unità l'ordine di grandezza del minuendo
    while SOT[3] > MIN[3]:  # Esegue le 2 righe seguenti finchè l'ordine di grandezza del sottraendo è maggiore dell'ordine di grandezza del minuendo
        SOT[2] *= 10        # Decuplica il numero significativo del sottraendo
        SOT[3] -= 1         # Riduce di un'unità l'ordine di grandezza del sottraendo
    # Ora MINUENDO e SOTTRAENDO hanno il medesimo ordine di grandezza
    DIFF[1] = str(float(MIN[1]) - float(SOT[1]))  # Calcola la differenza fra minuendo e sottraendo
    DIFF[2] = MIN[2] - SOT[2] # Calcola la differenza fra numeri significativi di minuendo e sottraendo
    DIFF[3] = MIN[3]           # Definisce l'ordine di grandezza della differenza dei 2 addendi
    return(DIFF) # La funzione SOTTRAZIONE termina qui, restituendo i dati contenuti nella variabile-Lista DIFF

def MOLTIPLICAZIONE(MOLTIPLICANDO, MOLTIPLICATORE): # Inizio definizione funzione MOLTIPLICAZIONE()
    PRO = ["Prodotto: ", "0.0", 0, 0] # Definisce la variabile-Lista PRO contenente ["Descrizione", "num_reale", num_significativo, num_grandezza]
    PRO[1] = str(float(MOLTIPLICANDO[1]) * float(MOLTIPLICATORE[1]))  # Calcola il prodotto dei 2 fattori
    PRO[2] = MOLTIPLICANDO[2] * MOLTIPLICATORE[2] # Calcola il prodotto dei numeri significativi dei due fattori
    PRO[3] = MOLTIPLICANDO[3] + MOLTIPLICATORE[3] # Definisce l'ordine di grandezza del prodotto dei 2 fattori
    return(PRO) # La funzione MOLTIPLICAZIONE termina qui, restituendo i dati contenuti nella variabile-Lista PRO

05) Calcolatrice – Modulo contenente le funzioni che si occupano della divisione + Elevazione a potenza + Radice.

# Inizio modulo da salvare col nome [ModDivPotRad.py] nella cartella in cui si trova il modulo principale [CalcolatriceMain.py]
def DIVISIONE(DIVIDENDO, DIVISORE): # Inizio definizione funzione DIVISIONE()
    QUOTO = ["Quoto: ", "0.0", 0, 0]    # Definisce la variabile-Lista QUOT contenente ["Descrizione", "num_reale", num_significativo, num_grandezza]
    QUOZ = ["Quoziente: ", "0.0", 0, 0] # Definisce la variabile-Lista QUOZ contenente ["Descrizione", "num_reale", num_significativo, num_grandezza]
    RESTO = ["Resto: ", "0.0", 0, 0]    # Definisce la variabile-Lista RES contenente ["Descrizione", "num_reale", num_significativo, num_grandezza]
    try:           # Inizio istruzioni soggette a gestione errore
        QUOZ[1] = str(float(DIVIDENDO[1]) // float(DIVISORE[1]))    # Calcola il QUOZIENTE
        RESTO[1] = str(float(DIVIDENDO[1]) % float(DIVISORE[1]))    # Calcola il RESTO
        QUOTO[1] = str(float(DIVIDENDO[1]) / float(DIVISORE[1]))    # Calcola il QUOTO
        QUOTO[2] = DIVIDENDO[2] / DIVISORE[2]    # Calcola il numero significativo del QUOTO
        QUOTO[3] = DIVIDENDO[3] - DIVISORE[3]    # Calcola l'ordine di grandezza del QUOTO
        DIV1 = f"{QUOTO[0]} {QUOTO[1]} = {QUOTO[2]}x10^({QUOTO[3]})\n"
        DIV1 = DIV1 + "(Dividendo : Divisore) = Quoto = (Quoziente e Resto)\n"
        DIV1 = DIV1 + f"({DIVIDENDO[1]} : {DIVISORE[1]}) = {QUOTO[1]} = ({QUOZ[1]} e resto {RESTO[1]})"
    except ZeroDivisionError:        # Inizio istruzioni da eseguire in caso di errore 'ZeroDivisionError'
        DIV1 = "Non è possibile dividere per zero."
    finally:   # Inizio istruzioni che verranno eseguite indipendentemente dal fatto che ci sia stata una divisione per zero
        print("Fine della divisione!")
    return(DIV1)

def POTENZA(BASE, EXP): # Inizio definizione funzione POTENZA() ???
    VAL = ["Valore: ", "0.0", 0, 0] # Definisce la variabile-Lista VAL contenente ["Descrizione", "num_reale", num_significativo, num_grandezza]
    VALORE = float(BASE[1]) ** float(EXP[1])   # Calcola il valore della potenza
    VAL[1] = str(VALORE)  # Vonverte la radice in una stringa, e la mette nella vatiabile-Lista VAL[1]
    return(VAL) # La funzione POTENZA termina qui, restituendo i dati contenuti nella variabile-Lista VAL

def RADICE(RADICANDO, INDICE):        # Inizio definizione funzione RADICE()
    RAD = ["Radice: ", "0.0", 0, 0] # Definisce la variabile-Lista RAD contenente ["Descrizione", "num_reale", num_significativo, num_grandezza]
    RADICE = float(RADICANDO[1]) ** (1/float(INDICE[1]))  # Calcola la radice del RADICANDO
    RAD[1] = str(RADICE)  # Vonverte la radice in una stringa, e la mette nella vatiabile-Lista RAD[1]
    return(RAD) # La funzione RADICE termina qui, restituendo i dati contenuti nella variabile-Lista RAD