Pergunta

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

Foi útil?

Solução

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!'

Outras dicas

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))
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top