PROBLEMA Output errato in cifrario di Cesare

Hero467

Utente Attivo
689
404
OS
I use ARCH btw
Ciao a tutti,
per puro scopo didattico mi sono messo a programmare il cifrario di Cesare in Python, con un programma che cifra i messaggi e uno che li decifra. Dopo aver completato entrambi i programmi li ho provati, cifrando un messaggio e decifrandolo con la chiave corrispondente nel secondo programma, ma l’output che ne risulta è totalmente errato. Ho però eseguito più volte i passaggi a mano, e il risultato mi esce. Quale può essere il problema?

Python:
from random import randint

class Caesar:
    def __init__(self, message, key):
        self.message = message
        self.key = key
        self.pos = 0
    
    def get_char(self):
        current_char = self.message[self.pos]
    
        return current_char
    
    def cipher_c(self):
        char = self.get_char()
        if ord(char) + self.key <= 126:
            encr_char = chr(ord(char) - self.key)
        else:
            a = 126 - ord(char)
            encr_char = chr(32 - a + self.key)
        
        return encr_char
    
    def assemble_message(self):
        msg = ’’
        for i in range(len(self.message)):
            char = self.cipher_c()
            msg += char
            self.pos += 1
    
        return msg
    
    
if __name__ == '__main__':
    key = randint(1, 57)
    print(‘Chiave:’, key)
    while True:
        message = input('Inserisci il messaggio da criptare: ')
        if message == 'stop':
            break
        caesar = Caesar(message, key)
        print(caesar.assemble_message())

Python:
class Caesar:
    def __init__(self, key, message):
        self.message = message
        self.key = key
        self.pos = 0
    
    def get_char(self):
        current_char = self.message[self.pos]
    
        return current_char
    
    def decipher_c(self):
        char = self.get_char()
        if ord(char) + self.key >= 33:
            decr_char = chr(ord(char) + self.key)
        else:
            a = ord(char) - self.key
            b = 32 - a
            decr_char = chr(126 - b)
        
        return decr_char
    
    def assemble_message(self):
        msg = ’’
        for i in range(len(self.message)):
            char = self.decipher_c()
            msg += char
            self.pos += 1
    
        return msg
    
    
if __name__ == '__main__':
    key = int(input('Chiave: '))
    while True:
        message = input('\nInserisci il messaggio da decriptare: ')
        if message == 'stop':
            break
        caesar = Caesar(key, message)
        print(caesar.assemble_message())

Output del cifratore:
Codice:
Chiave: 25        // chiave generata dal programma, la stampa per praticità

Inserisci il messaggio da criptare: Ciao
\$z*

Output del decifratore:
Codice:
Chiave: 25          // input richiesto dal programma per decifrare il messaggio
Inserisci il messaggio da decriptare: \$z*
u=(carattere non stampabile)C
 
Ultima modifica:

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!