def cifra(messaggio, shift):
    """
    Cifra il messaggio usando il cifrario di Cesare con lo spostamento dato.
    - Lettere minuscole rimangono minuscole
    - Lettere maiuscole rimangono maiuscole
    - Caratteri non alfabetici (spazi, numeri, punteggiatura) rimangono invariati
    """
    risultato = ""

    for c in messaggio:
        if c.islower():
            base = ord('a')
            codice = ord(c)
            nuovo_codice = (codice - base + shift) % 26 + base
            cifrato = chr(nuovo_codice)
            calcolo = f"({codice} - {base} + {shift}) % 26 + {base} = {nuovo_codice}"

        elif c.isupper():
            base = ord('A')
            codice = ord(c)
            nuovo_codice = (codice - base + shift) % 26 + base
            cifrato = chr(nuovo_codice)
            calcolo = f"({codice} - {base} + {shift}) % 26 + {base} = {nuovo_codice}"

        else:
            cifrato = c

        risultato += cifrato

    return risultato



messaggio = input("Inserire un messaggio da cifrare: ")

shift = 0
while shift < 1 or shift > 25:
    try:
        shift = int(input("Inserire il valore di spostamento (1-25): "))
        if shift < 1 or shift > 25:
            print("Valore fuori intervallo. Inserire un numero tra 1 e 25.")
    except ValueError:
        print("Input non valido. Inserire un numero intero.")

testo_cifrato = cifra(messaggio, shift)

print(f"Messaggio cifrato:   {testo_cifrato}")
