我在storage.txt中有一条加密的消息我从文本文件中读取此消息以及偏移量,用偏移量解密并打印解密的消息。我遇到的问题是,当我打印解密的邮件时,最后一个字母打印两次。例如,如果解密的消息是' dog'它会打印出来的#g;
file=open('storage.txt','r')
encoded=file.readline()
offset2=file.readline()
file.close()
for letters in encoded:
if letters==" ":
num=32
elif letters.isalpha():
num=ord(letters)
num-=int(offset2)
if letters.islower():
if num>ord('z'):
num-=26
elif num<ord('a'):
num+=26
elif letters.isupper():
if num>ord('Z'):
num-=26
elif num<ord('A'):
num+=26
ans=chr(num)
print(ans, end='')
storage.txt看起来像这样:(当用1的偏移量解密时,该消息转换为狗)
弗
1
如果你能提供帮助,请多谢。
答案 0 :(得分:2)
encoded=file.readline()
当readline
读取一行时,它包含该行末尾的换行符。因此,即使“eph”在文本文件中长度为三个字符,encoded
实际上也是"eph\n"
。在对它做任何事情之前尝试剥离空格的输入。
encoded=file.readline().strip()
如果没有strip
,你的循环将迭代四次,最后一个循环上letters
为“\ n”。 letters==" "
和letters.isalpha()
都不会为真,因此num
将保留其在上一次迭代中所具有的值,并且该字符将再次打印。