/
IvanKhabarov
/
python
Обзор
Документация
Войти
/
IvanKhabarov
/
python
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
Practice/pw7/task3.py
69 строк
5 KB
Ivan-Khabarov
Добавлен урок 7
16 сен 2024, 18:59
16 сен 2024, 18:59
6dd50cb
Код
Авторство
О чём код?
# ✔ Напишите функцию, которая открывает на чтение созданные # в прошлых задачах файлы с числами и именами. # ✔ Перемножьте пары чисел. В новый файл сохраните # имя и произведение: # ✔ если результат умножения отрицательный, сохраните имя # записанное строчными буквами и произведение по модулю # ✔ если результат умножения положительный, сохраните имя # прописными буквами и произведение округлённое до целого. # ✔ В результирующем файле должно быть столько же строк, # сколько в более длинном файле. # ✔ При достижении конца более короткого файла, # возвращайтесь в его начало. import itertools def process_files(names_file, numbers_file, result_file): # Чтение имен из файла with open(names_file, 'r') as nf: names = [line.strip() for line in nf] # Чтение пар чисел из файла with open(numbers_file, 'r') as numf: numbers = [] for line in numf: int_num, float_num = line.strip().split(' | ') numbers.append((int(int_num), float(float_num))) # Открываем результирующий файл для записи with open(result_file, 'w') as rf: # Для того, чтобы при достижении конца более короткого файла возвращаться в начало, # используем itertools.cycle для циклического прохода по короткому файлу. for name, (int_num, float_num) in zip(itertools.cycle(names), numbers): product = int_num * float_num # Перемножаем целое и вещественное число # Проверяем знак произведения и записываем результат в зависимости от этого if product < 0: # Если произведение отрицательное, записываем имя строчными буквами и модуль произведения rf.write(f"{name.lower()} | {abs(product):.2f}\n") else: # Если произведение положительное, записываем имя прописными буквами и округленное произведение rf.write(f"{name.upper()} | {round(product)}\n") # Пример использования функции: names_file = "pseudonames.txt" # Файл с именами numbers_file = "random_pairs.txt" # Файл с парами чисел result_file = "result.txt" # Файл, куда запишем результат process_files(names_file, numbers_file, result_file) # Объяснение шагов: # Чтение файлов с именами и числами: # # Мы открываем файлы с именами и числами на чтение. # Имена загружаем в список names, а числа — в список numbers, где каждое число является кортежем из целого и вещественного числа. # Создание результирующего файла: # # Открываем файл для записи результатов. # Использование itertools.cycle(): # # itertools.cycle(names) позволяет бесконечно и циклично проходить по списку имен. Это нужно для того, чтобы, когда имена закончатся, мы снова вернулись к первому имени, если чисел больше. # Умножение и проверка знака: # # Мы перемножаем пару чисел (целое и вещественное). Если результат отрицательный, записываем имя строчными буквами и модуль произведения. Если положительный — имя прописными буквами и округленное до целого произведение. # Запись в файл: # # В файл результат записывается строка в формате: имя и результат произведения, разделенные вертикальной чертой.