Від модератора: додав теги code і прибрав оте простирадло під спойлер, наступного разу самі
Я не дуже помилюся, якщо припущу, що ви намагаєтеся почистити відсканований текст від зайвих знаків? Будь ласка, окрім коду і даних, пояснюйте також, що ви хочете зробити (якщо треба - чому обрали саме такий спосіб), і з чим виникли проблеми.
Кілька думок стосовно коду:
z=input("""Введіть тести:
""")
У вас же, мабуть, ті тести в файлі зберігаються? Ну то й завантажуйте їх із файла і зберігайте у файл. У гіршому разі користуйтеся перенаправленням введення-виведення. input з аргументом - то для навчання, не більше.
n= -1
p1=z.find("|*|f")
while p1>n:
z=z.replace("|*|f", "|*|")
z=z.replace("f|*|", "|*|")
z=z.replace("|*|X", "|*|")
z=z.replace("X|*|", "|*|")
z=z.replace("|*|}", "|*|")
z=z.replace("}|*|", "|*|")
p1=z.find("|*|f")
Ви оте p1 ще десь використовуєте? Ні. То нащо воно вам? Внесіть вираз просто в while:
І останній рядок теж зник. А n у нас що? -1. Тобто поки знаходиться. Перевірка входження - це оператор in:
Далі. Всі ці рядки ("|*|f", "|*|X" і т.д.) повторюються і далі. Я не знаю, наскільки захаращені ними дані, але якщо їх так багато, як випливає з вашого коду, то
SEPARATOR = "|*|" # роздільник
SEPARATOR_TRASH = "X}f" # сміття
while any(SEPARATOR+trash in z or trash+SEPARATOR in z for trash in SEPARATOR_TRASH):
for trash in SEPARATOR_TRASH: #trash набуває послідовно значень 'X','}','f'
z = z.replace(trash+SEPARATOR, SEPARATOR).replace(SEPARATOR+trash, SEPARATOR)
оце - ваші 6 циклів.
Далі - всі пробіли "лікуються" банальним
while " " in z:
z = z.replace(" "," ")
До речі, підозрюю, що саме там ваша проблема (про яку ви не написали) - ви міняли 1 пробіл на 1, доки в стрічці лишається 1 пробіл, тобто вічно.
З відповідями те саме, тільки нам знадобиться трохи складніша за стрічку структура для того, щоб їх тримати (тут би словник, але обійдемося списками; добре що там лише по одному символу):
WRONG_ANSWERS = [["A.","EЖ%¦"],
["B.","DД$¤"],
["C.",""], #тут вже самостійно заповніть, за аналогією
["D.",""],
["E.",""]]
for answer, wrongs in WRONG_ANSWERS:
for wrong in wrongs:
z = z.replace(SEPARATOR+wrong+SEPARATOR, SEPARATOR+answer+SEPARATOR)
З абзацами - те саме, тільки ще простіше. У вас же не буває 10 отих розділювачів поспіль? То й while не потрібен:
z = z.replace(SEPARATOR*4, SEPARATOR).replace(SEPARATOR, '\n') #\n - від new line