2016-10-15 4 views
0

파이썬에서 사전과 함수를 사용하는 연습을하고 있습니다. 나는 암호화 된 알파벳과 간단한 문구 나 문장을 암호화하는 프로그램을 작성하는 것을 시도하고있다 :파이썬에서 사전을 사용하는 암호 인코더

Original alphabet: ABCDEFGHIJKLMNOPQRSTUVWXYZ 
Encrypted alphabet: TDLOFAGJKRICVPWUXYBEZQSNMH. 
사용자는이 대문자 또는 소문자 알파벳, 공백, 쉼표를 포함 할 수 있도록 암호화 할 문구 나 문장을 입력하는 것입니다

, 그리고 마침표. 출력은 공백과 문장 부호가있는 대문자 여야합니다.

cipher ={"A":"T","a":"T","B":"D","b":"D","C":"L","c":"L","D":"O","d":"O","E":"F","e":"F","F":"A","f":"A","G":"G","g":"G","H":"J","h":"J","I":"K","i":"K","J":"R","j":"R","K":"I","k":"I","L":"C","l":"C","M":"V","m":"V","N":"P","n":"P","O":"W","o":"W","P":"U","p":"U","Q":"X","q":"X","R":"Y","r":"Y","S":"B","s":"B","T":"E","t":"E","U":"Z","u":"Z","V":"Q","v":"Q","W":"S","w":"S","X":"N","x":"N","Y":"M","y":"M","Z":"H","z":"H"} 

def encode(str,cipher): 
    result="" 
    for c in str: 
     result = result + cipher[c] 
    return result 

답변

0

당신은 알 수없는 기호 이러한 경우를 제외해야하고는 수행 할 수 있습니다 : 다음 권한을 용서를 물어

cipher ={"A":"T","a":"T","B":"D","b":"D","C":"L","c":"L","D":"O","d":"O","E":"F","e":"F","F":"A","f":"A","G":"G","g":"G","H":"J","h":"J","I":"K","i":"K","J":"R","j":"R","K":"I","k":"I","L":"C","l":"C","M":"V","m":"V","N":"P","n":"P","O":"W","o":"W","P":"U","p":"U","Q":"X","q":"X","R":"Y","r":"Y","S":"B","s":"B","T":"E","t":"E","U":"Z","u":"Z","V":"Q","v":"Q","W":"S","w":"S","X":"N","x":"N","Y":"M","y":"M","Z":"H","z":"H"} 
    def encode(words, cipher): 
     result = '' 
     for letter in words: 
      if letter in cipher: 
       result = result + cipher[letter] 
      else: 
       result = result + letter 
     return result 
phrase = raw_input('Please enter your phrase: ') 
print encode(phrase, cipher) 
+0

도움 주셔서 감사합니다! 사용자가 암호화하려는 구를 입력하도록보다 사용자 친화적 인 방법이 있습니까? 현재로서는 "encode ("phrase ", cipher)라고 입력합니다.하지만 그다지 직관적이지는 않습니다. Idea? –

+0

안녕하세요,이 코드는 2.x 문법을 사용하고 있습니다. 같은. – zipa

0

때로는 좋습니다. 키의 절반을 제거하고 값을 str.upper()로 바꿀 수 있습니다. 이렇게하면 작은 글자가 큰 글자가됩니다. dict(). get (key)를 호출하면 키 값을 얻습니다. 그렇지 않으면 None을 얻습니다. dict와 문자 사이의 or 연산자는 cipher.get (character)가 None을 반환하면 문자로 평가됩니다.

def get_chiper(plaintext): 
    cipher = {"A": "T", "B": "D", "C": "L", "D": "O", "E": "F", 
       "F": "A", "G": "G", "H": "J", "I": "K", "J": "R", 
       "K": "I", "L": "C", "M": "V", "N": "P", "O": "W", 
       "P": "U", "Q": "X", "R": "Y", "S": "B", "T": "E", 
       "U": "Z", "V": "Q", "W": "S", "X": "N", "Y": "M", 
       "Z": "H"} 
    return "".join(cipher.get(character.upper()) or character 
       for character in plaintext) 

그리고 전체 인코딩 및 디코딩은 딕셔너리를 반전하여 동일한 기능을 수행 할 수있다.

def encode(plaintext, cipher): 
    return "".join(cipher.get(character.upper()) or character 
        for character in plaintext) 


def decode(secret, encoding_cipher): 
    decode_cipher = {value: key for key, value in encoding_cipher.items()} 
    return encode(secret, decode_cipher) 


def main(): 
    cipher = {"A": "T", "B": "D", "C": "L", "D": "O", "E": "F", 
       "F": "A", "G": "G", "H": "J", "I": "K", "J": "R", 
       "K": "I", "L": "C", "M": "V", "N": "P", "O": "W", 
       "P": "U", "Q": "X", "R": "Y", "S": "B", "T": "E", 
       "U": "Z", "V": "Q", "W": "S", "X": "N", "Y": "M", 
       "Z": "H"} 

    plaintext = "hello foo from bar" 
    secret = encode(plaintext, cipher) 
    plaintext = decode(secret, cipher) 
    print(secret, plaintext) 


if __name__ == '__main__': 
    main() 
관련 문제