Vereinfachung der Caesar-Chiffre

  • Ich lerne gerade Python 3. Um die erworbenen Fähigkeiten zu testen, versuche ich die Rätsel unter Python Challenge .

    Ich habe Code zum Lösen des zweiten Rätsels hier . es funktioniert, aber ich denke, dass die Art und Weise, wie ich es gemacht habe, sehr kompliziert ist. Irgendwelche Vorschläge, wie man das Rätsel einfacher lösen kann?

    (Der Code muss im Wesentlichen jeden Buchstaben in einer Nachricht durch die beiden Buchstaben rechts vom Buchstaben ersetzen, z. B. E- & gt; G.)

     import string
    alphabet = string.ascii_lowercase
    letter=0
    replaceLetter = 2
    times=1
    message = input()
    newMessage=''
    while times < 26:
        newMessage = message.replace(alphabet[letter], str(replaceLetter)+',')
        message = newMessage
        letter = letter + 1
        replaceLetter = replaceLetter + 1
        time = times + 1
        if letter == 26:
            times = 0
            break
    newMessage = message.replace('26'+',', 'a')
    message = newMessage
    newMessage = message.replace('27'+',', 'b')
    message = newMessage
    number = 25
    message = newMessage
    while times < 26:
        newMessage = message.replace(str(number)+',', str(alphabet[number]))
        message = newMessage
        letter = letter + 1
        number = number - 1
        time = times + 1
        if number == -1:
            times = 0
            break
    print(newMessage)
     
    14 September 2014
    Jamal
1 answer
  • Ich würde ein paar Dinge anders machen.

     import string
    from collections import deque
    
    ascii1 = string.ascii_lowercase
    
    # create a deque to simplify rotation.
    d = deque(ascii1)
    d.rotate(-2)
    
    ascii2 = ''.join(d)
    
    replacements = dict(zip(ascii1, ascii2))
    
    oldmessage = 'This is a string that we want to run through the cipher.'
    
    newmessage = ''.join(replacements.get(c.lower(), c) for c in oldmessage)
    # results in 'vjku ku c uvtkpi vjcv yg ycpv vq twp vjtqwij vjg ekrjgt.'
     

    Beachten Sie, dass ich dies nicht getan habe tu hier alles, um die Hülle zu berücksichtigen.

    03 December 2011
    Alex Florescu