【问题标题】:cipher encoder in python using dictionariespython中使用字典的密码编码器
【发布时间】:2017-02-25 00:58:41
【问题描述】:

我正在尝试在 python 上练习使用字典和函数。我正在尝试编写一个用加密字母加密简单短语或句子的程序:

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

【问题讨论】:

    标签: python dictionary encryption


    【解决方案1】:

    您应该排除那些带有未知符号的情况,这可以通过以下方式完成:

        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)
    

    【讨论】:

    • 感谢您的帮助!有没有更人性化的方式来告诉用户输入他们想要加密的短语?截至目前,我输入“encode("phrase", cipher)。但这不是很直观。想法?
    • 嗨,我编辑了代码来帮助你。此解决方案使用 2.x 语法,所以我希望您使用相同的语法。
    【解决方案2】:

    有时请求宽恕比请求许可更好。您可以删除一半的 key: 值并用 str.upper() 替换它们,这样小写字母就变成了大写字母。如果你调用 dict().get(key) 你得到键的值或者你得到 None。如果 cipher.get(character) 返回 None,则 dict 和 character 之间的 or 运算符计算为字符。

    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)
    

    完全编码和解码可以通过反转dict使用相同的功能完成。

    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()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-15
      • 1970-01-01
      • 1970-01-01
      • 2017-06-08
      • 1970-01-01
      • 2022-10-23
      • 1970-01-01
      相关资源
      最近更新 更多