def caesar(plaintext,shift):
alphabet=["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"]
#Create our substitution dictionary
dic={}
for i in range(0,len(alphabet)):
dic[alphabet[i]]=alphabet[(i+shift)%len(alphabet)]
#Convert each letter of plaintext to the corrsponding
#encrypted letter in our dictionary creating the cryptext
ciphertext=("")
for l in plaintext.lower():
if l in dic:
l=dic[l]
ciphertext+=l
return ciphertext
#Example useage
plaintext="the cat sat on the mat"
print "Plaintext:", plaintext
print "Cipertext:", (caesar(plaintext,29))
密文只打印一个字母,而不是在 caesar shift 中打印“明文”变量。我想让它打印整个句子。
谢谢
请您参考如下方法:
这是因为你的return ciphertext缩进错了。您从 for 循环的第一次迭代返回。 (缩进在 Python 中很重要!)
for l in plaintext.lower():
if l in dic:
l=dic[l]
ciphertext+=l
return ciphertext # Indented to match level of `if`.
修复它。
for l in plaintext.lower():
if l in dic:
l=dic[l]
ciphertext+=l
return ciphertext
几个指针
- 您可以设置
alphabets = string.ascii_lowercase,而不是列出代码中的所有字母表。 - 您不需要变量来存储
dic[l],只需执行ciphertext += dic[l]即可。
