Forum
>>
Principianti
>>
Cifrario di Cesare
Pagina: 1
Esegui il login per scrivere una risposta.
Pagina: 1
Scritto da Lime_In_The_Coconut |
2016-09-16 21:41:49 - Cifrario di Cesare
|
Ciao a tutti,
ho da poco inziato a studiare Python e la programmazione in generale, e vorrei chiedervi un aiuto in merito ad uno script che ho incontrato in un libro e che non riesco a comprendere appieno. Lo script praticamente simula il metodo di cifratura noto come "Cifrario di Cesare": in una parola, ciascuna lettera contenuta viene trasformata in un'altra lettera distante dalla prima un certo numero di passi (ad esempio: "Cane", se scegliamo come distanza 1, verrà trasformata in "Dbof" - spero di essermi spiegato, su wikipedia comunque trovate una descrizione maggiormente dettagliata: https://it.wikipedia.org/wiki/Cifrario_di_Cesare Lo script chiede all'utente di inserire una stringa da decifrare (una password diciamo) e di stabilire la distanza, dopodiché effettua la conversione: plainText=input("Digita una parola in lettera minuscola: ") distance=int(input("Digita il valore della distanza: ") code="" for ch in plainText: ordValue=ord(ch) cipherValue = ordValue + distance if cipherValue > ord('z'): cipherValue= ord('a') + distance - \ (ord('z') - ordValue+1) code+=chr(ciphervalue) print(code) Mi è tutto chiaro sino alla riga 8: partiamo dal presupposto che le lettere minuscole dell'alfabeto italiano sono 26 (si parte da 0, quindi la lettera 'z' ha il valore 25 - non sto usando qui i corrispettivi valori numerici in ASCII) Quindi, se ad esempio mi trovo davanti la lettera con ordinale 22 ("w") e pongo la distanza a 6, andrò a sforare oltre la lettera 'z' innescando le istruzioni contenute nell'if quello che non mi è chiaro è l'operazione contenuta nella variabile cipherValue contenuta nell'if: calcolo la distanza da 'a' (quindi es 0+6) a cui sottraggo il valore di 'z' meno l'ordinale della lettera ciclata più 1, nel nostro esempio: (0+6)-(25-23)=6-2=4. quindi sostituisco 'w' con 'e'....Giusto?? Non mi è chiara principalmente la seconda espressione (ord('z')-OrdValue+1) Inoltre non riesco a capire lo slash \ a riga 8 Vi ringrazio infinitamente per l'aiuto, in matematica sono un po' arrugginito, quindi forse è per questo che mi blocco... Grazie!!! --- Ultima modifica di Lime In The Coconut in data 2016-09-16 21:43:57 --- --- Ultima modifica di Lime In The Coconut in data 2016-09-16 21:46:41 --- |
|
Scritto da Claudio_F |
2016-09-17 13:04:46 - Re: Cifrario di Cesare
|
Il for non è indentato correttamente ma l'algoritmo si intuisce lo stesso.
Quella formula è solo un modo molto complicato per scrivere: ordValue + distance - 26 Il backslash serve per spezzare l'istruzione/espressione su più righe, ma se possibile andrebbe evitato. Ad esempio le espressioni racchiuse tra parentesi possono essere scritte su più righe senza bisogno di backslash: cipherValue = ( ord('a') + distance - (ord('z') - ordValue + 1) ) Ah, non usare tabulazioni per incolonnare il programma ma solo spazi, questo è lo standard usato in Python. *** Il codice va evidenziato con il simbolo di fianco ai colori per non perdere l'indentazione *** |
Pagina: 1
Esegui il login per scrivere una risposta.