# Lezione 9 - ESERCIZIONE
# Creare un programma che funzioni come una calcolatrice avanzata, permettendo all'utente
# di scegliere tra diverse operazioni matematiche e funzioni speciali.
#
# Funzionalità richieste:
# 1. Le operazioni matematiche da includere sono: addizione, sottrazione, moltiplicazione,
#    divisione, calcolo del resto ed elevazione a potenza.
# 2. Le funzioni speciali da includere sono: verifica se un numero è primo, stampa la
#    tabellina di un numero fino a x10, calcolo della somma dei numeri da 1 a un numero N,
#    e verifica se un numero è pari o dispari.
#
# Interfaccia utente:
# - All'avvio, il programma deve mostrare un menu con le seguenti opzioni, ciascuna associata
#   a una lettera:
#   "a" per addizione, "s" per sottrazione, "m" per moltiplicazione, "d" per divisione,
#   "r" per calcolo del resto, "p" per elevazione a potenza, "n" per numero primo,
#   "t" per tabellina, "c" per somma dei numeri, "e" per pari o dispari, "q" per uscire.
# - L'utente deve inserire la lettera corrispondente all'operazione desiderata.
# - A seconda dell'operazione scelta, il programma deve chiedere all'utente di inserire uno
#   o due numeri.
# - Il programma deve eseguire l'operazione e mostrare il risultato.
# - Dopo aver mostrato il risultato, il programma deve tornare al menu principale fino a
#   quando l'utente non decide di uscire inserendo "q".
#
# Note e consigli:
# - È obbligatorio commentare adeguatamente il codice spiegando cosa fa ogni parte del codice.
# - È obbligatorio rendere il programma esplicativo per l'utente, stampando stringhe che
#   spiegano chiaramente cosa sta succedendo (spazi alla fine degli input e testi con la maiuscola).
# - Notare che, così come è possibile inserire if dentro altri if, è anche possibile
#   inserire while dentro altri while (non l'abbiamo mai visto a lezione).
# - È fondamentale eseguire costantemente il codice per verificare la correttezza di ciò
#   che si sta scrivendo.
# - In caso di divisione, gestire il caso in cui il divisore sia zero stampando un messaggio
#   di errore appropriato e non permettendo il crash del programma.
# - Per la verifica di un numero primo, considerare che un numero deve avere esattamente due
#   divisori distinti (1 e se stesso) per essere primo.
