当我从文件中读取时,最后一个字母打印两次

时间:2014-11-25 16:00:28

标签: python python-3.x

我在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

如果你能提供帮助,请多谢。

1 个答案:

答案 0 :(得分:2)

encoded=file.readline()

readline读取一行时,它包含该行末尾的换行符。因此,即使“eph”在文本文件中长度为三个字符,encoded实际上也是"eph\n"。在对它做任何事情之前尝试剥离空格的输入。

encoded=file.readline().strip()

如果没有strip,你的循环将迭代四次,最后一个循环上letters为“\ n”。 letters==" "letters.isalpha()都不会为真,因此num将保留其在上一次迭代中所具有的值,并且该字符将再次打印。