021-Python 3 – Gestione trascorrere del tempo

21 Marzo, 2023 (22:53) | Linux | By: sargonsei

021-Python 3 – Gestione trascorrere del tempo

01) Conoscere data ed ora.
Per conoscere data ed ora, occorre utilizzare dei metodi contenuti nel modulo [time], quindi occorre prima importare il modulo [time], poi lanciare i metodi più opportuni per ottenere il risultato voluto. Per esempio:

>>> import time # Importa il modulo [time]
>>> SECONDI = time.time() # Viene lanciato il metodo [time] del modulo [time] per mettere nella variabile SECONDI data ed ora, in secondi
>>> DATA_ORA = time.ctime(SECONDI) # Viene lanciato il metodo [ctime] del modulo [time] per convertire il contenuto della variabile SECONDI in data ed ora, e metterlo nella variabile DATA_ORA
>>> print("Data ed ora in secondi: ",SECONDI,"; data ed ora in inglese:",DATA_ORA) # Stampa il contenuto delle variabili SECONDI e DATA_ORA
Data ed ora in secondi:  1679414995.1134164 ; data ed ora in inglese: Tue Mar 21 17:09:55 2023
>>> time.localtime(SECONDI) # Viene lanciato il metodo [localtime] del modulo [time] per convertire il contenuto della variabile SECONDI nei singoli elementi temporali (anno, mese, giorno, ore, minuti, secondi, giorno della settimana, giorno dell’anno, ora legale (0=no, 1=si).
time.struct_time(tm_year=2023, tm_mon=3, tm_mday=21, tm_hour=17, tm_min=9, tm_sec=55, tm_wday=1, tm_yday=80, tm_isdst=0)
>>> TEMPO = time.localtime(SECONDI) Converte la variabile  SECONDI nella tupla TEMPO
>>> print(f"Data ed ora in inglese: {DATA_ORA}; dall'inizio dell'anno sono passati {TEMPO[7]} giorni.")
Data ed ora in inglese: Tue Mar 21 17:09:55 2023; dall'inizio dell'anno sono passati 80 giorni.
>>> 

02) Generare un calendario.
Il modulo [calendar] consente di visualizzare calendari. Per esempio: per visualizzare la pagina del calendario relativa ad Agosto 2020, occorre digitare

>>> import calendar                 # Importa il modulo [calendar]
>>> print(calendar.month(2020, 8))  # Mostra la pagina del calendario relativa a Agosto 2020
    August 2020
Mo Tu We Th Fr Sa Su
                1  2
 3  4  5  6  7  8  9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31

>>>  

mentre, per visualizzare il calendario relativo al mese corrente dell’anno corrente, oppure al mese corrente dell’anno prossimo, dovremmo digitare le istruzioni:

>>> import calendar, time  # Importa i moduli [calendar] e [time]
>>> TEMPO = time.localtime(time.time()) # Crea una tupla contenente la data odierna
>>> print(calendar.month(TEMPO[0], TEMPO[1])) # Visualizza la pagina del calendario Anno e Mese correnti
     March 2023
Mo Tu We Th Fr Sa Su
       1  2  3  4  5
 6  7  8  9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31

>>> print(calendar.month(TEMPO[0]+1, TEMPO[1])) # Visualizza la pagina del calendario Anno prossimo e Mese corrente
     March 2024
Mo Tu We Th Fr Sa Su
             1  2  3
 4  5  6  7  8  9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

>>> 

e, per visualizzare tutto il calendario relativo ad Agosto 2020, occorre digitare

>>> import calendar #               # Importa il modulo [calendar]
>>> print(calendar.prcal(2020))  # Mostra le pagine del calendario Anno 2020
                                  2020

      January                   February                   March
Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su
       1  2  3  4  5                      1  2                         1
 6  7  8  9 10 11 12       3  4  5  6  7  8  9       2  3  4  5  6  7  8
13 14 15 16 17 18 19      10 11 12 13 14 15 16       9 10 11 12 13 14 15
20 21 22 23 24 25 26      17 18 19 20 21 22 23      16 17 18 19 20 21 22
27 28 29 30 31            24 25 26 27 28 29         23 24 25 26 27 28 29
                                                    30 31

       April                      May                       June
Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su
       1  2  3  4  5                   1  2  3       1  2  3  4  5  6  7
 6  7  8  9 10 11 12       4  5  6  7  8  9 10       8  9 10 11 12 13 14
13 14 15 16 17 18 19      11 12 13 14 15 16 17      15 16 17 18 19 20 21
20 21 22 23 24 25 26      18 19 20 21 22 23 24      22 23 24 25 26 27 28
27 28 29 30               25 26 27 28 29 30 31      29 30

        July                     August                  September
Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su
       1  2  3  4  5                      1  2          1  2  3  4  5  6
 6  7  8  9 10 11 12       3  4  5  6  7  8  9       7  8  9 10 11 12 13
13 14 15 16 17 18 19      10 11 12 13 14 15 16      14 15 16 17 18 19 20
20 21 22 23 24 25 26      17 18 19 20 21 22 23      21 22 23 24 25 26 27
27 28 29 30 31            24 25 26 27 28 29 30      28 29 30
                          31

      October                   November                  December
Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su
          1  2  3  4                         1          1  2  3  4  5  6
 5  6  7  8  9 10 11       2  3  4  5  6  7  8       7  8  9 10 11 12 13
12 13 14 15 16 17 18       9 10 11 12 13 14 15      14 15 16 17 18 19 20
19 20 21 22 23 24 25      16 17 18 19 20 21 22      21 22 23 24 25 26 27
26 27 28 29 30 31         23 24 25 26 27 28 29      28 29 30 31
                          30
None
>>> 

03) Misurare i tempi di esecuzione di una sequenza di comandi.
Il metodo [time] può essere utilizzato come componente di un blocco di istruzioni avente la funzione di calcolare il tempo utilizzato dal computer per eseguire determinate righe di istruzione. Per esempio:

# 
# Misurare il tempo necessario per eseguire un blocco di istruzioni.
import time # Importa il modulo [time]
def istruzioni(FRA,RIP): # Intestazione funzione "istruzioni" con 2 parametri
    VIA = time.time()    # Viene lanciato il metodo [time] del modulo [time] per mettere nella variabile VIA data ed ora, in secondi
    for T in range(RIP): # inizio ciclo
        print(f"{T + 1}) '{FRA}'") # Scrive la frase fa ripetere
    ALT = time.time()    # Viene lanciato il metodo [time] del modulo [time] per mettere nella variabile ALT data ed ora, in secondi
    return(VIA, ALT)

FRASE = input("Scrivere la frase che si intende ripetere. ") # Chiede la digitazione di una frase
RIPETI = int(input("Scrivere il numero di ripetizioni. "))   # Chiedela digitazione di un numero intero
INIZIO, FINE = istruzioni(FRASE, RIPETI) # Chiama la funzione [istruzioni] passando 2 parametri; attende 2 parametri
print(f"Questo computer ha impiegato {FINE - INIZIO} secondi \n per scrivere {RIPETI} volte la frase \n '{FRASE}'.")
# 

04) Generare ritardi.
Il modulo [time] contiene anche il metodo [sleep], utilizzabile per far trascorrere un certo numero di secondi prima di eseguire l’istruzione seguente, generando così un ritardo. Per esempio:

#
# Generare un ritardo.
import time # Importa il modulo TIME
def messaggio_cadenzato(RIP,SEC): # Intestazione funzione "messaggio_cadenzato" con 2 parametri
    print("Compariranno",RIP,"messaggi distanziati di",SEC,"secondi")
    for T in range(RIP): # inizio ciclo
        time.sleep(SEC)  # Il metodo [sleep] del modulo [time] genera un ritardo di SEC secondi
        print(f"Messaggio n.{T+1}.") # Stampa un messaggio
        
messaggio_cadenzato(5,2) # Chiama la funzione [messaggio_cadenzato] passando 2 parametri
# 

020-Python 3 – Metodi e Funzioni di Python

20 Marzo, 2023 (20:40) | Linux | By: sargonsei

020-Python 3 – Metodi e Funzioni di Python

01) Cose da sapere prima di procedere.
Basta fare una ricerca per capire cosa sia una Funzione e cosa sia un Metodo quando si programma in Python, per rendersi conto che la confusione regna sovrana. La confusione nasce dal fatto che parole come FUNZIONE e METODO, nella lingua parlata hanno un significato che non coincide esattamente con quello che hanno nel linguaggio di programmazione Python.
Analizziamo le definizioni più comuni proposte dai vari autori di libri di testo (anche autorevoli) e siti internet.
FUNZIONE (function): sequenza di codice eseguibile che descrive il metodo per svolgere uno o più compiti precisi.
METODO (method): è una funzione inclusa all’interno di una classe e volta ad eseguire un particolare compito elaborazione.
Come dire: la FUNZIONE è quella parte del codice che costituisce un metodo per fare qualcosa, e il METODO è quella parte del codice che, quando eseguita, assolve una funzione.
Scrivendo questi appunti, mi sono riproposto di trattare FUNZIONI e METODI rispondenti alle definizioni seguenti:
Una FUNZIONE (function), per essere una funzione di Python, deve essere una sequenza di codice eseguibile, deve essere scritta dall’utente, deve avere una riga iniziale detta “Intestazione” contenente il nome della funzione, deve poter essere “lanciata” usando il nome della funzione come se fosse un comando.
Un METODO (method), per essere un metodo di Python, deve essere costituito da un blocco di istruzioni messo a disposizione da Python (quindi non è scritto dall’utente), e deve poter essere “lanciato” usando il nome del metodo come se fosse un comando.
In pratica, la FUNZIONE è una parte di codice scritto dall’utente al fine di assolvere una funzione, e il METODO è un metodo messo a disposizione dal linguaggio di programmazione al fine di assolvere una funzione. In ogni caso, il lettore deve tener conto del fatto che, in questi appunti, le parole METODO e FUNZIONE potrebbero essere state invertite.
Per capire cos’è e come si scrive una FUNZIONE, si consulti il contenuto di questi appunti denominato
“011 Python3 – Le funzioni definite dall’utente – http://sargonsei.altervista.org/011-Python3/” .
Da qui in poi, gli appunti di questa pagina web tratteranno l’argomento “METODI di Python” e “FUNZIONI proprie di Python” come se fossero la stessa cosa, e le funzioni come se fossero metodi scritti dall’utente.

02) Importare ed eseguire un METODO contenuto in un MODULO, oppure ogni METODO contenuto in un MODULO.
L’utilizzo di un METODO, deve essere preceduto dall’importazione del MODULO che la contiene. ATTENZIONE!!! La sintassi del comando, cambia a seconda che si decida di importare l’intero MODULO o il solo METODO! Se è stato importato l’intero MODULO, la sintassi del comando è qualcosa tipo MODULO.METODO(PARAMETRO), mentre se è stato importato il solo METODO, la sintassi del comando è qualcosa tipo METODO(PARAMETRO).Quindi, volendo calcolare la radice quadrata di 81, possiamo utilizzare il metodo [sqrt()] contenuto nel modulo [math] ma, per farlo, dobbiamo prima importare il METODO [sqrt()] contenuto nel MODULO [math], oppure ogni singolo METODO contenuto nel MODULO [math]. Per esempio:

>>> sqrt(81) # Tenta di calcolare la radice quadrata di 81
Traceback (most recent call last):
File ““, line 1, in
sqrt(81)
NameError: name ‘sqrt’ is not defined
>>> from math import sqrt # Importa il METODO sqrt dal MODULO math
>>> sqrt(81) # Calcola la radice quadrata di 81
9.0
>>> math.sqrt(81) # Tenta di calcolare la radice quadrata di 81
Traceback (most recent call last):
File ““, line 1, in
math.sqrt(81) # Tenta di calcolare la radice quadrata di 81
NameError: name ‘math’ is not defined
>>> import math # Importa ogni METODO contenuto nel MODULO math
>>> math.sqrt(81) # Calcola la radice quadrata di 81
9.0
>>>

03) Ottenere l’elenco dei METODI contenuti in un MODULO.
Per ottenere un elenco dei METODI contenuti in un dato MODULO, occorre impartire il comando [dir(MODULO)]; segue un esempio per conoscere l’elenco dei METODI contenuti nel MODULO [math]

>>> dir(math) # Mostea l’elenco dei METODI contenuti nel MODULO math
[‘__doc__’, ‘__loader__’, ‘__name__’, ‘__package__’, ‘__spec__’, ‘acos’, ‘acosh’, ‘asin’, ‘asinh’, ‘atan’, ‘atan2’, ‘atanh’, ‘ceil’, ‘comb’, ‘copysign’, ‘cos’, ‘cosh’, ‘degrees’, ‘dist’, ‘e’, ‘erf’, ‘erfc’, ‘exp’, ‘expm1’, ‘fabs’, ‘factorial’, ‘floor’, ‘fmod’, ‘frexp’, ‘fsum’, ‘gamma’, ‘gcd’, ‘hypot’, ‘inf’, ‘isclose’, ‘isfinite’, ‘isinf’, ‘isnan’, ‘isqrt’, ‘lcm’, ‘ldexp’, ‘lgamma’, ‘log’, ‘log10’, ‘log1p’, ‘log2’, ‘modf’, ‘nan’, ‘nextafter’, ‘perm’, ‘pi’, ‘pow’, ‘prod’, ‘radians’, ‘remainder’, ‘sin’, ‘sinh’, ‘sqrt’, ‘tan’, ‘tanh’, ‘tau’, ‘trunc’, ‘ulp’]
>>>

04) Utilizzare FUNZIONI contenute in un MODULI creati dall’utente.
Le istruzioni utilizzate per lanciare un METODO contenuto in un MODULO, possono essere utilizzate anche per lanciare una FUNZIONE creata dall’utente, e salvata in apposito script; in questo caso, il nome dello script che contiene la FUNZIONE, sarà anche il nome del MODULO. Segue un esempio.
Nella cartella di lavoro salviamo sia lo script [giochidiparole.py], avente il contenuto seguente:

# 
from random import shuffle # Importa il metodo [shuffle] contenuto nel modulo [random]

def anagramma(PAROLA):     # Riga di intestazione della funzione chiamata [anagramma]
    PAROLA = list(PAROLA)  # Trasforma la variabile PAROLA in una lista, in cui ogni singola lettera è un elemento della lista
    shuffle(PAROLA)        # Mescola gli elementi della lista PAROLA
    return ''.join(PAROLA) # La funzione termina riunendo gli elementi della lista PAROLA in un'unica stringa alfanumerica che costituisce il ritorno della funzione.

def frasecontrario(FRASE):    # Riga di intestazione della funzione chiamata [frasecontrario]
    PAROLE = FRASE.split(" ") # Trasforma la variabile PAROLE in una lista, in cui ogni singola parola è un elemento della lista
    PAROLE = PAROLE[-1::-1]   # 
    FRASEINVERTITA = ' '.join(PAROLE) # Riunisce gli elementi della lista PAROLE in un'unica variabile alfanumerica FRASEINVERTITA.
    return FRASEINVERTITA     # La funzione termina ritornando il contenuto della variabile alfanumerica FRASEINVERTITA.
# 

sia lo script [lancia_anagramma.py], avente il contenuto seguente:

# 
import giochidiparole                        # Importa il modulo [giochidiparole]
ANAGRAMMARE = input("Digita la parola da anagrammare. ")
ANAGRAMMATO = giochidiparole.anagramma(ANAGRAMMARE) # Lancia la funzione [anagramma] contenuta nel modulo [giochidiparole]
# passando il contenuto della variabile ANAGRAMMARE; il ritorno, è messo nella variabile ANAGRAMMATO
print(ANAGRAMMATO) # stampa il contenuto della variabile ANAGRAMMATO
# 

il quale, una volta lanciato:
A) importa lo script [giochidiparole] come se fosse un modulo;
B) chiede all’utente di digitare una parola da anagrammare;
C) lancia la funzione [anagramma] contenuta nel modulo [giochidiparole] previo passaggio del contenuto della variabile ANAGRAMMARE; il valore di ritorno, verrà posto nella variabile ANAGRAMMATO
D) Stampa il contenuto della variabile ANAGRAMMATO

sia lo script [lancia_frasecontrario.py], avente il contenuto seguente:

# 
from giochidiparole import frasecontrario                    # Importa la FUNZIONE [frasecontrario] contenuta nel MODULO [giochidiparole]
FRASECONTRARIO = input("Digita la frase di cui si desidera invertire l’ordine delle parole. ")
FRASEINVERSA = frasecontrario(FRASECONTRARIO) # Lancia la funzione [frasecontrario] contenuta nel modulo [giochidiparole]
# passando il contenuto della variabile FRASECONTRARIO; il ritorno, è messo nella variabile FRASEINVERSA
print(FRASEINVERSA) # stampa il contenuto della variabile FRASEINVERSA
# 

il quale, una volta lanciato:
A) importa la FUNZIONE [frasecontrario] contenuta nel MODULO [giochidiparole];
B) chiede all’utente di digitare la frase di cui si desidera invertire l’ordine delle parole;
C) lancia la funzione [frasecontrario] contenuta nel modulo [giochidiparole] previo passaggio del contenuto della variabile FRASECONTRARIO; il valore di ritorno, verrà posto nella variabile FRASEINVERSA
D) Stampa il contenuto della variabile FRASEINVERSA

Si noti che, come per i metodi messi a disposizione da Python, è possibile importare sia l’intero MODULO creato dall’utente, sia la singola FUNZIONE creata dall’utente.

019 Python3 – Calcolatrice (+ – x : Potenza Radice) a notazione scientifica con Gestione Errori/Eccezioni

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

019-python3
in costruzione

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

11 Marzo, 2023 (23:04) | Senza categoria | 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
    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 è 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]")
#

017 Esprimere un numero reale decimale (in base dieci) utilizzando: la Notazione Esponenziale, la Notazione Scientifica, e la Notazione Normalizzata.

11 Marzo, 2023 (17:01) | Senza categoria | By: sargonsei

017 Esprimere un numero reale decimale (in base dieci) utilizzando: la Notazione Esponenziale, la Notazione Scientifica, e la Notazione Normalizzata.

Per Notazione Esponenziale si intende un modo di esprimere i numeri sotto forma di “m × 10n ” dove m è il numero significativo, ed n è l’ordine di grandezza.
Per esempio: il numero reale 1234,56
può essere espresso come 1234,56×100 (si legge 1234,56 per 10 elevato alla 0).
Lo stesso numero, può essere rappresentato spostando la virgola di x posti verso sinistra, purché si incrementi di x l’ordine di grandezza; analogamente, la virgola può essere spostata di x posti verso destra, purché si decrementi di x l’ordine di grandezza.
Qualora accada di dover associare al numero reale un ordine di grandezza ben preciso, potrebbe accadere di dover aggiungere alla parte significativa il necessario numero di zeri non significativi; per esempio: volendo rappresentare il numero reale 1234,56 come un numero esponenziale avente ordine di grandezza pari a -4, occorre aggiungere 2 zeri non significativi per scriverlo come 12345600×104 (si legge 12345600 per 10 elevato alla -4).

La Notazione Scientifica è simile alla Notazione Esponenziale, ma non ammette l’uso di cifre non significative.

Per Notazione Normalizzata si intende un caso particolare di Notazione Scientifica in cui il numero significativo è espresso posizionando la virgola in modo tale che a sinistra della virgola ci sia una sola cifra compresa fra 1 e 9.
Per esempio: il numero reale 1234,56
può essere espresso in Notazione Normalizzata come 1,23456×103 (si legge 1,23456 per 10 elevato alla 3).

Si noti che, sia nella Notazione Scientifica, sia nella Notazione Normalizzata, m è il numero significativo di nome e di fatto, quindi deve contenere tutte le cifre significative, e solo quelle. Per esempio: se le cifre significative dopo la virgola fossero 3, il numero reale 1234,56, espresso con la notazione scientifica, diventa 1234,560×100 (si legge 1234,560 per 10 elevato alla 0) e, nella Notazione Normalizzata, diventa 1,234560×103 (si legge 1,234560 per 10 elevato alla 3); analogamente, se vi fosse una sola cifra significativa dopo la virgola, il numero reale 1234,56, espresso con la notazione scientifica diventa 1234,5×100 (si legge 1234,5 per 10 elevato alla 0) e, nella Notazione Normalizzata, diventa 1,2345×103 (si legge 1,2345 per 10 elevato alla 3).

ESEMPI

Un numero reale come 1234,56, se espresso come 1,23456×103 (si legge 12345600 per 10 elevato alla 3), può dirsi espresso sia in Notazione Esponenziale, sia in Notazione Scientifica, sia in Notazione Normalizzata.

Un numero reale come 1234,56, se espresso come 12345600×10-4 (si legge 12345600 per 10 elevato alla -4), può dirsi espresso in Notazione Esponenziale, ma non può dirsi né espresso in Notazione Scientifica, né espresso in Notazione Normalizzata.

Un numero reale come 1234,56, se espresso come 1234,56×100 (si legge 12345600 per 10 elevato alla 0), può dirsi espresso sia in Notazione Esponenziale, sia in Notazione Scientifica, ma non in Notazione Normalizzata.

016 Python3 – Script Calcolatrice con Gestione Errori/Eccezioni

21 Gennaio, 2023 (23:28) | Senza categoria | By: sargonsei

#
# 016 Python3 - Script Calcolatrice con 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 DATI() e DIVISIONE()
# tramite 'try' ed 'except'
#
# Per avviare questo script:
# 1) Salvarlo nella cartella di lavoro, con nome ed estensione che si preferisce (Estensioni comuni: .py .pyw .pyc .pyo .pyd )
# 2) Aprire un terminale nella cartella di lavoro 
# 3) Impartire il comando: [python3 < nomeDelloScript.EstensioneDelloScript >]
#
def DATI(X, Y):    # Inizio definizione funzione DATI()
    try:           # Inizio istruzioni soggette a gestione errore
        XX = float(input(X))  # Acquisisce il primo numero e lo mette in una variabile a virgola mobile
        YY = float(input(Y))  # Acquisisce il secondo numero e lo mette in una variabile a virgola mobile
    except ValueError:        # Inizio istruzioni da eseguire in caso di errore 'ValueError'
        print("ERRORE!!! Occorre inserire due numeri.")
        XX, YY = DATI(X, Y)   # Chiama la funzione DATI() previo trasferimento del contenuto delle variabili X e Y.
    return(XX, YY) # Restituisce i valori contenuti nelle due variabili a virgola mobile
def SOMMA(ADD1, ADD2): # Inizio definizione funzione SOMMA()
    SUM = ADD1 + ADD2  # Calcola la somma dei 2 numeri
    SUM1 = "\nLa somma fra l'addendo " + str(ADD1) + " e l'addendo " + str(ADD2) + " vale " +str(SUM)
    SUM1 = "(" + str(ADD1) + " + " + str(ADD2) + ")= " + str(SUM) + SUM1
    return(SUM1)
def SOTTRAZIONE(MIN, SOT): # Inizio definizione funzione SOTTRAZIONE()
    DIF = MIN - SOT        # Calcola la differenza dei 2 numeri
    DIF1 = "\nLa differenza fra il minuendo " + str(MIN) + " ed il sottraendo " + str(SOT) + " vale " +str(DIF)
    DIF1 = "(" + str(MIN) + " - " + str(SOT) + ")= " + str(DIF) + DIF1
    return(DIF1)
def MOLTIPLICAZIONE(MOLTIPLICANDO, MOLTIPLICATORE): # Inizio definizione funzione MOLTIPLICAZIONE()
    PRO = MOLTIPLICANDO * MOLTIPLICATORE            # Calcola il prodotto dei 2 numeri
    PRO1 = "\nIl prodotto fra il fattore " + str(MOLTIPLICANDO) + " ed il fattore " + str(MOLTIPLICATORE) + " vale " +str(PRO)
    PRO1 = "(" + str(MOLTIPLICANDO) + " x " + str(MOLTIPLICATORE) + ")= " + str(PRO) + PRO1
    return(PRO1)
def DIVISIONE(DIVIDENDO, DIVISORE): # Inizio definizione funzione DIVISIONE()
    try:           # Inizio istruzioni soggette a gestione errore
        QUOTO = DIVIDENDO / DIVISORE    # Calcola il QUOTO
        QUOZ = DIVIDENDO // DIVISORE    # Calcola il QUOZIENTE
        RESTO = DIVIDENDO % DIVISORE    # Calcola il RESTO
        DIV1 = "\n(Dividendo : Divisore) = Quoto = (Quoziente e Resto)"
        DIV1 = "(" + str(DIVIDENDO) + " : " + str(DIVISORE) + ")= " + str(QUOTO)  + " =(" + str(QUOZ) + " e resto " + str(RESTO) +")" + DIV1
    except ZeroDivisionError:        # Inizio istruzioni da eseguire in caso di errore 'ZeroDivisionError'
        DIV1 = "Non è possibile dividere per zero."
    return(DIV1)
def POTENZA(BASE, EXP): # Inizio definizione funzione POTENZA()
    POT = BASE ** EXP   # Calcola la potenza della BASE
    return(POT)
def RADICE(RADICANDO, INDICE):        # Inizio definizione funzione RADICE()
    RADICE = RADICANDO ** (1/INDICE)  # Calcola la radice del RADICANDO
    return(RADICE)
MENU = """Operazioni possibili:
0) Chiudere questo script.
1) Addizione
2) Sottrazione
3) Moltiplicazione
4) Divisione
5) Elevazione a potenza
6) Estrazione radice
"""
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.")
        X1 = "Primo addendo ? "; Y1 = "Secondo addendo ? "
        X2, Y2 = DATI(X1, Y1)     # Chiama la funzione DATI() previo trasferimento del contenuto delle variabili X1 e Y1.
        RISULTATO = SOMMA(X2, Y2) # Chiama la funzione SOMMA() previo trasferimento del contenuto delle variabili X2 e Y2.
    elif SCELTA == "2":
        print("Hai digitato la scelta 2, quindi verrà eseguita la sottrazione fra 2 numeri.")
        X1 = "Minuendo ? "; Y1 = "Sottraendo ? "
        X2, Y2 = DATI(X1, Y1)     # Chiama la funzione DATI() previo trasferimento del contenuto delle variabili X1 e Y1.
        RISULTATO = SOTTRAZIONE(X2, Y2) # Chiama la funzione SOTTRAZIONE() previo trasferimento del contenuto delle variabili X2 e Y2.
    elif SCELTA == "3":
        print("Hai digitato la scelta 3, quindi verrà eseguita la moltiplicazione fra 2 numeri.")
        X1 = "Moltiplicando ? "; Y1 = "Moltiplicatore ? "
        X2, Y2 = DATI(X1, Y1)     # Chiama la funzione DATI() previo trasferimento del contenuto delle variabili X1 e Y1.
        RISULTATO = MOLTIPLICAZIONE(X2, Y2) # Chiama la funzione MOLTIPLICAZIONE() previo trasferimento del contenuto delle variabili X2 e Y2.
    elif SCELTA == "4":
        print("Hai digitato la scelta 4, quindi verrà eseguita la divisione fra 2 numeri.")
        X1 = "Dividendo ? "; Y1 = "Divisore ? "
        X2, Y2 = DATI(X1, Y1)     # Chiama la funzione DATI() previo trasferimento del contenuto delle variabili X1 e Y1.
        RISULTATO = DIVISIONE(X2, Y2) # Chiama la funzione DIVISIONE() previo trasferimento del contenuto delle variabili X2 e Y2.
    elif SCELTA == "5":
        print("Hai digitato la scelta 5, quindi verrà eseguita l'elevazione a potenza fra 2 numeri.")
        X1 = "Base ? "; Y1 = "Esponente ? "
        X2, Y2 = DATI(X1, Y1)     # Chiama la funzione DATI() previo trasferimento del contenuto delle variabili X1 e Y1.
        RISULTATO = POTENZA(X2, Y2) # Chiama la funzione POTENZA() previo trasferimento del contenuto delle variabili X2 e Y2.
    elif SCELTA == "6":
        print("Hai digitato la scelta 6, quindi verrà eseguita la radice fra 2 numeri.")
        X1 = "Radicando ? "; Y1 = "Indice ? "
        X2, Y2 = DATI(X1, Y1)     # Chiama la funzione DATI() previo trasferimento del contenuto delle variabili X1 e Y1.
        RISULTATO = RADICE(X2, Y2) # Chiama la funzione RADICE() previo trasferimento del contenuto delle variabili X2 e Y2.
    else:
        print("La scelta " + SCELTA + " non è una scelta valida")
        continue # Ricomincia il ciclo 'while'
    # Fine del ciclo 'if', 'elif', 'else'
    print(RISULTATO)
    input("Per poter proseguire, premere il tasto [Invio]")
# Fine del ciclo 'while'
#

015 Python 3 – Errori di sintassi ed eccezioni

21 Gennaio, 2023 (23:16) | Linux | By: sargonsei

015 Python 3 – Errori di sintassi ed eccezioni

Questa sezione degli appunti di Python 3 tratta 2 tipi di errori: gli errori di sintassi, e le eccezioni.

1) Errori di sintassi
Gli errori di sintassi si verificano quando, in fase di scrittura dello script, non viene rispettata la sintassi propria del linguaggio di programmazione; ciò comporta che per “errore di sintassi” si intenda non solo l’errata digitazione di lettere e numeri, ma anche la digitazione di spazi e punteggiatura non conforme a quanto richiesto dal linguaggio di programmazione.
1A) Lettere MAIUSCOLE e lettere minuscole
Python è “case sensitive”, quindi percepisce differenze fra comandi e stringhe scritti in lettere maiuscole o minuscole. Di conseguenza: le variabili ‘ALFA’ ‘Alfa’ ‘aLfa’ e ‘alfa’ sono 4 variabili diverse; le funzioni ‘nomeFunzione’ e ‘nomeFunzione’ sono nomi di funzioni diverse; print() è un comando, mentre Print() è un errore di sintassi.
Seguono alcuni esempi.

>>> alfa = 2; alfa = 3; ALFA = 4; print(alfa, ALFA) # alfa ≠ ALFA
3 4
>>> ALFA = 3; Print(ALFA) # Il comando Print() non esiste
SyntaxError: invalid syntax
>>> 

1B) Rispettare la punteggiatura.

>>> ALFA = "3" print(ALFA) # La sintassi corretta e’ ALFA = "3"; print(ALFA)
SyntaxError: invalid syntax
>>> ALFA = 3, print(ALFA) # La sintassi corretta e’ ALFA = 3; print(ALFA)
Traceback (most recent call last):
  File "", line 1, in 
    ALFA = 3, print(ALFA) # La sintassi corretta e’ ALFA = 3; print(ALFA)
NameError: name 'ALFA' is not defined
>>> ALFA = "3". print(ALFA) # La sintassi corretta e’ ALFA = "3"; print(ALFA)
Traceback (most recent call last):
  File "", line 1, in 
    ALFA = "3". print(ALFA) # La sintassi corretta e’ ALFA = "3"; print(ALFA)
AttributeError: 'str' object has no attribute 'print'
>>> 

1C) Rispettare l’ortografia.

>>> ALFA = 3; pr!nt(ALFA) # pr!nt non è un comando
SyntaxError: invalid syntax
>>> 

1D) Definire le variabili prima di utilizzarle
Contrariamente a quanto si potrebbe pensare, in Python, se vogliamo che una variabile contenga una stringa vuota oppure il numero 0, dobbiamo prima definirla mediante l’esecuzione dell’istruzione VARIABILE = “” oppure VARIABILE = 0; una variabile a cui non è stato dato alcun contenuto non è vuota ma è inesistente, e l’utilizzo di una variabile inesistente produce un messaggio di errore seguito dal blocco dell’esecuzione di Python.

>>> print(A + "uno") # La sintassi corretta e’ A = ""; print(A + "uno")
Traceback (most recent call last):
  File "", line 1, in 
    print(A + "uno") # La sintassi corretta e’ A = ""; print(A + "uno")
NameError: name 'A' is not defined
>>> print(A + 1) # La sintassi corretta e’ A = 0; print(A + 1)
Traceback (most recent call last):
  File "", line 1, in 
    print(A + 1) # La sintassi corretta e’ A = 0; print(A + 1)
NameError: name 'A' is not defined
>>>

Quando uno script in Python si blocca a causa di un errore di sintassi, il programmatore non può fare altro che visualizzare il programma, cercare gli errori, e correggerli.

2) Eccezioni
Talvolta può accadere che una riga di comandi formalmente corretta dia luogo ad un errore; quando ciò avviene, l’errore che si verifica è detto ‘eccezione’. Si veda ad esempio lo script CALCOLATRICE da me creato usando il linguaggio Python 3 e salvato sia alla pagina web
http://sargonsei.altervista.org/012-Python3/
sia all’interno del file di testo che io ho salvato col nome ‘012-Calcolatrice.py’ (ma avrei potuto usare qualsiasi altro nome) salvato nella cartella di lavoro (ma avrei potuto salvarlo in qualsiasi altra cartella), quindi, per lanciarlo, io non devo fare altro che aprire un terminale nella cartella di lavoro ed impartire il comando
[python3 012-Calcolatrice.py] # (senza parentesi quadre).
Una volta avviato lo script, vediamo che funziona senza intoppi, con 2 eccezioni.

2A) ‘ValueError’: Il programma aspettava l’inserimento di un valore numerico.
Quando lo script ci chiede uno qualsiasi dei numeri da sommare, o sottrarre, o moltiplicare, o dividere, nel caso in cui l’utente inserisca un dato non numerico, compare un messaggio di errore ‘ValueError’, e lo script si ferma.
Nel caso specifico in cui si voglia eseguire una sottrazione e, quando viene richiesto di inserire il sottraendo, si digita [UNO] (senza parentesi quadre), il messaggio che compare prima che lo script si fermi è il seguente:

Traceback (most recent call last):
  File "/mnt/Dati1/Guide/Guida-Python3/012-Calcolatrice.py", line 70, in 
    X2, Y2 = DATI(X1, Y1)     # Chiama la funzione DATI() previo trasferimento del contenuto delle variabili X1 e Y1.
  File "/mnt/Dati1/Guide/Guida-Python3/012-Calcolatrice.py", line 17, in DATI
    YY = float(input(Y))  # Acquisisce il secondo numero e lo mette in una variabile a virgola mobile
ValueError: could not convert string to float: 'UNO'

Il contenuto esatto del messaggio può variare a seconda della versione utilizzata. Nel mio caso, si tratta di un messaggio di 6 righe:
la prima riga avvisa che Python 3 ha sospeso l’esecuzione dello script in Python per rintracciare l’origine dell’errore;
la seconda riga contiene il nome del file (completo del percorso) nel quale l’errore è stato riscontrato, il numero della prima riga coinvolta nell’errore, e la sezione a cui la riga appartiene (in questo caso, il modulo principale);
la terza riga contiene il contenuto della riga suddetta (in questo caso, il contenuto della riga 70);
la quarta riga contiene il nome del file (completo del percorso) nel quale l’errore è stato riscontrato, il numero della seconda riga coinvolta nell’errore, e la sezione a cui la riga appartiene (in questo caso, la funzione DATI);
la quinta riga contiene il contenuto della riga suddetta (in questo caso, il contenuto della riga 17);
la sesta riga contiene il nome specifico dell’errore ed il motivo dell’errore (in questo caso: “non è possibile convertire la stringa UNO’ in un numero a virgola mobile”).
L’interpretazione corretta di queste 6 righe è qualcosa tipo: «L’istruzione presente alla riga 70 ‘chiama’ la funzione DATI(), la quale contiene la riga 17 che prevede che l’utente inserisca un valore numerico, ma l’utente ha inserito un valore non numerico, generando così un ‘ValueError’ ed il programma si è bloccato.»

2B) Gestire l’errore/eccezione ‘ValueError’ usando le istruzioni ‘try’ ed ‘except’.
Esaminando la funzione DATI() del programma ‘012-Calcolatrice.py’, vediamo che è composta dalle 4 righe seguenti:

def DATI(X, Y):          # Inizio definizione funzione DATI()
    XX = float(input(X)) # Acquisisce il primo numero e lo mette in una variabile a virgola mobile
    YY = float(input(Y)) # Acquisisce il secondo numero e lo mette in una variabile a virgola mobile
    return(XX, YY)       # Restituisce i valori contenuti nelle due variabili a virgola mobile

La seconda e la terza riga della funzione DATI() chiedono all’utente di inserire valori numerici e, se l’utente inserisce valori non numerici, si genera l’errore ‘ValueError’ che blocca l’esecuzione del programma.
In questo caso specifico, il blocco del programma può essere evitato modificando il testo della funzione DATI() come segue:

def DATI(X, Y):    # Inizio definizione funzione DATI()
    try:           # Inizio istruzioni soggette a gestione errore
        XX = float(input(X))  # Acquisisce il primo numero e lo mette in una variabile a virgola mobile
        YY = float(input(Y))  # Acquisisce il secondo numero e lo mette in una variabile a virgola mobile
    except ValueError:        # Inizio istruzioni da eseguire in caso di errore 'ValueError'
        print("ERRORE!!! Occorre inserire due numeri.")
        XX, YY = DATI(X, Y)   # Chiama la funzione DATI() previo trasferimento del contenuto delle variabili X e Y.
    return(XX, YY) # Restituisce i valori contenuti nelle due variabili a virgola mobile

Il motivo per cui sono state aggiunte 5 righe, è il seguente:
la riga contenente il comando ‘try:’ indica l’inizio delle istruzioni oggetto della gestione dell’errore;
fra le righe seguenti, l’indentazione identifica le 2 righe soggette alla gestione dell’errore;
la riga contenente il comando ‘except ValueError:’ indica l’inizio delle istruzioni che verranno eseguite esclusivamente nel caso si verifichi l’errore ‘ValueError’
fra le righe seguenti, l’indentazione identifica le 2 righe che verranno eseguite solo ed esclusivamente nel caso in cui durante l’esecuzione delle righe soggette alla gestione dell’errore si verifichi l’errore ‘ValueError’;
quando ciò avviene, la gestione dell’errore/eccezione predisposta dall’utente si sostituisce al comportamento che il programma avrebbe in assenza della gestione dell’errore, quindi, in questo caso, fa apparire il messaggio “ERRORE!!! Occorre inserire due numeri.” e ‘chiama’ nuovamente l’esecuzione della funzione DATI().

2C) ‘ZeroDivisionError’: Un divisore non può valere zero.
Quando lo script ci chiede di inserire il divisore, nel caso in cui l’utente inserisca il numero 0, compare un messaggio di errore ‘ZeroDivisionError’, e lo script si ferma.
Il messaggio che compare prima che lo script si fermi è il seguente:

Traceback (most recent call last):
  File "/mnt/Dati1/Guide/Guida-Python3/012-Calcolatrice.py", line 81, in 
    RISULTATO = DIVISIONE(X2, Y2) # Chiama la funzione DIVISIONE() previo trasferimento del contenuto delle variabili X2 e Y2.
  File "/mnt/Dati1/Guide/Guida-Python3/012-Calcolatrice.py", line 35, in DIVISIONE
    QUOTO = DIVIDENDO / DIVISORE    # Calcola il QUOTO
ZeroDivisionError: float division by zero

Il contenuto esatto del messaggio può variare a seconda della versione utilizzata. Nel mio caso, si tratta di un messaggio di 6 righe:
la prima riga avvisa che Python 3 ha sospeso l’esecuzione dello script in Python per rintracciare l’origine dell’errore;
la seconda riga contiene il nome del file (completo del percorso) nel quale l’errore è stato riscontrato, il numero della prima riga coinvolta nell’errore, e la sezione a cui la riga appartiene (in questo caso, il modulo principale);
la terza riga contiene il contenuto della riga suddetta (in questo caso, il contenuto della riga 81);
la quarta riga contiene il nome del file (completo del percorso) nel quale l’errore è stato riscontrato, il numero della seconda riga coinvolta nell’errore, e la sezione a cui la riga appartiene (in questo caso, la funzione DIVISIONE);
la quinta riga contiene il contenuto della riga suddetta (in questo caso, il contenuto della riga 35);
la sesta riga contiene il nome specifico dell’errore ed il motivo dell’errore (in questo caso: “non è possibile dividere un numero per zero”).
L’interpretazione corretta di queste 6 righe è qualcosa tipo: «L’istruzione presente alla riga 81 ‘chiama’ la funzione DIVISIONE(), la quale contiene la riga 35 che prevede l’esecuzione di una divisione, ma l’utente ha fornito un DIVISORE con valore 0, generando così un ‘ZeroDivisionError’ ed il programma si è bloccato.»

2D) Gestire l’errore/eccezione ‘ZeroDivisionError’ usando le istruzioni ‘try’ ed ‘except’.
Esaminando la funzione DIVISORE() del programma ‘012-Calcolatrice.py’, vediamo che è composta dalle 7 righe seguenti:

def DIVISIONE(DIVIDENDO, DIVISORE): # Inizio definizione funzione DIVISIONE()
    QUOTO = DIVIDENDO / DIVISORE    # Calcola il QUOTO
    QUOZ = DIVIDENDO // DIVISORE    # Calcola il QUOZIENTE
    RESTO = DIVIDENDO % DIVISORE    # Calcola il RESTO
    DIV1 = "\n(Dividendo : Divisore) = Quoto = (Quoziente e Resto)"
    DIV1 = "(" + str(DIVIDENDO) + " : " + str(DIVISORE) + ")= " + str(QUOTO)  + " =(" + str(QUOZ) + " e resto " + str(RESTO) +")" + DIV1
    return(DIV1)

La seconda, la terza, e la quarta riga della funzione DIVISIONE() calcolano il risultato di una divisione e, se l’utente ha inserito un DIVISORE = 0, si genera l’errore ‘ZeroDivisionError’ che blocca l’esecuzione del programma.
In questo caso specifico, il blocco del programma può essere evitato modificando il testo della funzione DATI() come segue:

def DIVISIONE(DIVIDENDO, DIVISORE): # Inizio definizione funzione DIVISIONE()
    try:           # Inizio istruzioni soggette a gestione errore
        QUOTO = DIVIDENDO / DIVISORE    # Calcola il QUOTO
        QUOZ = DIVIDENDO // DIVISORE    # Calcola il QUOZIENTE
        RESTO = DIVIDENDO % DIVISORE    # Calcola il RESTO
        DIV1 = "\n(Dividendo : Divisore) = Quoto = (Quoziente e Resto)"
        DIV1 = "(" + str(DIVIDENDO) + " : " + str(DIVISORE) + ")= " + str(QUOTO)  + " =(" + str(QUOZ) + " e resto " + str(RESTO) +")" + DIV1
    except ZeroDivisionError:        # Inizio istruzioni da eseguire in caso di errore 'ZeroDivisionError'
        DIV1 = "Non è possibile dividere per zero."
    return(DIV1)

Il motivo per cui sono state aggiunte 4 righe, è il seguente:
la riga contenente il comando ‘try:’ indica l’inizio delle istruzioni oggetto della gestione dell’errore;
fra le righe seguenti, l’indentazione identifica le 5 righe soggette alla gestione dell’errore;
la riga contenente il comando ‘except ZeroDivisionError:’ indica l’inizio delle istruzioni che verranno eseguite esclusivamente nel caso si verifichi l’errore ‘except ZeroDivisionError’
fra le righe seguenti, l’indentazione identifica l’unica riga che verrà eseguita solo ed esclusivamente nel caso in cui durante l’esecuzione delle righe soggette alla gestione dell’errore si verifichi l’errore ‘ZeroDivisionError’;
quando ciò avviene, la gestione dell’errore/eccezione predisposta dall’utente si sostituisce al comportamento che il programma avrebbe in assenza della gestione dell’errore, quindi, in questo caso, fa apparire il messaggio “Non è possibile dividere per zero.” ed il programma procede.

2E) Gestire l’errore/eccezione generica usando le istruzioni ‘try’ ed ‘except’.
Quando viene specificato il tipo di errore, il blocco di istruzioni corrispondente all’eccezione viene eseguito solo ed esclusivamente nel caso in cui si verifichi il tipo di errore specificato, e non altri tipi di errore; in altre parole: il blocco di istruzioni relativo a ‘except ValueError:’ viene eseguito solo se si verifica un errore di tipo ‘ValueError’ ed il blocco di istruzioni relativo a ‘except ZeroDivisionError:’ viene eseguito solo se si verifica un errore di tipo ‘ZeroDivisionError’.
Omettendo di specificare il tipo di errore, il blocco di istruzioni corrispondente all’eccezione viene eseguito ogni qual volta si produce un errore, a prescindere dalla tipologia dell’errore stesso; di conseguenza, l’errore eventualmente verificatosi viene rilevato, ma non è possibile produrre una risposta diversa a seconda della tipologia di errore. Qualora, per il medesimo errore, si voglia prevedere sia una risposta per un errore generico, sia una risposta per un errore specifico, la risposta generica deve essere messa alla fine, e verrà eseguita solo nel caso in cui l’errore rilevato non corrisponde all’errore specifico; per esempio:

print("Questo script in Python 3 esegue la divisione fra 2 numeri.")
DIVIDENDO = 0; DIVISORE = 0
try:           # Inizio istruzioni soggette a gestione errore
    DIVIDENDO = float(input("Dividendo? "))  # Acquisisce il Dividendo e lo mette in una variabile a virgola mobile
    DIVISORE = float(input("Divisore? "))  # Acquisisce il Divisore e lo mette in una variabile a virgola mobile
except:        # Inizio istruzioni da eseguire in presenza di errore generico
    print("Errore generico in fase di inserimento dei numeri.")
else:          # Inizio istruzioni da eseguire in assenza di errore generico
    print("Dividendo: ", DIVIDENDO, "\nDivisore: ", DIVISORE)
try:           # Inizio istruzioni soggette a gestione errore
    QUOTO = DIVIDENDO / DIVISORE    # Calcola il QUOTO
    RISULTATO = "(" + str(DIVIDENDO) + " : " + str(DIVISORE) + ")= " + str(QUOTO)
except ZeroDivisionError:        # Inizio istruzioni da eseguire in caso di errore 'ZeroDivisionError'
    RISULTATO = "Non è possibile dividere per zero." # Risposta nel caso di errore specifico
except:        # Inizio istruzioni da eseguire in caso di errore generico
    RISULTATO = "Errore generico in fase di calcolo del risultato della divisione." # Risposta nel caso di errore generico
print(RISULTATO)

.
016 Python3 – Script Calcolatrice con Gestione Errori/Eccezioni
http://sargonsei.altervista.org/016-python3/

Pagina ufficiale di Python 3 dedicata alla lista delle eccezioni
https://docs.python.org/3/library/exceptions.html

014 Python3 – Manipolazione delle stringhe

16 Gennaio, 2023 (18:05) | Linux | By: sargonsei

014 Python3 – Manipolazione delle stringhe
1) In questa parte di appunti di Python 3 si spiega l’uso di alcuni operatori e metodi per manipolare le stringhe.
1A) Concatenare stringhe e variabili utilizzando l’operatore +

L’operatore [+] permette di concatenare fra loro stringhe e variabili alfanumeriche nel medesimo ordine in cui sono indicate nell’istruzione. Qualora si intenda utilizzare questo operatore per concatenare variabili non di tipo stringa, la concatenazione non avviene, ovvero avviene solo previo conversione delle variabili da concatenare in variabili tipo stringa.
Seguono alcuni esempi.
A = "Roma"; B = 3 # Imposta il valore della variabile stringa A e della variabile numerica B
C = "Via " + A + " n." + str(B) # Concatena stringhe, una variabile stringa ed una variabile numerica e mette il risultato nella variabile C
print(C) # Imposta il valore di una variabile stringa ed una variabile numerica, le concatena, e stampa il risultato
ovvero, in un'unica riga:
A = "Roma"; B = 3; C = "Via " + A + " n." + str(B); print(C)
>>> A = "Roma"; B = 3; C = "Via " + A + " n." + str(B); print(C) # Esempio di concatenazione di stringhe e variabili
Via Roma n.3
>>>

1B) Concatenare stringhe e variabili utilizzando f-string
Python 3.6 ha introdotto l’istruzione f-string che, a metà fra un operatore ed un metodo, permette di concatenare fra loro stringhe e variabili nel medesimo ordine in cui sono indicate nell’istruzione. Questa istruzione può essere utilizzata per concatenare variabili di qualsiasi tipo e/o stringhe, purchè: l’istruzione inizi con [f”] (senza parentesi quadre), termini con [“] (senza parentesi quadre), e le variabili da concatenare siano racchiuse fra parentesi graffe.
Seguono alcuni esempi.
A = "Roma"; B = 3 # Imposta il valore della variabile stringa A e della variabile numerica B
C = f"Via {A} n.{B}" # Concatena stringhe, una variabile stringa ed una variabile numerica e mette il risultato nella variabile C
print(C) # Imposta il valore di una variabile stringa ed una variabile numerica, le concatena, e stampa il risultato
ovvero, in un'unica riga:
A = "Roma"; B = 3; C = f"Via {A} n.{B}"; print(C)
>>> A = "Roma"; B = 3; C = f"Via {A} n.{B}"; print(C) # Esempio di concatenazione di stringhe e variabili
Via Roma n.3
>>>

2) Estrarre parti di una stringa
Esempi di istruzione:
B = A[I:F] # I ed F non corrispondono a caratteri, ma al punto di separazione fra 2 caratteri.
# Mette nella variabile B i caratteri consecutivi della variabile A che vanno dall’I_esimo al F_esimo.
# Se I > 0 si conta da sinistra, se I < 0 si conta da destra. # Se F > 0 si conta da sinistra, se F < 0 si conta da destra. # Il carattere I deve sempre essere più a sinistra del carattere F. B = A[3] # Mette nella variabile B il quarto carattere della variabile A contando da sinistra
B = A[-3] # Mette nella variabile B il terzo carattere della variabile A contando da destra
B = A[3:7] # Mette nella variabile B i caratteri consecutivi della variabile A dal quarto al settimo contando da sinistra
B = A[3:-7] # Mette nella variabile B i caratteri consecutivi della variabile A dal 4° da sinistra al 8° da destra
B = A[7:-3] # Mette nella variabile B i caratteri consecutivi della variabile A dal 4° da destra al 8° da sinistra
B = A[-7:-3] # Mette nella variabile B i caratteri consecutivi della variabile A dal 4° al 7° a partire da destra
B = A[:3] # Mette nella variabile B i primi 3 caratteri della variabile A
B = A[-3:] # Mette nella variabile B tutti i caratteri della variabile A tranne gli ultimi 3
B = A[3:] # Mette nella variabile B i primi 3 caratteri della variabile A
B = A[:-3] # Mette nella variabile B tutti i caratteri della variabile A tranne i primi 3

A = “abcdefgh1234″; C = 3; B = A[C]; print(f”Il {C + 1}° carattere a partire da sinistra della stringa ‘{A}’ è ‘{B}'”)
A = “abcdefgh1234″; C = 3; B = A[-C]; print(f”Il {C}° carattere a partire da destra della stringa ‘{A}’ è ‘{B}'”)
A = “abcdefgh1234″; C = 3; D = 7; B = A[C:D]; print(f”I {D – C} caratteri dal {C + 1}° al {D}° carattere da sinistra della stringa ‘{A}’ sono ‘{B}'”)
A = “abcdefgh1234″; C = 3; D = 7; B = A[C:-D]; print(f”I caratteri dal {C + 1}° da sinistra al {D + 1}° da destra della stringa ‘{A}’ sono ‘{B}'”)
A = “abcdefgh1234″; C = 3; D = 7; B = A[D:-C]; print(f”I caratteri dal {D + 1}° da sinistra al {C + 1}° da destra della stringa ‘{A}’ sono ‘{B}'”)
A = “abcdefgh1234″; C = 3; D = 7; B = A[-D:-C]; print(f”I {D – C} caratteri dal {C+1}° al {D}° a partire da destra della stringa ‘{A}’ sono ‘{B}'”)
A = “abcdefgh1234″; C = 3; B = A[:C]; print(f”I primi {C} caratteri della stringa ‘{A}’ sono ‘{B}'”)
A = “abcdefgh1234″; C = 3; B = A[-C:]; print(f”Gli ultimi {C} caratteri della stringa ‘{A}’ sono ‘{B}'”)
A = “abcdefgh1234″; C = 3; B = A[C:]; print(f”Se alla stringa ‘{A}’ togliamo i primi {C} caratteri, resta ‘{B}'”)
A = “abcdefgh1234″; C = 3; B = A[:-C]; print(f”Se alla stringa ‘{A}’ togliamo gli ultimi {C} caratteri, resta ‘{B}'”)

Esempi di output:
>>> A = "abcdefgh1234"; C = 3; B = A[C]; print(f"Il {C + 1}° carattere a partire da sinistra della stringa '{A}' è '{B}'")
Il 4° carattere a partire da sinistra della stringa 'abcdefgh1234' è 'd'
>>> A = "abcdefgh1234"; C = 3; B = A[-C]; print(f"Il {C}° carattere a partire da destra della stringa '{A}' è '{B}'")
Il 3° carattere a partire da destra della stringa 'abcdefgh1234' è '2'
>>> A = "abcdefgh1234"; C = 3; D = 7; B = A[C:D]; print(f"I {D - C} caratteri dal {C + 1}° al {D}° carattere da sinistra della stringa '{A}' sono '{B}'")
I 4 caratteri dal 4° al 7° carattere da sinistra della stringa 'abcdefgh1234' sono 'defg'
>>> A = "abcdefgh1234"; C = 3; D = 7; B = A[C:-D]; print(f"I caratteri dal {C + 1}° da sinistra al {D + 1}° da destra della stringa '{A}' sono '{B}'")
I caratteri dal 4° da sinistra al 8° da destra della stringa 'abcdefgh1234' sono 'de'
>>> A = "abcdefgh1234"; C = 3; D = 7; B = A[D:-C]; print(f"I caratteri dal {D + 1}° da sinistra al {C + 1}° da destra della stringa '{A}' sono '{B}'")
I caratteri dal 8° da sinistra al 4° da destra della stringa 'abcdefgh1234' sono 'h1'
>>> A = "abcdefgh1234"; C = 3; D = 7; B = A[-D:-C]; print(f"I {D - C} caratteri dal {C+1}° al {D}° a partire da destra della stringa '{A}' sono '{B}'")
I 4 caratteri dal 4° al 7° a partire da destra della stringa 'abcdefgh1234' sono 'fgh1'
>>> A = "abcdefgh1234"; C = 3; B = A[:C]; print(f"I primi {C} caratteri della stringa '{A}' sono '{B}'")
I primi 3 caratteri della stringa 'abcdefgh1234' sono 'abc'
>>> A = "abcdefgh1234"; C = 3; B = A[-C:]; print(f"Gli ultimi {C} caratteri della stringa '{A}' sono '{B}'")
Gli ultimi 3 caratteri della stringa 'abcdefgh1234' sono '234'
>>> A = "abcdefgh1234"; C = 3; B = A[C:]; print(f"Se alla stringa '{A}' togliamo i primi {C} caratteri, resta '{B}'")
Se alla stringa 'abcdefgh1234' togliamo i primi 3 caratteri, resta 'defgh1234'
>>> A = "abcdefgh1234"; C = 3; B = A[:-C]; print(f"Se alla stringa '{A}' togliamo gli ultimi {C} caratteri, resta '{B}'")
Se alla stringa 'abcdefgh1234' togliamo gli ultimi 3 caratteri, resta 'abcdefgh1'
>>>

3) I METODI
In Python, è detto “metodo” ogni “funzione speciale” già definita dal linguaggio di programmazione allo scopo di assolvere un compito specifico. Analogamente alle funzioni create dagli utenti, i “metodi” hanno una sintassi tipo
DATO.nome_metodo(Eventuali_parametri)
dove:
DATO è il dato a cui si applica il metodo;
nome_metodo() è il nome del metodo che assolve la funzione specifica predefinita da Python;
Eventuali_parametri sono gli eventuali parametri che occorre fornire per poter applicare il metodo.

ATTENZIONE!! Quando si cercano informazioni sui metodi per Python, occorre tener ben presente che libri e siti web, vuoi per desiderio di semplificazione, vuoi perché scritti da persone aventi formazione da autodidatta, spesso utilizzano il termine METODO ed il termine FUNZIONE come se fossero l’uno sinonimo dell’altro.

I tipi di dato messi a disposizione da Python sono i seguenti: interi (int), interi lunghi (long), numeri in virgola mobile (float), numeri complessi (complex), valori booleani (bool), stringhe (str), tuple (tuple), insiemi immutabili (frozenset), liste (list), dizionari (dict), insiemi (set), file (file).
Per conoscere la lista dei metodi relativi ad un tipo di dato, impartire il comando [print(dir(tipoDiDato))] (senza parentesi quadre). Seguono alcuni esempi.
>>> print(dir(int)) # Lista dei metodi relativi a dati tipo numeri interi
['__abs__', '__add__', '__and__', '__bool__', '__ceil__', '__class__', '__delattr__', '__dir__', '__divmod__', '__doc__', '__eq__', '__float__', '__floor__', '__floordiv__', '__format__', '__ge__', '__getattribute__', '__getnewargs__', '__gt__', '__hash__', '__index__', '__init__', '__init_subclass__', '__int__', '__invert__', '__le__', '__lshift__', '__lt__', '__mod__', '__mul__', '__ne__', '__neg__', '__new__', '__or__', '__pos__', '__pow__', '__radd__', '__rand__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__', '__rfloordiv__', '__rlshift__', '__rmod__', '__rmul__', '__ror__', '__round__', '__rpow__', '__rrshift__', '__rshift__', '__rsub__', '__rtruediv__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__truediv__', '__trunc__', '__xor__', 'as_integer_ratio', 'bit_length', 'conjugate', 'denominator', 'from_bytes', 'imag', 'numerator', 'real', 'to_bytes']
>>> print(dir(float)) # Lista dei metodi relativi a dati tipo numeri a virgola mobile
['__abs__', '__add__', '__bool__', '__ceil__', '__class__', '__delattr__', '__dir__', '__divmod__', '__doc__', '__eq__', '__float__', '__floor__', '__floordiv__', '__format__', '__ge__', '__getattribute__', '__getformat__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__int__', '__le__', '__lt__', '__mod__', '__mul__', '__ne__', '__neg__', '__new__', '__pos__', '__pow__', '__radd__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__', '__rfloordiv__', '__rmod__', '__rmul__', '__round__', '__rpow__', '__rsub__', '__rtruediv__', '__set_format__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__truediv__', '__trunc__', 'as_integer_ratio', 'conjugate', 'fromhex', 'hex', 'imag', 'is_integer', 'real']
>>> print(dir(str)) # Lista dei metodi relativi a dati tipo stringa
['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isascii', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'removeprefix', 'removesuffix', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']
>>>

4) Analisi del contenuto di una stringa.
4A) Verificare se una stringa contiene un’altra utilizzando l’operatore in

L’operatore [in] (senza parentesi quadre) consente di verificare se la stringa scritta prima dell’operatore in è contenuta nella stringa scritta dopo l’operatore [in]. L’esito della verifica può essere sia stampato sullo schermo, sia messo dentro una variabile. A seguito della verifica, sono possibili solo due esiti: [True] (senza parentesi quadre) e [Folse] (senza parentesi quadre). Quando la verifica ha esito positivo, l’output dell’istruzione è [True]; quando la verifica ha esito negativo, output dell’istruzione è [Folse]; anteponendo l’operatore logico [not] all’ L’operatore [in], la combinazione di operatori consente di verificare se la stringa scritta prima dell’operatore [not in] NON è contenuta nella stringa scritta dopo l’operatore [not in]; in altre parole, l’esito della verifica è l’opposto di quello che si avrebbe in assenza dell’operatore [not].

"Roma" in "Via Roma n.3" # Verifica se la stringa scritta prima dell'operatore in è contenuta nella stringa scritta dopo l'operatore in
A = "Roma"; A in "Via Roma n.3" # Verifica se la stringa contenuta nella variabile A è contenuta nella stringa scritta dopo l'operatore in
B = "Via Roma n.3"; "Roma" in B # Verifica se la stringa scritta prima dell'operatore in è contenuta nella variabile B
A = "Roma"; B = "Via Roma n.3"; A in B # Verifica se la stringa contenuta nella variabile A è contenuta nella stringa contenuta nella variabile B
A = "Roma"; B = "Via Roma n.3";C = f"L'ipotesi che '{A}' sia contenuta in '{B}' è {A in B}"; print(C)
>>> A = "Roma"; B = "Via Roma n.3";C = f"L'ipotesi che '{A}' sia contenuta in '{B}' è {A in B}"; print(C)
L'ipotesi che 'Roma' sia contenuta in 'Via Roma n.3' è True
>>> A = "roma"; B = "Via Roma n.3";C = f"L'ipotesi che '{A}' sia contenuta in '{B}' è {A in B}"; print(C)
L'ipotesi che 'roma' sia contenuta in 'Via Roma n.3' è False
>>> A = "Roma"; B = "Via Roma n.3";C = f"L'ipotesi che '{A}' NON sia contenuta in '{B}' è {A not in B}"; print(C)
L'ipotesi che 'Roma' NON sia contenuta in 'Via Roma n.3' è False
>>>

4B) Contare quante volte una stringa è contenuta all’interno di un’altra: il metodo .count()
[.count] è un metodo che permette di contare quante volte una stringa è contenuta all’interno di un’altra.
La sua sintassi è qualcosa tipo:
[“Stringa o variabile in cui cercare”.count(“Stringa cercata”)] (senza parentesi quadre). Si può cercare anche una singola lettera, e le lettere maiuscole sono diverse dalle lettere minuscole. Se la stringa cercata NON è contenuta nella stringa in cui cercare, l’esito del comando è il numero 0. Per esempio:
>>> A = "Roma"; B = "Via Roma n.3"; C = B.count(A); print("La stringa '"+A+"' è contenuta",C,"volte all’interno della stringa '"+B+"'")
La stringa 'Roma' è contenuta 1 volte all’interno della stringa 'Via Roma n.3'
>>> A = "a"; B = "Via Roma n.3"; C = B.count(A); print("La stringa '"+A+"' è contenuta",C,"volte all’interno della stringa '"+B+"'")
La stringa 'a' è contenuta 2 volte all’interno della stringa 'Via Roma n.3'
>>> A = "A"; B = "Via Roma n.3"; C = B.count(A); print("La stringa '"+A+"' è contenuta",C,"volte all’interno della stringa '"+B+"'")
La stringa 'A' è contenuta 0 volte all’interno della stringa 'Via Roma n.3'
>>>

4C) Posizione di una stringa all’interno di un’altra: il metodo .index()
[.index] è un metodo che permette di conoscere la posizione di una stringa all’interno di un’altra, contando da sinistra.
La sua sintassi è qualcosa tipo:
[“Stringa o variabile in cui cercare”.index(“Stringa cercata”)] (senza parentesi quadre). Si può cercare anche una singola lettera, e le lettere maiuscole sono diverse dalle lettere minuscole. Se la stringa cercata è contenuta più volte nella stringa in cui cercare, la posizione fornita è quella della prima ricorrenza; se la stringa cercata NON è contenuta nella stringa in cui cercare, l’esito del comando è un errore “substring not found”. Per esempio:
>>> A = "Roma"; B = "Via Roma n.3"; C = B.index(A); print("La posizione della stringa '"+A+"' all’interno della stringa '"+B+"' è", C)
La posizione della stringa 'Roma' all’interno della stringa 'Via Roma n.3' è 4
>>> A = "a"; B = "Via Roma n.3"; C = B.index(A); print("La posizione della stringa '"+A+"' all’interno della stringa '"+B+"' è", C)
La posizione della stringa 'a' all’interno della stringa 'Via Roma n.3' è 2
>>> A = "A"; B = "Via Roma n.3"; C = B.index(A); print("La posizione della stringa '"+A+"' all’interno della stringa '"+B+"' è", C)
Traceback (most recent call last):
File "", line 1, in
A = "A"; B = "Via Roma n.3"; C = B.index(A); print("La posizione della stringa '"+A+"' all’interno della stringa '"+B+"' è", C)
ValueError: substring not found
>>>

4D) Trovare l’elemento di minore o maggiore valore all’interno di una stringa: metodi min() e max()
Ad ogni singolo carattere alfanumerico corrisponde un numero d’ordine, secondo una codifica prestabilita. Oggigiorno la codifica più diffusa è la UTF-16 nella quale ad ogni carattere alfanumerico è associato un numero a 16 bit, ma esiste anche la codifica UTF-32. Ogni codifica UTF conserva la compatibilità con le codifiche UTF precedenti, quindi i primi 256 caratteri della codifica UTF coincidono con i caratteri della tabella ASCII.
La tabella ASCII contiene 256 caratteri, a ciascuno dei quali corrisponde un numero da 0 a 255, ma solo i codici dal 32 al 126 sono caratteri alfanumerici stampabili. Un carattere alfanumerico stampabile, può essere una lettera maiuscola, o una lettera minuscola, o un numero, o un simbolo matematico, o un simbolo di punteggiatura, o un simbolo grafico di qualsiasi altro tipo.
Per conoscere il numero d’ordine associato ad un carattere alfanumerico, si utilizza il comando [ord(X)] (senza parentesi quadre) dove X è una variabile che contiene il singolo carattere alfanumerico di cui si vuole conoscere il numero d’ordine, oppure può essere sostituito direttamente col carattere di cui si vuole conoscere il numero d’ordine, purché fra apici.
Per intenderci: i comandi [X=”A”; ord(X)] forniscono il medesimo output del comando [ord(“A”)].
Se invece si desidera conoscere il carattere corrispondente ad un numero d’ordine, occorre utilizzare il comando [chr(X)] (senza parentesi quadre) dove X è una variabile che contiene il numero d’ordine di cui si vuole conoscere il corrispondente carattere alfanumerico, oppure può essere sostituito direttamente dal numero d’ordine di cui si vuole conoscere il carattere alfanumerico corrispondente.
Per intenderci: i comandi [X=65; chr(X)] forniscono il medesimo output del comando [chr(65)].
Per “elemento di minor valore”, si intende il carattere alfanumerico avente il corrispondente numero d’ordine più basso; per elemento di minor valore, si intende il carattere alfanumerico avente il corrispondente numero d’ordine più alto.
[min()] è un metodo che permette di conoscere l’elemento di minor valore contenuto all’interno di una stringa. La sua sintassi è qualcosa tipo:
[min(“Stringa o variabile in cui cercare”)] (senza parentesi quadre).
[max()] è un metodo che permette di conoscere l’elemento di maggior valore contenuto all’interno di una stringa. La sua sintassi è qualcosa tipo: [max(“Stringa o variabile in cui cercare”)] (senza parentesi quadre).
Per esempio:
>>> A="Stringa-Variabile!";B=min(A);C=max(A);print(f"All’interno della stringa '{A}' il valore minimo è '{B}' (valore: {ord(B)}) ed il valore massimo è '{C}' (valore: {ord(C)}).\nAl numero d'ordine {ord(C)+1} corrisponde il carattere '{chr(ord(C)+1)}'.")
All’interno della stringa 'Stringa-Variabile!' il valore minimo è '!' (valore: 33) ed il valore massimo è 't' (valore: 116).
Al numero d'ordine 117 corrisponde il carattere 'u'.
>>>

5) METODI propri dei dati tipo “STRINGA”
Questi appunti, trattano i metodi per manipolare le stringhe di seguito elencati:
startswith(), endswith(), isalnum(), isalpha(), isdecimal(), isspace(), upper(), lower(), split(), join(), e len()

Esempi di istruzione:
A.startswith(B) # Se contenuto della variabile A inizia con il contenuto della variabile B, fornisce output [True]
A.endswith(B) # Se contenuto della variabile A inizia con il contenuto della variabile B, fornisce output [True]
A.isalnum() # Se la variabile A contiene solo lettere, o solo numeri, o solo lettere e numeri, fornisce output [True]
A.isalpha() # Se la variabile A contiene solo lettere, fornisce output [True]
A.isdecimal() # Se la variabile A contiene solo numeri, fornisce output [True]
A.isspace() # Se la variabile A contiene solo spazi, fornisce output [True]
A.upper() # L'output fornito è il medesimo contenuto della variabile A ma tutto in lettere maiuscole
B = A.upper() # Mette nella variabile B il contenuto della variabile A, ma tutto in lettere maiuscole
A.lower() # L'output fornito è il medesimo contenuto della variabile A ma tutto in lettere maiuscole
B = A.lower() # Mette nella variabile B il contenuto della variabile A, ma tutto in lettere maiuscole
A.split(B) # Divide una stringa contenuta nella variabile A in una lista di stringhe, previo indicazione, all'interno della variabile D, del carattere che fa da separatore
A.join(B) # L'output fornito è l'insieme degli elementi contenuti nella variabile-lista B separati dal contenuto della variabile A
len(A) # L'output fornito è il numero di caratteri alfanumerici contenuti nella stringa A.

A = "Verifica variabile"; B = "Veri"; C = A.startswith(B);C = f"L'ipotesi che '{A}' inizi con '{B}' è {C}"; print(C)
A = "Verifica variabile"; B = "bile"; C = A.endswith(B);C = f"L'ipotesi che '{A}' termini con '{B}' è {C}"; print(C)
A = "ViaRoma3"; C = A.isalnum(); C = f"L'ipotesi che '{A}' contenga solo lettere e numeri, è {C}"; print(C)
A = "ViaRoma"; C = A.isalpha(); C = f"L'ipotesi che '{A}' contenga solo lettere, è {C}"; print(C)
A = "3"; C = A.isdecimal(); C = f"L'ipotesi che '{A}' contenga solo numeri, è {C}"; print(C)
A = " "; C = A.isspace(); C = f"L'ipotesi che '{A}' contenga solo spazi vuoti, è {C}"; print(C)
A = "Via Roma n.3"; C = A.upper(); C = f"La stringa '{A}' tutta in maiuscolo, diventa '{C}'"; print(C)
A = "Via Roma n.3"; C = A.lower(); C = f"La stringa '{A}' tutta in minuscolo, diventa '{C}'"; print(C)
A = "Via Roma n.3"; B = " "; C = A.split(B); print(f"Il contenuto della stringa '{A}' suddiviso in valori di una variabile-lista, è {C}")
A = " "; B = ["Via", "Roma", "N.3"]; C = A.join(B); print(f"I singoli valori '{B}' della variabile-lista B uniti in un'unica variabile intervallati da '{A}', diventano '{C}'.")
A = "Via Roma n.3"; B = len(A); print(f"La stringa '{A}' contiene {B} caratteri.")

Esempi di output:
>>> A = "Verifica variabile"; B = "Veri"; C = A.startswith(B);C = f"L'ipotesi che '{A}' inizi con '{B}' è {C}"; print(C)
L'ipotesi che 'Verifica variabile' inizi con 'Veri' è True
>>> A = "Verifica variabile"; B = "bile"; C = A.endswith(B);C = f"L'ipotesi che '{A}' termini con '{B}' è {C}"; print(C)
L'ipotesi che 'Verifica variabile' termini con 'bile' è True
>>> A = "ViaRoma3"; C = A.isalnum(); C = f"L'ipotesi che '{A}' contenga solo lettere e numeri, è {C}"; print(C)
L'ipotesi che 'ViaRoma3' contenga solo lettere e numeri, è True
>>> A = "ViaRoma"; C = A.isalpha(); C = f"L'ipotesi che '{A}' contenga solo lettere, è {C}"; print(C)
L'ipotesi che 'ViaRoma' contenga solo lettere, è True
>>> A = "3"; C = A.isdecimal(); C = f"L'ipotesi che '{A}' contenga solo numeri, è {C}"; print(C)
L'ipotesi che '3' contenga solo numeri, è True
>>> A = " "; C = A.isspace(); C = f"L'ipotesi che '{A}' contenga solo spazi vuoti, è {C}"; print(C)
L'ipotesi che ' ' contenga solo spazi vuoti, è True
>>> A = "Via Roma n.3"; C = A.upper(); C = f"La stringa '{A}' tutta in maiuscolo, diventa '{C}'"; print(C)
La stringa 'Via Roma n.3' tutta in maiuscolo, diventa 'VIA ROMA N.3'
>>> A = "Via Roma n.3"; C = A.lower(); C = f"La stringa '{A}' tutta in minuscolo, diventa '{C}'"; print(C)
La stringa 'Via Roma n.3' tutta in minuscolo, diventa 'via roma n.3'
>>> A = "Via Roma n.3"; B = " "; C = A.split(B); print(f"Il contenuto della stringa '{A}' suddiviso in valori di una variabile-lista, è {C}")
Il contenuto della stringa 'Via Roma n.3' suddiviso in valori di una variabile-lista, è ['Via', 'Roma', 'n.3']
>>> A = " "; B = ["Via", "Roma", "N.3"]; C = A.join(B); print(f"I singoli valori '{B}' della variabile-lista B uniti in un'unica variabile intervallati da '{A}', diventano '{C}'.")
I singoli valori '['Via', 'Roma', 'N.3']' della variabile-lista B uniti in un'unica variabile intervallati da ' ', diventano 'Via Roma N.3'.
>>> A = "Via Roma n.3"; B = len(A); print(f"La stringa '{A}' contiene {B} caratteri.")
La stringa 'Via Roma n.3' contiene 12 caratteri.
>>>

013 Python3 – Variabili ad indice [Liste] + (Tuple) + {Set} + {Dizionari}.

15 Gennaio, 2023 (22:59) | Linux | By: sargonsei

013 Python 3 – Variabili ad indice [Liste] + (Tuple) + {Set} + {Dizionari}.
In questi appunti, per “Variabili ad indice” si intendono delle variabili il cui nome è qualcosa tipo VAR[INDICE] dove VAR[] è il nome della variabile, e [INDICE] è un numero, o una variabile che contiene un numero. Le variabili ad indice hanno caratteristiche diverse a seconda della tipologia, quindi è molto comune che i testi che ne spiegano il funzionamento si riferiscono a queste variabili citando la tipologia delle stesse, vale a dire LISTA, TUPLA, SET, DIZIONARIO. Le variabili tipo DIZIONARIO possono avere un indice sia numerico, sia alfanumerico.
In fase di definizione: il contenuto di variabili tipo TUPLA non necessita di essere racchiuso fra parentesi (ma può essere racchiuso fra parentesi tonde); il contenuto di variabili tipo LISTA deve essere racchiuso fra parentesi quadre; il contenuto di variabili tipo SET e/o tipo DIZIONARIO deve essere racchiuso fra parentesi graffe.
Seguono i miei appunti nei quali spiego il funzionamento di ciascun tipo di variabile.

1) La LISTA è un tipo di variabile contenente singoli elementi racchiusi fra parentesi quadre e separati gli uni dagli altri da una virgola, ciascuno dei quali può essere: richiamato, sostituito, cancellato, aggiunto. Ciascun singolo elemento della lista può essere richiamato scrivendo il nome della variabile tipo LISTA seguita da un numero [racchiuso fra parentesi quadre] che indica la posizione dell’elemento della LISTA che si intende richiamare.
Seguono esempi di sintassi seguiti da commento esplicativo relativo all’effetto del comando stesso.
VAR = [8, "Lista", "46", 80, 2] # Imposta una lista VAR di 5 elementi
type(VAR) # Verifica la classe della variabile VAR
print(VAR) # Visualizza tutti gli elementi contenuti in VAR
print(VAR[1]) # Visualizza il secondo elemento da sinistra della lista VAR
print(VAR[-1]) # Visualizza il primo elemento da destra della lista VAR
A = VAR[0] + VAR[-1]; VAR.append(A) # Calcola un sesto elemento e lo aggiunge alla lista VAR
print(VAR) # Visualizza tutti gli elementi contenuti nella lista VAR
A = VAR[1] + VAR[2]; VAR.append(A) # Crea un settimo elemento e lo aggiunge alla lista VAR
print(VAR) # Visualizza tutti gli elementi contenuti nella lista VAR
RIMOSSO=VAR.pop(1) # Toglie dalla lista VAR il secondo elemento, e lo mette nella variabile RIMOSSO
print(VAR) # Visualizza tutti gli elementi contenuti nella lista VAR
print(RIMOSSO) # Visualizza il contenuto della variabile RIMOSSO
VAR[0] = 2 # Sostituisce il primo elemento della lista VAR col numero 2
print(VAR) # Visualizza tutti gli elementi contenuti nella lista VAR
VAR.remove(2) # Rimuove il primo numero 2 contenuto nella lista VAR
print(VAR) # Visualizza tutti gli elementi contenuti nella lista VAR
del VAR [1] # Toglie dalla lista VAR il secondo elemento
print(VAR) # Visualizza tutti gli elementi contenuti nella lista VAR

Segue un esempio di output da SHELL IDLE
>>> VAR = [8, "Lista", "46", 80, 2] # Imposta una lista VAR di 5 elementi
>>> type(VAR) # Verifica la classe della variabile VAR
< class 'list'>
>>> print(VAR) # Visualizza tutti gli elementi contenuti in VAR
[8, 'Lista', '46', 80, 2]
>>> print(VAR[1]) # Visualizza il secondo elemento da sinistra della lista VAR
Lista
>>> print(VAR[-1]) # Visualizza il primo elemento da destra della lista VAR
2
>>> A = VAR[0] + VAR[-1]; VAR.append(A) # Aggiunge un sesto elemento alla lista VAR
>>> print(VAR) # Visualizza tutti gli elementi contenuti nella lista VAR
[8, 'Lista', '46', 80, 2, 10]
>>> A = VAR[1] + VAR[2]; VAR.append(A) # Crea un settimo elemento e lo aggiunge alla lista VAR
>>> print(VAR) # Visualizza tutti gli elementi contenuti nella lista VAR
[8, 'Lista', '46', 80, 2, 10, 'Lista46']
>>> RIMOSSO=VAR.pop(1) # Toglie dalla lista VAR il secondo elemento, e lo mette nella variabile RIMOSSO
>>> print(VAR) # Visualizza tutti gli elementi contenuti nella lista VAR
[8, '46', 80, 2, 10, 'Lista46']
>>> print(RIMOSSO) # Visualizza il contenuto della variabile RIMOSSO
Lista
>>> VAR[0] = 2 # Sostituisce il primo elemento della lista VAR col numero 2
>>> print(VAR) # Visualizza tutti gli elementi contenuti nella lista VAR
[2, '46', 80, 2, 10, 'Lista46']
>>> VAR.remove(2) # Rimuove il primo numero 2 contenuto nella lista VAR
>>> print(VAR) # Visualizza tutti gli elementi contenuti nella lista VAR
['46', 80, 2, 10, 'Lista46']
>>> del VAR [1] # Toglie dalla lista VAR il secondo elemento
>>> print(VAR) # Visualizza tutti gli elementi contenuti nella lista VAR
['46', 2, 10, 'Lista46']
>>>

2) La TUPLA è un tipo di variabile contenente singoli elementi racchiusi fra parentesi tonde e separati gli uni dagli altri da una virgola, ciascuno dei quali può essere richiamato, ma non può essere modificato.
Ciascun singolo elemento della tupla può essere richiamato scrivendo il nome della variabile tipo tupla seguita da un numero [racchiuso fra parentesi quadre] che indica la posizione dell’elemento della tupla che si intende richiamare.
Seguono esempi di sintassi seguiti da commento esplicativo relativo all’effetto del comando stesso.
VAR = (6, "Tupla", "44", 78, 2) # Imposta una variabile VAR di 5 elementi
type(VAR) # Verifica la classe della variabile VAR
print(VAR) # Visualizza tutti gli elementi contenuti nella tupla VAR
print(VAR[1]) # Visualizza il secondo elemento da sinistra della tupla VAR
print(VAR[-1]) # Visualizza il primo elemento da destra della tupla VAR

Segue un esempio di output da SHELL IDLE
>>> VAR = (6, "Tupla", "44", 78, 2) # Imposta una variabile VAR di 5 elementi
>>> type(VAR) # Verifica la classe della variabile VAR
< class 'tuple'>
>>> print(VAR) # Visualizza tutti gli elementi contenuti nella tupla VAR
(6, 'Tupla', '44', 78, 2)
>>> print(VAR[1]) # Visualizza il secondo elemento da sinistra della tupla VAR
Tupla
>>> print(VAR[-1]) # Visualizza il primo elemento da destra della tupla VAR
2
>>>

3) Il SET è un tipo di variabile contenente singoli elementi racchiusi fra parentesi graffe e separati gli uni dagli altri da una virgola, ciascuno dei quali può essere successivamente cancellato.
È altresì possibile aggiungere un nuovo elemento del set; il tentativo di aggiungere un elemento già presente, non da luogo ad alcun errore, ma non viene eseguito.
Per sua natura, gli elementi contenuti in un SET non sono indicizzati, quindi, per visualizzare un singolo elemento, occorre prima trasformare l’intero SET in una LISTA.
Seguono esempi di sintassi seguiti da commento esplicativo relativo all’effetto del comando stesso.

VAR = {9, "Set", "47", 81, 5} # Imposta un set di 5 elementi
type(VAR) # Verifica la classe della variabile VAR
print(VAR) # Visualizza tutti gli elementi contenuti in VAR
VAR.add("Mare") # Aggiunge un sesto elemento al set VAR
print(VAR) # Visualizza tutti gli elementi contenuti in VAR
VAR.remove(5) # Rimuove il numero 5 contenuto nel set VAR
print(VAR) # Visualizza tutti gli elementi contenuti nel set VAR
print(VAR[1]) # Tenta di visualizzare il secondo elemento da sinistra del set VAR
VAR = list(VAR) # converte il set VAR nella lista VAR
type(VAR)# Verifica la classe della variabile VAR
print(VAR) # Visualizza tutti gli elementi contenuti in VAR
print(VAR[1]) # Visualizza il secondo elemento da sinistra della lista VAR

Segue un esempio di output da SHELL IDLE
>>> VAR = {9, "Set", "47", 81, 5} # Imposta un set di 5 elementi
>>> type(VAR) # Verifica la classe della variabile VAR
< class 'set'>
>>> print(VAR) # Visualizza tutti gli elementi contenuti in VAR
{'47', 81, 5, 9, 'Set'}
>>> VAR.add("Mare") # Aggiunge un sesto elemento al set VAR
>>> print(VAR) # Visualizza tutti gli elementi contenuti in VAR
{'47', 81, 5, 9, 'Mare', 'Set'}
>>> VAR.remove(5) # Rimuove il numero 5 contenuto nel set VAR
>>> print(VAR) # Visualizza tutti gli elementi contenuti nel set VAR
{'47', 81, 9, 'Mare', 'Set'}
>>> print(VAR[1]) # Tenta di visualizzare il secondo elemento da sinistra del set VAR
Traceback (most recent call last):
File "", line 1, in
print(VAR[1]) # Tenta di visualizzare il secondo elemento da sinistra del set VAR
TypeError: 'set' object is not subscriptable
>>> VAR = list(VAR) # converte il set VAR nella lista VAR
>>> type(VAR)# Verifica la classe della variabile VAR
< class 'list'>
>>> print(VAR) # Visualizza tutti gli elementi contenuti in VAR
['47', 81, 9, 'Mare', 'Set']
>>> print(VAR[1]) # Visualizza il secondo elemento da sinistra della lista VAR
81
>>>

4) Anche il FROZENSET è un tipo di variabile contenente singoli elementi racchiusi fra parentesi graffe e separati gli uni dagli altri da una virgola, ciascuno dei quali può essere successivamente cancellato.
Per sua natura, gli elementi contenuti in un FROZENSET non sono indicizzati, quindi, per visualizzare un singolo elemento, occorre prima trasformare l’intero FROZENSET in una LISTA o in una TUPLA.
A differenza del SET, il FROZENSET è immutabile, quindi non è possibile aggiungere un nuovo elemento, né togliere o sostituire un elemento preesistente.
Seguono esempi di sintassi seguiti da commento esplicativo relativo all’effetto del comando stesso.

VAR = frozenset({9, "Set", "47", 81, 5}) # Imposta un FROZENSET di 5 elementi
type(VAR) # Verifica la classe della variabile VAR
print(VAR) # Visualizza tutti gli elementi contenuti in VAR
VAR.add("Mare") # Tenta di aggiungere un sesto elemento al set VAR
VAR.remove(5) # Tenta di rimuovere il numero 5 contenuto nel set VAR
print(VAR[1]) # Tenta di visualizzare il secondo elemento da sinistra del set VAR
print(VAR) # Visualizza tutti gli elementi contenuti nel set VAR
VAR = list(VAR) # converte il FROZENSET VAR nella lista VAR
type(VAR)# Verifica la classe della variabile VAR
print(VAR) # Visualizza tutti gli elementi contenuti in VAR
print(VAR[1]) # Visualizza il secondo elemento da sinistra della lista VAR

Segue un esempio di output da SHELL IDLE
>>> VAR = frozenset({9, "Set", "47", 81, 5}) # Imposta un FROZENSET di 5 elementi
>>> type(VAR) # Verifica la classe della variabile VAR

>>> print(VAR) # Visualizza tutti gli elementi contenuti in VAR
frozenset({81, 5, 'Set', 9, '47'})
>>> VAR.add("Mare") # Tenta di aggiungere un sesto elemento al set VAR
Traceback (most recent call last):
File "", line 1, in
VAR.add("Mare") # Tenta di aggiungere un sesto elemento al set VAR
AttributeError: 'frozenset' object has no attribute 'add'
>>> VAR.remove(5) # Tenta di rimuovere il numero 5 contenuto nel set VAR
Traceback (most recent call last):
File "", line 1, in
VAR.remove(5) # Tenta di rimuovere il numero 5 contenuto nel set VAR
AttributeError: 'frozenset' object has no attribute 'remove'
>>> print(VAR[1]) # Tenta di visualizzare il secondo elemento da sinistra del set VAR
Traceback (most recent call last):
File "", line 1, in
print(VAR[1]) # Tenta di visualizzare il secondo elemento da sinistra del set VAR
TypeError: 'frozenset' object is not subscriptable
>>> print(VAR) # Visualizza tutti gli elementi contenuti nel set VAR
frozenset({81, 5, 'Set', 9, '47'})
>>> VAR = list(VAR) # converte il FROZENSET VAR nella lista VAR
>>> type(VAR)# Verifica la classe della variabile VAR

>>> print(VAR) # Visualizza tutti gli elementi contenuti in VAR
[81, 5, 'Set', 9, '47']
>>> print(VAR[1]) # Visualizza il secondo elemento da sinistra della lista VAR
5
>>>

5) Il DIZIONARIO è un tipo di variabile contenente coppie di elementi racchiusi fra parentesi graffe. Il primo elemento di ciascuna coppia è detto “CHIAVE”, mentre il secondo elemento è detto “VALORE”. Ogni singola “CHIAVE” è separata dal corrispondente “VALORE” tramite il carattere duepunti {:}, ed ogni singola coppia è separata con una virgola {,} sia dalla coppia che la precede, sia dalla coppia che la segue. Come avviene per ciascun elemento di una LISTA, ciascuna coppia di elementi di un DIZIONARIO può essere: richiamata, sostituita, cancellata, aggiunta. Nei dizionari, ogni singola “CHIAVE” assolve la medesima funzione assolta dall’ “INDICE” in LISTE, TUPLE, e SET, mentre ogni singolo “VALORE” ha la medesima funzione che ha un “VALORE” in LISTE, TUPLE, e SET.
Qualora di desideri convertire una variabile-dizionario in una variabile-lista, è possibile sia creare una LISTA contenente solo le CHIAVI, sia creare una LISTA contenente solo i VALORI, sia creare una LISTA contenente CHIAVI e VALORI.
VAR = {"CHIAVE":"Valore", 1:"Primo", "SECONDO":2, 9:20, "NUMERI":[2, 3, 5, 7]}

VAR = {"CHIAVE":"Valore", 1:"Primo", "SECONDO":2, 9:20, "NUMERI":[2, 3, 5, 7]} # Imposta la variabile-dizionario VAR di 5 elementi
type(VAR) # Verifica la classe della variabile-dizionario VAR
print(VAR) # Visualizza tutti gli elementi contenuti nella variabile-dizionario VAR
print(VAR[1]) # Visualizza il valore della variabile-dizionario VAR avente chiave 1
print(VAR["SECONDO"]) # Visualizza il valore della variabile-dizionario VAR avente chiave "SECONDO"
A = VAR["SECONDO"] + VAR[9]; VAR["key"] = A # Calcola un sesto elemento e lo aggiunge alla variabile-dizionario VAR.
print(VAR) # Visualizza tutti gli elementi contenuti nella variabile-dizionario VAR
"SETTE" in VAR # Controlla se l’indice "SETTE" è presente nella variabile-dizionario VAR
A = VAR[1] + VAR["CHIAVE"]; VAR["SETTE"] = A # Crea un settimo elemento e lo aggiunge alla variabile-dizionario VAR
"SETTE" in VAR # Controlla se l’indice "SETTE" è presente nella variabile-dizionario VAR
print(VAR) # Visualizza tutti gli elementi contenuti nella variabile-dizionario VAR
VAR["CHIAVE"] = "Nuovo valore" # Sostituisce il valore della variabile-dizionario VAR avente chiave "CHIAVE" con "Nuovo valore".
print(VAR) # Visualizza tutti gli elementi contenuti nella variabile-dizionario VAR
del VAR["key"] # Toglie dalla variabile-dizionario VAR il valore corrispondente alla chiave "key"
print(VAR) # Visualizza tutti gli elementi contenuti nella variabile-dizionario VAR
VAR.keys() # Visualizza tutte le chiavi contenute nella variabile-dizionario VAR
VAR.values() # Visualizza tutti i valori contenuti nella variabile-dizionario VAR
VAR.items() # Visualizza chiavi e valori contenuti nella variabile-dizionario VAR come fossero contenuti in una lista

ITEM_VAR = VAR.items() # Crea la variabile ITEM_VAR tipo ITEM contenente chiavi e valori contenuti nella variabile-dizionario VAR
print(ITEM_VAR) # Visualizza tutti gli elementi contenuti nella variabile-item LISTAVAR
type(ITEM_VAR) # Verifica la classe della variabile-item LISTAVAR

Esempi di output
>>> VAR = {"CHIAVE":"Valore", 1:"Primo", "SECONDO":2, 9:20, "NUMERI":[2, 3, 5, 7]} # Imposta la variabile-dizionario VAR di 5 elementi
>>> type(VAR) # Verifica la classe della variabile-dizionario VAR
< class 'dict'>
>>> print(VAR) # Visualizza tutti gli elementi contenuti nella variabile-dizionario VAR
{'CHIAVE': 'Valore', 1: 'Primo', 'SECONDO': 2, 9: 20, 'NUMERI': [2, 3, 5, 7]}
>>> print(VAR[1]) # Visualizza il valore della variabile-dizionario VAR avente chiave 1
Primo
>>> print(VAR["SECONDO"]) # Visualizza il valore della variabile-dizionario VAR avente chiave "SECONDO"
2
>>> A = VAR["SECONDO"] + VAR[9]; VAR["key"] = A # Calcola un sesto elemento e lo aggiunge alla variabile-dizionario VAR.
>>> print(VAR) # Visualizza tutti gli elementi contenuti nella variabile-dizionario VAR
{'CHIAVE': 'Valore', 1: 'Primo', 'SECONDO': 2, 9: 20, 'NUMERI': [2, 3, 5, 7], 'key': 22}
>>> "SETTE" in VAR # Controlla se l’indice "SETTE" è presente nella variabile-dizionario VAR
False
>>> A = VAR[1] + VAR["CHIAVE"]; VAR["SETTE"] = A # Crea un settimo elemento e lo aggiunge alla variabile-dizionario VAR
>>> "SETTE" in VAR # Controlla se l’indice "SETTE" è presente nella variabile-dizionario VAR
True
>>> print(VAR) # Visualizza tutti gli elementi contenuti nella variabile-dizionario VAR
{'CHIAVE': 'Valore', 1: 'Primo', 'SECONDO': 2, 9: 20, 'NUMERI': [2, 3, 5, 7], 'key': 22, 'SETTE': 'PrimoValore'}
>>> VAR["CHIAVE"] = "Nuovo valore" # Sostituisce il valore della variabile-dizionario VAR avente chiave "CHIAVE" con "Nuovo valore".
>>> print(VAR) # Visualizza tutti gli elementi contenuti nella variabile-dizionario VAR
{'CHIAVE': 'Nuovo valore', 1: 'Primo', 'SECONDO': 2, 9: 20, 'NUMERI': [2, 3, 5, 7], 'key': 22, 'SETTE': 'PrimoValore'}
>>> del VAR["key"] # Toglie dalla variabile-dizionario VAR il valore corrispondente alla chiave "key"
>>> print(VAR) # Visualizza tutti gli elementi contenuti nella variabile-dizionario VAR
{'CHIAVE': 'Nuovo valore', 1: 'Primo', 'SECONDO': 2, 9: 20, 'NUMERI': [2, 3, 5, 7], 'SETTE': 'PrimoValore'}
>>> VAR.keys() # Visualizza tutte le chiavi contenute nella variabile-dizionario VAR
dict_keys(['CHIAVE', 1, 'SECONDO', 9, 'NUMERI', 'SETTE'])
>>> VAR.values() # Visualizza tutti i valori contenuti nella variabile-dizionario VAR
dict_values(['Nuovo valore', 'Primo', 2, 20, [2, 3, 5, 7], 'PrimoValore'])
>>> VAR.items() # Visualizza chiavi e valori contenuti nella variabile-dizionario VAR come fossero contenuti in una lista
dict_items([('CHIAVE', 'Nuovo valore'), (1, 'Primo'), ('SECONDO', 2), (9, 20), ('NUMERI', [2, 3, 5, 7]), ('SETTE', 'PrimoValore')])
>>> ITEM_VAR = VAR.items() # Crea la variabile ITEM_VAR tipo ITEM contenente chiavi e valori contenuti nella variabile-dizionario VAR
>>> print(ITEM_VAR) # Visualizza tutti gli elementi contenuti nella variabile-item LISTAVAR
dict_items([('CHIAVE', 'Nuovo valore'), (1, 'Primo'), ('SECONDO', 2), (9, 20), ('NUMERI', [2, 3, 5, 7]), ('SETTE', 'PrimoValore')])
>>> type(ITEM_VAR) # Verifica la classe della variabile-item LISTAVAR
< class 'dict_items' >
>>>

012 Python3 – Script Calcolatrice (+ – x : Potenza Radice)

1 Gennaio, 2023 (19:42) | Linux | By: sargonsei

#
# Python3 - Script Calcolatrice (+ - x : Potenza Radice)
# 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
#
# Per avviare questo script:
# 1) Salvarlo nella cartella di lavoro, con nome ed estensione che si preferisce (Estensioni comuni: .py .pyw .pyc .pyo .pyd )
# 2) Aprire un terminale nella cartella di lavoro 
# 3) Impartire il comando: [python3 < nomeDelloScript.EstensioneDelloScript >]
#
def DATI(X, Y):          # Inizio definizione funzione DATI()
    XX = float(input(X)) # Acquisisce il primo numero e lo mette in una variabile a virgola mobile
    YY = float(input(Y)) # Acquisisce il secondo numero e lo mette in una variabile a virgola mobile
    return(XX, YY)       # Restituisce i valori contenuti nelle due variabili a virgola mobile
def SOMMA(ADD1, ADD2): # Inizio definizione funzione SOMMA()
    SUM = ADD1 + ADD2  # Calcola la somma dei 2 numeri
    SUM1 = "\nLa somma fra l'addendo " + str(ADD1) + " e l'addendo " + str(ADD2) + " vale " +str(SUM)
    SUM1 = "(" + str(ADD1) + " + " + str(ADD2) + ")= " + str(SUM) + SUM1
    return(SUM1)
def SOTTRAZIONE(MIN, SOT): # Inizio definizione funzione SOTTRAZIONE()
    DIF = MIN - SOT        # Calcola la differenza dei 2 numeri
    DIF1 = "\nLa differenza fra il minuendo " + str(MIN) + " ed il sottraendo " + str(SOT) + " vale " +str(DIF)
    DIF1 = "(" + str(MIN) + " - " + str(SOT) + ")= " + str(DIF) + DIF1
    return(DIF1)
def MOLTIPLICAZIONE(MOLTIPLICANDO, MOLTIPLICATORE): # Inizio definizione funzione MOLTIPLICAZIONE()
    PRO = MOLTIPLICANDO * MOLTIPLICATORE            # Calcola il prodotto dei 2 numeri
    PRO1 = "\nIl prodotto fra il fattore " + str(MOLTIPLICANDO) + " ed il fattore " + str(MOLTIPLICATORE) + " vale " +str(PRO)
    PRO1 = "(" + str(MOLTIPLICANDO) + " x " + str(MOLTIPLICATORE) + ")= " + str(PRO) + PRO1
    return(PRO1)
def DIVISIONE(DIVIDENDO, DIVISORE): # Inizio definizione funzione DIVISIONE()
    QUOTO = DIVIDENDO / DIVISORE    # Calcola il QUOTO
    QUOZ = DIVIDENDO // DIVISORE    # Calcola il QUOZIENTE
    RESTO = DIVIDENDO % DIVISORE    # Calcola il RESTO
    DIV1 = "\n(Dividendo : Divisore) = Quoto = (Quoziente e Resto)"
    DIV1 = "(" + str(DIVIDENDO) + " : " + str(DIVISORE) + ")= " + str(QUOTO)  + " =(" + str(QUOZ) + " e resto " + str(RESTO) +")" + DIV1
    return(DIV1)
def POTENZA(BASE, EXP): # Inizio definizione funzione POTENZA()
    POT = BASE ** EXP   # Calcola la potenza della BASE
    return(POT)
def RADICE(RADICANDO, INDICE):        # Inizio definizione funzione RADICE()
    RADICE = RADICANDO ** (1/INDICE)  # Calcola la radice del RADICANDO
    return(RADICE)
MENU = """Operazioni possibili:
0) Chiudere questo script.
1) Addizione
2) Sottrazione
3) Moltiplicazione
4) Divisione
5) Elevazione a potenza
6) Estrazione radice
"""
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.")
        X1 = "Primo addendo ? "
        Y1 = "Secondo addendo ? "
        X2, Y2 = DATI(X1, Y1)     # Chiama la funzione DATI() previo trasferimento del contenuto delle variabili X1 e Y1.
        RISULTATO = SOMMA(X2, Y2) # Chiama la funzione SOMMA() previo trasferimento del contenuto delle variabili X2 e Y2.
    elif SCELTA == "2":
        print("Hai digitato la scelta 2, quindi verrà eseguita la sottrazione fra 2 numeri.")
        X1 = "Minuendo ? "
        Y1 = "Sottraendo ? "
        X2, Y2 = DATI(X1, Y1)     # Chiama la funzione DATI() previo trasferimento del contenuto delle variabili X1 e Y1.
        RISULTATO = SOTTRAZIONE(X2, Y2) # Chiama la funzione SOTTRAZIONE() previo trasferimento del contenuto delle variabili X2 e Y2.
    elif SCELTA == "3":
        print("Hai digitato la scelta 3, quindi verrà eseguita la moltiplicazione fra 2 numeri.")
        X1 = "Moltiplicando ? "
        Y1 = "Moltiplicatore ? "
        X2, Y2 = DATI(X1, Y1)     # Chiama la funzione DATI() previo trasferimento del contenuto delle variabili X1 e Y1.
        RISULTATO = MOLTIPLICAZIONE(X2, Y2) # Chiama la funzione MOLTIPLICAZIONE() previo trasferimento del contenuto delle variabili X2 e Y2.
    elif SCELTA == "4":
        print("Hai digitato la scelta 4, quindi verrà eseguita la divisione fra 2 numeri.")
        X1 = "Dividendo ? "
        Y1 = "Divisore ? "
        X2, Y2 = DATI(X1, Y1)     # Chiama la funzione DATI() previo trasferimento del contenuto delle variabili X1 e Y1.
        RISULTATO = DIVISIONE(X2, Y2) # Chiama la funzione DIVISIONE() previo trasferimento del contenuto delle variabili X2 e Y2.
    elif SCELTA == "5":
        print("Hai digitato la scelta 5, quindi verrà eseguita l'elevazione a potenza fra 2 numeri.")
        X1 = "Base ? "
        Y1 = "Esponente ? "
        X2, Y2 = DATI(X1, Y1)     # Chiama la funzione DATI() previo trasferimento del contenuto delle variabili X1 e Y1.
        RISULTATO = POTENZA(X2, Y2) # Chiama la funzione POTENZA() previo trasferimento del contenuto delle variabili X2 e Y2.
    elif SCELTA == "6":
        print("Hai digitato la scelta 6, quindi verrà eseguita la radice fra 2 numeri.")
        X1 = "Radicando ? "
        Y1 = "Indice ? "
        X2, Y2 = DATI(X1, Y1)     # Chiama la funzione DATI() previo trasferimento del contenuto delle variabili X1 e Y1.
        RISULTATO = RADICE(X2, Y2) # Chiama la funzione RADICE() previo trasferimento del contenuto delle variabili X2 e Y2.
    else:
        print("La scelta " + SCELTA + " non è una scelta valida")
        continue # Ricomincia il ciclo 'while'
    # Fine del ciclo 'if', 'elif', 'else'
    print(RISULTATO)
    input("Per poter proseguire, premere il tasto [Invio]")
# Fine del ciclo 'while'
#