문제

Basically I want the ciphered phrase as the output with both uppercase being ciphered to uppercase and lowercase being ciphered to lowercase but not any spaces or symbols are ciphered. It can encrypt a paragraph consisting of all upper case and a paragraph consisting of all lower case but not a mix of the two. here is what I have.

def encrypt(phrase,move):
encription=[]
for character in phrase:
    a = ord(character)
    if a>64 and a<123:
        if a!=(91,96):
            for case in phrase:
                        if case.islower():
                            alph=["a","b","c","d","e","f","g","h","i","j","k","l","m","n",
                                  "o","p","q","r","s","t","u","v","w","x","y","z"]
                            dic={}
                            for i in range(0,len(alph)):
                                dic[alph[i]]=alph[(i+move)%len(alph)] 
                                cipherphrase=""  
                            for l in phrase:  
                                if l in dic:  
                                    l=dic[l]  
                                cipherphrase+=l
                                encription.append(chr(a if 97<a<=122 else 96+a%122))
                            return cipherphrase
                        else:
                            ALPH=["A","B","C","D","E","F","G","H","I","J","K","L","M","N",
                                  "O","P","Q","R","S","T","U","V","W","X","Y","Z"]
                            DIC={}
                            for I in range(0,len(ALPH)):
                                DIC[ALPH[I]]=ALPH[(I+move)%len(ALPH)]
                                cipherphrase=""
                            for L in phrase:
                                if L in DIC:
                                    L=DIC[L]
                                cipherphrase+=L
                                encription.append(chr(a if 97<a<=122 else 96+a%122))
                            return cipherphrase

I know its a lot but as you can see im not very good

도움이 되었습니까?

해결책

import string

def caesar_cipher(msg, shift):
    # create a character-translation table
    trans = dict(zip(string.lowercase, string.lowercase[shift:] + string.lowercase[:shift]))
    trans.update(zip(string.uppercase, string.uppercase[shift:] + string.uppercase[:shift]))

    # apply it to the message string
    return ''.join(trans.get(ch, ch) for ch in msg)

then

caesar_cipher('This is my 3rd test!', 2)     # => 'Vjku ku oa 3tf vguv!'

다른 팁

import string
def rot_cipher(msg,amount):
    alphabet1 = string.ascii_lowercase + string.ascii_uppercase
    alphabet2 = string.ascii_lowercase[amount:] + string.ascii_lowercase[:amount]\
                + string.ascii_uppercase[amount:] + string.ascii_uppercase[:amount]
    tab = str.maketrans(alphabet1,alphabet2)
    return msg.translate(tab)

print(rot_cipher("hello world!",13))
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top