鍍金池/ 問答/Python/ python實現(xiàn)凱撒密碼

python實現(xiàn)凱撒密碼

題目描述

凱撒密碼是古羅馬凱撒大帝用來對軍事情報進行加解密的算法,它采用了替換方法對信息中的每一個英文字符循環(huán)替換為字母表序列中該字符后面的第三個字符,即,字母表的對應(yīng)關(guān)系如下:

原文: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
假設(shè)用戶可能使用的輸入僅包含小寫字母a~z和空格,請編寫一個程序,對輸入字符串進行凱撒密碼加密,直接輸出結(jié)果,其中空格不用進行加密處理

題目來源及自己的思路

我的思路是字母-》獲得下標(biāo)數(shù)字-》計算出密文-》轉(zhuǎn)換為字母

相關(guān)代碼

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

你期待的結(jié)果是什么?實際看到的錯誤信息又是什么?

錯誤信息:最后轉(zhuǎn)換為字母的時候空格無法處理添加

clipboard.png

回答
編輯回答
朽鹿

關(guān)于凱撒密碼,我是這樣實現(xiàn)的:

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)
2018年5月25日 01:05
編輯回答
怪痞

顯然凱撒換位密碼不處理空格,加個判斷就行了

2017年4月7日 16:11