Как заменить каждый символ на предыдущий в строке и сохранить исходный порядок питона? - PullRequest
0 голосов
/ 06 декабря 2018

У меня проблема с моим кодом, и я не могу придумать, как это исправить.

Примечание. Мне не разрешено использовать импорт в моем коде

код выглядит следующим образом:

def decode(in_file, out_file):
    try:
        s = ""
        chr_nums = []
        splitlst = []
        lines = []
        lst = []
        f = open('q4.txt','r')
        for line in f:
            lines = line.split()
            for i in range(len(lines)):
                b = str(lines[i])
                for l in b:
                    chr_nums = chr(ord(l) - 1)
                    for a in chr_nums:
                        c =' '.join(a)
                        print c 

                    
    except IOError:
        print "Cant decipher' {"+in_file+"} 'due to an IO Error."
        f.close()

Цель этого кода - заменить каждую букву в каждом слове буквой перед ней.то есть: a изменяется на z и т. д.

Код должен изменить файл, содержащий текст такого типа:

Uif Xiffmt po uif cvt hp spvoe boe spvoe
Uif Xiffmt po uif cvt hp spvoe boe spvoe

к этому результату:

The Wheels on the bus go round and round
The Wheels on the bus go round and round

Это то, что мой цикл печатает в out_file:

T h e W h e e l s o n t h e b u s g o r o u n d a n d r o u n dT h e W h e e l s o n t h e b u s g o r o u n d a n d r o u n d

Как получить результат, который я показал в примере?Как я могу повторно объединить персонажей, чтобы сформировать оригинальный порядок?

note2: я пытался использовать объединение, но не удачно и с этим

note3: файл, который получает код, не обязательно содержитодно и то же предложение дважды.

Ответы [ 2 ]

0 голосов
/ 06 декабря 2018

В дополнение к коду принца Франциска, вот решение, которое принимает ваш стиль кода:

def decode(foo):
    final_string = ""
    f = foo
    for line in f:
        lines = line.split()
        for i in range(len(lines)):
            b = str(lines[i])
            for l in b:
                chr_nums = chr(ord(l) - 1)
                final_string += chr_nums
            final_string += " "
        final_string += "\n" # new line
    return(final_string)

secret_text = ["Uif Xiffmt po uif cvt hp spvoe boe spvoe", 
               "Uif Xiffmt po uif cvt hp spvoe boe spvoe"]

print(decode(foo=secret_text))

Обратите внимание, что первые пять строк после «try» вообще не нужны.Они не имеют никакого влияния.Остальное - просто установка пробелов и символа новой строки, когда это уместно.

0 голосов
/ 06 декабря 2018

используйте if/else in Python's list comprehension как указано здесь .

пример кода:

f = open('q4.txt','r')
for line in f:
    lst = list(line)
    lst2 = [chr(ord(x) - 1)  if x != ' ' else ' ' for x in lst]
    print("".join(lst2))

Я получил следующий вывод

The Wheels on the bus go round and round    
The Wheels on the bus go round and round
[Finished in 0.1s]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...