尝试编写Python程序来创建Caesar加密

2024-07-05 09:36:23 发布

您现在位置:Python中文网/ 问答频道 /正文

string = input("Enter your string ")
for i in string:
     alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" 
     cipher = "ZYXWVUTSRQPONMLKJIHGFEDCBA"
     char = alphabet.find(i)
     ciphered = string.replace(i,cipher[char])
print(ciphered)

知道为什么这个只返回字符串的最后一个字母吗


Tags: inforinputyourstringfindreplacecipher
3条回答

每次遍历循环时,都要替换string中的一个字母,然后将该单个字母替换的结果分配给ciphered,覆盖它以前具有的任何值。最后得到的值是上次循环迭代期间分配的值

实际上,通过replace在适当的位置修改字符串是一个坏主意,因为最终会来回翻转相同的字母。相反,您可以迭代地构建加密字符串:

alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" 
cipher = "ZYXWVUTSRQPONMLKJIHGFEDCBA"
ciphered = ""
for char in string:
    i = alphabet.find(char)
    ciphered += cipher[i]

仅更改最后一个字母,因为您正在从原始输入字符串在每个循环上创建ciphered字符串,因此在最后一个循环上,仅更改最后一个元素

string = input("Enter your string ")
ciphered = ""
alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" 
cipher = "ZYXWVUTSRQPONMLKJIHGFEDCBA"
for i in string:
     char = alphabet.find(i)
     ciphered += cipher[char]
print(ciphered)

这应该行得通

也许您还应该将字符串转换为大写字母,否则,find()函数可以返回值-1

string = string.capitalize()

相关问题 更多 >