2017-10-22 2 views
1

Im Wesentlichen muss ich eine Eingabe nehmen, sie in die entsprechende Zahl umwandeln, dann in der Liste für alles, was in "Offset" eingegeben wird, hochzählen und die neuen entsprechenden Zahlen zurückgeben.Eine Liste hochzählen

Zum Beispiel für "de" würde ich es in "4", "5" übersetzen und ich muss dann bis zu "7", "8" zählen und das Programm "gh" zurückgeben.

Kämpfen, um herauszufinden, wie man tatsächlich die Liste nach oben bewegt.

import string 

translate = { 
'a': "1", 'b': "2", 'c': "3", 'd': "4", 'e': "5", 'f': "6", 
'g': "7", 'h': "8", 'i': "9", 'j': "10", 'k': "11", 'l': "12", 
'm': "13", 'n': "14", 'o': "15", 'p': "16", 'q': "17", 'r': "18", 
's': "19", 't': "20", 'u': "21", 'v': "22", 'w': "23", 'x': "24", 
'y': "25", 'z': "26", 
} 

msg = input("Enter Message: ") 
offset = input("Enter Offset: ") 
caesar = [translate[ch.lower()] for ch in msg if ch in string.ascii_letters] 
+2

Was genau bedeutet * "nach oben auf der Liste" *? Beachten Sie auch, dass es einfacher ist, den Offset mit ganzen Zahlen als Strings hinzuzufügen. – jonrsharpe

+0

Wenn ich gut verstehe, sollten Sie ein umgekehrtes Wörterbuch erstellen und nur den Wert dieses Wörterbuchs suchen. Zum Beispiel mit 'd' erhalten Sie 4, und dann schauen Sie 4 + Offset am invertierten Wörterbuch. – prossellob

+0

Also, wenn jemand "Hallo" eingeben würde, muss ich das in die entsprechenden Zahlen übersetzen (dieser Teil funktioniert gut). Zählen Sie dann auf, welche Zahl in "Offset" eingegeben wurde. Also, wenn sie 3 eingeben: hi würde in "8", "9" übersetzt werden und ich müsste das "11", "12" machen. – white

Antwort

3

Sie bereits string importieren, so können Sie Index in string.ascii_letters anstatt manuell das Wörterbuch definiert, und die Offset-Berechnung. Vergessen Sie nicht, modulo zu verwenden, um von z zu A zu wickeln.

import string 

msg = 'de' 
offset = 3 
caesar = ''.join(string.ascii_letters[(string.ascii_letters.index(ch) + offset) % len(string.ascii_letters)] 
       for ch in msg) 

print(caesar) 
# gh 

Dies kann leicht lesbarer erweitert werden, um zu sein:

msg = 'de' 
offset = 3 

caesar = [] 
for ch in msg: 
    ch_index = string.ascii_letters.index(ch) 
    new_index_with_offset = (ch_index + offset) % len(string.ascii_letters) 
    new_ch = string.ascii_letters[new_index_with_offset] 
    caesar.append(new_ch) 

caesar = ''.join(caesar) 

print(caesar) 
# gh 

ich von z zu a (statt A) als eine Übung Einwickeln des Leser überlasse.

+0

Nun könnten Sie ascii_lowercase verwenden und diesen Teil umbrechen '(string.ascii_letters.index (ch) + offset' in Klammern (% hat eine höhere Priorität als +), um das Umbruchproblem zu lösen – Nullman

Verwandte Themen