python实现凯撒密码

题目描述

凯撒密码是古罗马凯撒大帝用来对军事情报进行加解密的算法,它采用了替换方法对信息中的每一个英文字符循环替换为字母表序列中该字符后面的第三个字符,即,字母表的对应关系如下:

原文: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
密文:D E F G H I J K L M N O P Q R S T U V W X Y Z A B C
对于原文字符P,其密文字符C满足如下条件:C=(P+3) mod 26
上述是凯撒密码的加密方法,解密方法反之,即:P=(C-3) mod 26
假设用户可能使用的输入仅包含小写字母a~z和空格,请编写一个程序,对输入字符串进行凯撒密码加密,直接输出结果,其中空格不用进行加密处理

题目来源及自己的思路

我的思路是字母-》获得下标数字-》计算出密文-》转换为字母

相关代码

pList=['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']
p=input().upper()
arr=[]
arr1=[]
arr2=[]
arr3=[]
arr4=[]
for i in range(len(p)):
    if p[i] in pList:
        arr.append(p[i])
print(arr)
for j in range(len(arr)):
    charIndex=pList.index(arr[j])
    arr1.append(charIndex)
for k in range(len(arr1)):
    c=(arr1[k]+3)%26
    arr2.append(c)
for i in range(len(arr2)):
    for j in range(len(pList)):
        if arr2[i]==j:
            arr3.append(pList[j])
print(arr3)
str=''
for i in range(len(p)):
    if p[i]==" ":
        print(i)
        arr4.append(i)
print(arr4)
for j in range(len(arr4)):
    str1=str.join(arr3)
print("{}".format(str.join(arr3).lower()))

你期待的结果是什么?实际看到的错误信息又是什么?

错误信息:最后转换为字母的时候空格无法处理添加

clipboard.png

阅读 3.9k
2 个回答

显然凯撒换位密码不处理空格,加个判断就行了

关于凯撒密码,我是这样实现的:

if __name__ == "__main__":
    p = input().upper()
    o = []
    for i in list(p):
        if i is not " ": 
            c = ord(i)+3
            if c > ord("Z"):
                c -= 26
            o.append(chr(c).lower())
        else:
            o.append(" ")
    
    out = ''.join(o)
    print(out)
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏