Python密码器(字母表移位)

Python密码器(字母表移位),python,encryption,Python,Encryption,我正在积极学习Python(3.5),并非常喜欢它 我想熟悉字符串操作,因此决定制作一个基本的密码器/解密器,将字符串在字母表中向前移动一个 代码如下: def encrypt(string): string = string.replace('z', 'a') string = string.replace('y', 'z') string = string.replace('x', 'y') string = string.replace('w', 'x')

我正在积极学习Python(3.5),并非常喜欢它

我想熟悉字符串操作,因此决定制作一个基本的密码器/解密器,将字符串在字母表中向前移动一个

代码如下:

def encrypt(string):
    string = string.replace('z', 'a')
    string = string.replace('y', 'z')
    string = string.replace('x', 'y')
    string = string.replace('w', 'x')
    string = string.replace('v', 'w')
    string = string.replace('u', 'v')
    string = string.replace('t', 'u')
    string = string.replace('s', 't')
    string = string.replace('r', 's')
    string = string.replace('q', 'r')
    string = string.replace('p', 'q')
    string = string.replace('o', 'p')
    string = string.replace('n', 'o')
    string = string.replace('m', 'n')
    string = string.replace('l', 'm')
    string = string.replace('k', 'l')
    string = string.replace('j', 'k')
    string = string.replace('i', 'j')
    string = string.replace('h', 'i')
    string = string.replace('g', 'h')
    string = string.replace('f', 'g')
    string = string.replace('e', 'f')
    string = string.replace('d', 'e')
    string = string.replace('c', 'd')
    string = string.replace('b', 'c')
    string = string.replace('a', 'b')
    return string


def decrypt(string):
    string = string.replace('b', 'a')
    string = string.replace('c', 'b')
    string = string.replace('d', 'c')
    string = string.replace('e', 'd')
    string = string.replace('f', 'e')
    string = string.replace('g', 'f')
    string = string.replace('h', 'g')
    string = string.replace('i', 'h')
    string = string.replace('j', 'i')
    string = string.replace('k', 'j')
    string = string.replace('l', 'k')
    string = string.replace('m', 'l')
    string = string.replace('n', 'm')
    string = string.replace('o', 'n')
    string = string.replace('p', 'o')
    string = string.replace('q', 'p')
    string = string.replace('r', 'q')
    string = string.replace('s', 'r')
    string = string.replace('t', 's')
    string = string.replace('u', 't')
    string = string.replace('v', 'u')
    string = string.replace('w', 'v')
    string = string.replace('x', 'w')
    string = string.replace('y', 'x')
    string = string.replace('z', 'y')
    string = string.replace('a', 'z')
    return string

choice = input('Do you want to decrypt or encrypt a sentence? (d / e)')
question = 'Give me a sentence to %s\n'

if choice == 'd':
    encrypted_str = input(question % 'decrypt')
    decrypted_str = decrypt(encrypted_str)
    print(decrypted_str)

elif choice == 'e':
    plaintext = input(question % 'encrypt')
    encrypted_str = encrypt(plaintext)
    print(encrypted_str)

else:
    print('That is not a valid option')
我知道这不是你应该怎么做,但我不知道还有别的方法

我遇到的问题是,如果我尝试加密'zaaz',它会给我'bbbb'而不是'abba'。我知道我的错在哪里(“z”被替换为“a”,而“a”被替换为“b”)以及它是什么,但不知道如何修复它。有人能提出更好的方法吗

另外,我看到有人使用模运算符将字母表作为字符串进行文本换行或字符串索引,但我不知道如何在这里实现它

有什么建议吗?

作为建议, 看一下python(,)的chr/ord函数,它基本上接受一个字符并将其转换为一个数字,您可以添加一个常量,然后使用ord将其转换回字符串

然后,您可以使用for循环或列表来循环您的T代码

我没有显示代码,因为您想学习,但我可以很容易地提供一些帮助:)

作为建议, 看一下python(,)的chr/ord函数,它基本上接受一个字符并将其转换为一个数字,您可以添加一个常量,然后使用ord将其转换回字符串

然后,您可以使用for循环或列表来循环您的T代码

我没有显示代码,因为您想学习,但我可以很容易地提供一些帮助:)

此外,您还可以访问


此外,您还可以访问

一种简单易懂的方法是使用将旧字符映射到新字符,然后将每个字符分别变换到一起,例如:

encrypt_table = {'a': 'b', 'b': 'c', 'c': 'd', 'd': 'e', 'e': 'f', 'f': 'g',
                 'g': 'h', 'h': 'i', 'i': 'j', 'j': 'k', 'k': 'l', 'l': 'm',
                 'm': 'n', 'n': 'o', 'o': 'p', 'p': 'q', 'q': 'r', 'r': 's',
                 's': 't', 't': 'u', 'u': 'v', 'v': 'w', 'w': 'x', 'x': 'y',
                 'y': 'z', 'z': 'a'}
encrypt_table.update( [(k.upper(),v.upper()) for k,v in encrypt_table.items()] ) # to include upper case letters

decrypt_table = {v:k for k,v in encrypt_table.items() } # is just the inverse of the other table

def encrypt(string):
    return "".join( encrypt_table.get(c,c) for c in string )

def decrypt_table(string):
    return "".join( decrypt_table.get(c,c) for c in string )
这样,密码函数就如上面所示一样简单,使用字典的方法来转换字符,或者如果转换表中没有字符,则保持不变

现在你得到了正确的结果

>>> encrypt("zaaz")
'abba'
>>> 

一种简单易懂的方法是使用将旧字符映射到新字符,然后将每个字符分别变换到一起,例如:

encrypt_table = {'a': 'b', 'b': 'c', 'c': 'd', 'd': 'e', 'e': 'f', 'f': 'g',
                 'g': 'h', 'h': 'i', 'i': 'j', 'j': 'k', 'k': 'l', 'l': 'm',
                 'm': 'n', 'n': 'o', 'o': 'p', 'p': 'q', 'q': 'r', 'r': 's',
                 's': 't', 't': 'u', 'u': 'v', 'v': 'w', 'w': 'x', 'x': 'y',
                 'y': 'z', 'z': 'a'}
encrypt_table.update( [(k.upper(),v.upper()) for k,v in encrypt_table.items()] ) # to include upper case letters

decrypt_table = {v:k for k,v in encrypt_table.items() } # is just the inverse of the other table

def encrypt(string):
    return "".join( encrypt_table.get(c,c) for c in string )

def decrypt_table(string):
    return "".join( decrypt_table.get(c,c) for c in string )
这样,密码函数就如上面所示一样简单,使用字典的方法来转换字符,或者如果转换表中没有字符,则保持不变

现在你得到了正确的结果

>>> encrypt("zaaz")
'abba'
>>> 

您可能会发现,python中的
str
类型是可编辑的,您可以在myStr中为字符编写类似
的代码,并单独查看每个字符。。。为了修复您当前拥有的代码,而不是完全重新开始,您可能需要考虑一下这一点!您可能会发现,python中的
str
类型是可编辑的,您可以在myStr中为字符编写类似
的代码,并单独查看每个字符。。。为了修复您当前拥有的代码,而不是完全重新开始,您可能需要考虑一下这一点!我已经更正了它,但与您的代码(或您复制的代码)略有不同。首先,我省略了
I.strip和
。其次,我将处理后的字符存储在字符串中,而不是列表中。这些是否有问题?我看不出有什么区别,但要验证你得到的结果。i、 strip()用于处理新行和空格字符。我已经更正了它,但与您的代码(或您复制的代码)略有不同。首先,我省略了
I.strip和
。其次,我将处理后的字符存储在字符串中,而不是列表中。这些是否有问题?我看不出有什么区别,但要验证你得到的结果。i、 strip()用于处理新行和空格字符。