Forum >> Principianti >> Cifrario di Cesare

Pagina: 1

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 ---
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.