From 2ce7290f8fe332a2f814353248065f44320b5059 Mon Sep 17 00:00:00 2001 From: Yuriy-Zhitkov Date: Thu, 20 May 2021 17:39:08 +0300 Subject: [PATCH] add Home work 05 files --- 05_Files/Task_01.py | 13 +++++++++++++ 05_Files/Task_02.py | 13 +++++++++++++ 05_Files/Task_03.py | 29 +++++++++++++++++++++++++++++ 05_Files/Task_04.py | 25 +++++++++++++++++++++++++ 05_Files/Task_05.py | 30 ++++++++++++++++++++++++++++++ 05_Files/Task_06.py | 27 +++++++++++++++++++++++++++ 05_Files/Task_07.py | 43 +++++++++++++++++++++++++++++++++++++++++++ 7 files changed, 180 insertions(+) create mode 100644 05_Files/Task_01.py create mode 100644 05_Files/Task_02.py create mode 100644 05_Files/Task_03.py create mode 100644 05_Files/Task_04.py create mode 100644 05_Files/Task_05.py create mode 100644 05_Files/Task_06.py create mode 100644 05_Files/Task_07.py diff --git a/05_Files/Task_01.py b/05_Files/Task_01.py new file mode 100644 index 0000000..7c7c8ca --- /dev/null +++ b/05_Files/Task_01.py @@ -0,0 +1,13 @@ +''' +Создать программно файл в текстовом формате, записать в него построчно данные, вводимые пользователем. +Об окончании ввода данных свидетельствует пустая строка. +''' + + +with open('test_task_01.txt', 'w') as obj: + while True: + line = input('Введите текст: ') + if line == '': + break + else: + obj.write(line + '/n') diff --git a/05_Files/Task_02.py b/05_Files/Task_02.py new file mode 100644 index 0000000..85977a9 --- /dev/null +++ b/05_Files/Task_02.py @@ -0,0 +1,13 @@ +''' +Создать текстовый файл (не программно), сохранить в нем несколько строк, +выполнить подсчет количества строк, количества слов в каждой строке. +''' + + +with open('test_task_02.txt', 'r') as obj: + + data = obj.readlines() + print(f'В файле {obj.name} содержится {len(data)} строк') + + for itm in enumerate(data): + print(f'Строка №{itm[0]+1} содержит {len(itm[1].split(" "))} слова') diff --git a/05_Files/Task_03.py b/05_Files/Task_03.py new file mode 100644 index 0000000..8d5eb24 --- /dev/null +++ b/05_Files/Task_03.py @@ -0,0 +1,29 @@ +''' +Создать текстовый файл (не программно), построчно записать фамилии сотрудников и величину их окладов. +Определить, кто из сотрудников имеет оклад менее 20 тыс., вывести фамилии этих сотрудников. +Выполнить подсчет средней величины дохода сотрудников. + +У меня на вход поступает файл txt с содержимым: +Tom 19000 +Jack 19000 +Max 21000 +Dan 22000 +''' + +with open('test_task_03.txt', 'r') as obj: + + data = obj.readlines() + + employee_20 = '' # строка сотрудников с ЗП менее 20 т/р/ + sum_salary = 0 # переменная для подсчета средней ЗП + + print('Оклады сотрудников: ') + for el in data: + print(el.removesuffix('\n') + ' рублей') # вывод имен сотрудников и значения их оклада + sum_salary += int(el.split(' ')[1]) + if int(el.split(' ')[1]) < 20000: + employee_20 += (el.split(' ')[0]) + '\n' # вывод имен сотрудников с зп менее 20 т.р + + print('\nСотрудники, оклады которых меньше 20000 рублей:\n' + employee_20) + print(f'Средняя заработная плата составляет {sum_salary/len(data)} рублей') # вывод средней зп + diff --git a/05_Files/Task_04.py b/05_Files/Task_04.py new file mode 100644 index 0000000..d2651e7 --- /dev/null +++ b/05_Files/Task_04.py @@ -0,0 +1,25 @@ +''' +Создать (не программно) текстовый файл со следующим содержимым: + +One — 1 +Two — 2 +Three — 3 +Four — 4 + +Необходимо написать программу, открывающую файл на чтение и считывающую построчно данные. +При этом английские числительные должны заменяться на русские. +Новый блок строк должен записываться в новый текстовый файл. +''' + + +num_dict = {'One': 'Oдин', 'Two': 'Два', 'Three': 'Три', 'Four': 'Четыре'} + +with open('test_task_04.txt', 'r') as obj_from, open('new_task_04.txt', 'w') as obj_to: + + for line in obj_from: # прохожу по каждой строке файла + a = line.split(' — ') # разделяю строку на два элемента + if a[0] in num_dict: # делаю замену английского слова на русское, если оно есть в словаре + a[0] = num_dict[a[0]] + obj_to.write(' — '.join(a)) # записываю новую строку в выходной файл + else: + continue \ No newline at end of file diff --git a/05_Files/Task_05.py b/05_Files/Task_05.py new file mode 100644 index 0000000..59d513e --- /dev/null +++ b/05_Files/Task_05.py @@ -0,0 +1,30 @@ +''' +Создать (программно) текстовый файл, записать в него программно набор чисел, разделенных пробелами. +Программа должна подсчитывать сумму чисел в файле и выводить ее на экран. +''' + +import random + +# запись в файл случйных чисел +with open('test_task_05.txt', 'w') as my_file: + + # ввод информации и генерации случайных чисел для записи + n = int(input('Введите кол-во цифр, которые необходимо сгененрировать: ')) + min = int(input('Укажите нижний предел случайных чисел: ')) + max = int(input('Укажите верхний предел случайных чисел: ')) + + # генерация случайных чисел и запись в файл + random_num = [str(random.randint(min, max)) + ' ' for i in range(n)] + random_num = ''.join(random_num).removesuffix(' ') + print(f'Сгенерированы числа: {random_num}, числа записаны в файл {my_file.name}') + my_file.write(random_num) + + +# суммирование чисел, записанных в файле, и вывод значения на экран +with open('test_task_05.txt', 'r') as my_file: + num = my_file.read().split(' ') + num = list(map(int, num)) + print(f'Сумма чисел равна {sum(num)}') + + + diff --git a/05_Files/Task_06.py b/05_Files/Task_06.py new file mode 100644 index 0000000..3e5cc77 --- /dev/null +++ b/05_Files/Task_06.py @@ -0,0 +1,27 @@ +''' +Необходимо создать (не программно) текстовый файл, где каждая строка описывает учебный предмет и наличие лекционных, +практических и лабораторных занятий по этому предмету и их количество. Важно, чтобы для каждого предмета не обязательно +были все типы занятий. Сформировать словарь, содержащий название предмета и общее количество занятий по нему. +Вывести словарь на экран. + +Примеры строк файла: +Информатика: 100(л) 50(пр) 20(лаб) +Физика: 30(л) 10(лаб) +Физкультура: 30(пр) + +Пример словаря: +{“Информатика”: 170, “Физика”: 40, “Физкультура”: 30} +''' + +import re # для применения регулярных выражений + +with open('test_task_06.txt', 'r') as info: + info_dict = {} + for line in info: + el_line = re.sub('\(л\)|\(пр\)|\(лаб\)|:|\n', '', line).split(' ') # удаляю из строки лишние символы и превращаю в список + info_dict[el_line[0]] = sum(list(map(int, el_line[1:]))) # присваиваю словарю ключ - название предмета, значение - сумма часов + # print(el_line) + + + print('Информация по предматам и затраиваемым часам:') + print(info_dict) \ No newline at end of file diff --git a/05_Files/Task_07.py b/05_Files/Task_07.py new file mode 100644 index 0000000..5860d54 --- /dev/null +++ b/05_Files/Task_07.py @@ -0,0 +1,43 @@ +''' +Создать (не программно) текстовый файл, в котором каждая строка должна содержать данные о фирме: +название, форма собственности, выручка, издержки. +Пример строки файла: firm_1 ООО 10000 5000. + +Необходимо построчно прочитать файл, вычислить прибыль каждой компании, а также среднюю прибыль. +Если фирма получила убытки, в расчет средней прибыли ее не включать. + +Далее реализовать список. Он должен содержать словарь с фирмами и их прибылями, а также словарь со средней прибылью. +Если фирма получила убытки, также добавить ее в словарь (со значением убытков). +Пример списка: [{“firm_1”: 5000, “firm_2”: 3000, “firm_3”: 1000}, {“average_profit”: 2000}]. + +Итоговый список сохранить в виде json-объекта в соответствующий файл. +Пример json-объекта: +[{"firm_1": 5000, "firm_2": 3000, "firm_3": 1000}, {"average_profit": 2000}] + +Подсказка: использовать менеджеры контекста. +''' + +import json + +with open('test_task_07.txt', 'r') as data: + sum_profit = 0 # для подсчета суммы положительной прибыли + n = 0 # для подсчета фирм, у которых прибыль положительна + info = [{}] # шаблон для итогового списка + for line in data: # цикл для чтения каждой строки файла + el_line = line.split(' ') + profit = int(el_line[2]) - int(el_line[3].removesuffix('\n')) # расчет прибыли + info[0][el_line[0]] = profit # запись в словать названия фирмы и её прибыли + if profit > 0: + sum_profit += profit # подсчет суммы положительной прибыли по фирмам + n += 1 # подсчет фирм с положительной прбылью + print(el_line) + average_profit = sum_profit / n # расчет средней прибыли по фирмам + info.append( {'Средняя прибыль': average_profit} ) + + print(average_profit) + print(info) + +# запись данных в формат json +with open('test_task_07.json', 'w') as data_j: + json.dump(info, data_j) +