как сменить персонажа на тот, что перед ним, используя ascii - PullRequest
0 голосов
/ 06 декабря 2018

У меня проблема с моим кодом.Нужно изменить каждого персонажа на персонажа перед ним.Проблема здесь в том, что для файла:

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 голосов
/ 07 декабря 2018

edit: я только что понял мою (и вашу;)) ошибку, реальный ответ следует

Когда вы меняете фрахтователей, вы делаете это и для недля печати - те, у которых код ascii <32. Одним из них является символ новой строки - <code>\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() - он разделяет каждого члена списка новой строкой.

...