2016-07-29 16 views
-1

Könnten Sie bitte mit dem folgenden Code helfen. Ich versuche, eine Funktion def encrypt schreiben (Text, rot), die Eingabe als String und Integer erhalten. Meine Funktion sollte dazu führen, dass jeder Buchstabe im Text um keine Drehung nach rechts gedreht wird. Zum Beispiel sollte meine Ausgabe so aussehen: `Das Endergebnis ist wie folgt:Python-Verschlüsselung und Rotation

Enter a message: 
Hello! 
Rotate by: 
5 
Mjqqt 

!

Dies ist der Code:

def encrypt(text, rot): 
    alphabet = 'abcdefghijklmnopqrstuvwxyz' 
    encrypted = '' 
    for char in text, rot: 
     if char == ' ': 
      encrypted = encrypted + ' ' 
     else: 
      rotated_index = alphabet.index(char) + 5 
      if rotated_index < 26: 
       encrypted = encrypted + alphabet[rotated_index] 
      else: 
       encrypted = encrypted + alphabet[rotated_index % 26] 
    return encrypted 

print(rot5('abcde')) 

Könnten Sie mit dem oben folgenden Code bitte helfen. Dies sollte die folgende Ausgabe erzeugen: Geben Sie eine Nachricht ein: Hallo! Drehen von: Mjqqt


Danke. Ich habe das korrigiert, aber das Problem ist, wenn ich hallo zu Hallo, Welt ändern, gibt es mir einen Fehler.

def encrypt(text, rot): 
alphabet = 'abcdefghijklmnopqrstuvwxyz' 
encrypted = '' 
for char in text: 
    if char == ' ': 
     encrypted = encrypted + ' ' 
    else: 
     rotated_index = alphabet.index(char) + rot 
     if rotated_index < 26: 
      encrypted = encrypted + alphabet[rotated_index] 
     else: 
      encrypted = encrypted + alphabet[rotated_index % 26] 
return encrypted 

print(encrypt('Hello, World', 5)) 
+0

Was scheint das Problem damit zu sein? – Pureferret

+0

@vist Sollte nicht 'drucken (rot5 ('abcde'))' '' drucken (verschlüsseln ('abcde', 5)) '? – Shubham

+1

@vist Ändere 'print (rot5 ('abcde'))' um 'zu drucken (encrypt ('abcde', 5))' und 'für char in text, rot:' zu 'für char in text' und der Code scheint um gut zu arbeiten. Die Ausgabe für diesen Aufruf lautet "fghij". – Shubham

Antwort

0

Sie müssen nicht prüfen, ob der Index kleiner als 26 ist, weil der % Bediener die Dividende zurückgibt, wenn die Dividende als der Divisor kleiner ist (26), und der Rest, wenn die Dividende größer oder gleich dem Divisor.

def rotate(s, n): 
    from string import ascii_letters as letters 
    length = len(letters) 
    for char in s: 
     index = (letters.find(char) + n) % length 
     yield letters[index] 

''.join(rot('Hello', 5)) 
'Mjqqt'