如何使用ascii将字符更改为之前的字符

时间:2018-12-06 18:42:08

标签: python-2.7 file ascii caesar-cipher

我的代码有问题。 它需要将每个字符更改为之前的字符。 这里的问题是文件:

uif xiffmt po uif cvt hp spvoe boe spvoe
uif xiffmt po uif cvt hp spvoe boe spvoe

它需要返回:

the wheels on the bus goes round and round
the wheels on the bus goes round and round

但是它将它们返回一行:

the wheels on the bus goes round and round  the wheels on the bus goes round and round

我该如何解决?

def decode(in_file, out_file):
    try:
        f = open(in_file, 'r')
        for line in f:
            lst = list(line)
            lst2 = [chr(ord(x) - 1)  if x != ' ' else ' ' for x in lst]
            a = "".join(lst2) 
            with open('out_file.txt','a') as f2:
                f2.write(a)

    except IOError:
        print "Cant decipher' {"+in_file+"} 'due to an IO Error."
        f.close()
    finally:
        if f!=None:
            f.close()
            f2.close()
print decode( 'q4.txt', 'out_file.txt')

1 个答案:

答案 0 :(得分:0)

编辑:我刚刚意识到我(和你的;))错误,真正的答案如下

当您更改租船合同时,您也要对那些不可打印的租船-ASCII码<32的租船者进行操作。其中之一是换行符-\n,代码号10,替换为标签-代码9。
解决方法是简单地跳过使用这样的代码号更改所有内容:

 lst2 = [chr(ord(x) - 1)  if ord(x)>32 else x for x in lst]

旧答案 ,但无法解决实际问题。

write()方法不会自动追加换行符-它会写入变量值,并使用它完成操作。

所以您应该自己追加一个:

        with open('out_file.txt','a') as f2:
            f2.write(a + '\n')

或者将所有修改过的行存储在列表变量中,然后使用writelines()方法转储其内容-它用换行符分隔每个列表成员。