diff --git a/lab2/in b/lab2/in new file mode 100644 index 0000000..13a377d --- /dev/null +++ b/lab2/in @@ -0,0 +1,4 @@ +Hello bookkeeper!! +Приветт мирр!! +Moooon 10000 +ääää ÖÖ \ No newline at end of file diff --git a/lab2/main.py b/lab2/main.py new file mode 100644 index 0000000..17242f5 --- /dev/null +++ b/lab2/main.py @@ -0,0 +1,62 @@ +def process_line(text: str) -> str: + if not text: + return text + + result = [text[0]] + + for i in range(1, len(text)): + current_char = text[i] + last_written = result[-1] + + if current_char == last_written: + result.append(" ") + else: + result.append(current_char) + + return "".join(result) + + +def ask_file_name(prompt: str) -> str: + while True: + file_name = input(prompt).strip() + if file_name: + return file_name + print("Ошибка: имя файла не может быть пустым. Повторите ввод.") + + +def read_lines_with_retry() -> tuple[str, list[str]]: + while True: + input_file = ask_file_name("Введите имя входного файла: ") + try: + with open(input_file, "r", encoding="utf-8") as fin: + return input_file, fin.readlines() + except (OSError, UnicodeError) as error: + print(f"Ошибка чтения файла '{input_file}': {error}") + print("Попробуйте снова.") + + +def write_lines_with_retry(lines: list[str]) -> str: + while True: + output_file = ask_file_name("Введите имя выходного файла: ") + try: + with open(output_file, "w", encoding="utf-8") as fout: + fout.writelines(lines) + return output_file + except (OSError, UnicodeError) as error: + print(f"Ошибка записи файла '{output_file}': {error}") + print("Попробуйте снова.") + + +def main() -> None: + _, lines = read_lines_with_retry() + + processed_lines = [process_line(line) for line in lines] + output_file = write_lines_with_retry(processed_lines) + + print("Обработка завершена.") + print(f"Результат записан в файл {output_file}") + + +if __name__ == "__main__": + main() +