diff --git a/task_1_lesson5.py b/task_1_lesson5.py new file mode 100644 index 0000000..7c0a185 --- /dev/null +++ b/task_1_lesson5.py @@ -0,0 +1,13 @@ +# Задание №1 +# Создать программный файл в текстовом формате, записать в него построчно данные, +# вводимые пользователем. Об окончании ввода данных будет свидетельствовать пустая +# строка. + +with open("task_1_lesson5.txt", "at", encoding="utf-8") as f: + while True: + data = input('Введите данные: ') + if data == '': + print('Ваши данные сохранены в файл task_1_lesson5.txt') + break + else: + f.write(data + '\n') diff --git a/task_2_lesson5.py b/task_2_lesson5.py new file mode 100644 index 0000000..6cad9f5 --- /dev/null +++ b/task_2_lesson5.py @@ -0,0 +1,15 @@ +# Задание №2 +# Создать текстовый файл (не программно), сохранить в нём несколько строк, выполнить +# подсчёт строк и слов в каждой строке. + +with open("task_2_lesson5.txt") as f: + i = 0 + summa = 0 + for line in f: + i += 1 + print(f'В строке {i} - {len(line.split())} слов') + summa += len(line.split()) + print(f'Всего в файле {i} строк и {summa} слов') + +''' Не смог понять, почему в четвертой строке файла программа считает 13 слов, а не 12 как есть. + Проверил все пробеллы. Может Вы сможете объяснить?''' \ No newline at end of file diff --git a/task_2_lesson5.txt b/task_2_lesson5.txt new file mode 100644 index 0000000..1b293f7 --- /dev/null +++ b/task_2_lesson5.txt @@ -0,0 +1,6 @@ +Таблица десериализации неабсолютная инверсия таблицы сериализации. Это означает, что при +преобразовании объекта в JSON-формат и последующем декодировании получить полностью +идентичный объект не получится. +Рассмотрим пример десериализации. Представим, что у нас есть данные на диске, которыми +необходимо управлять. Как и в предыдущем примере, воспользуемся контекстными менеджером, но +откроем JSON-файл в режиме чтения. \ No newline at end of file diff --git a/task_3_lesson5.py b/task_3_lesson5.py new file mode 100644 index 0000000..ca02c22 --- /dev/null +++ b/task_3_lesson5.py @@ -0,0 +1,22 @@ +# Задание №3 +# Создать текстовый файл (не программно). Построчно записать фамилии сотрудников и +# величину их окладов (не менее 10 строк). Определить, кто из сотрудников имеет оклад менее +# 20 тысяч, вывести фамилии этих сотрудников. Выполнить подсчёт средней величины дохода +# сотрудников. +# Пример файла: +# Иванов 23543.12 +# Петров 13749.32 + +with open("task_3_lesson5.txt", encoding="utf-8") as f: + summa = 0 + i = 0 + print('Следующие сотрудники имеют оклад менее 20 тысяч рублей:') + for line in f: + salary = line.split() + if float(salary[1]) < 20000: + print(salary[0]) + else: + pass + i += 1 + summa = summa + float(salary[1]) + print(f'Средний оклад сотрудников: {round((summa/i), 2)} руб.') diff --git a/task_3_lesson5.txt b/task_3_lesson5.txt new file mode 100644 index 0000000..5d9d046 --- /dev/null +++ b/task_3_lesson5.txt @@ -0,0 +1,11 @@ +Иванов 23543.12 +Петров 13749.32 +Сидоров 18745.65 +Смирнов 45129.64 +Шувалов 12569.78 +Ушаков 78951.45 +Воронов 36457.49 +Соколов 24587.13 +Максимов 39421.14 +Жуков 16897.45 +Семенов 17456.36 \ No newline at end of file diff --git a/task_4_lesson5.py b/task_4_lesson5.py new file mode 100644 index 0000000..3e1eb5e --- /dev/null +++ b/task_4_lesson5.py @@ -0,0 +1,20 @@ +# Задание №4 +# Создать (не программно) текстовый файл со следующим содержимым: +# One — 1 +# Two — 2 +# Three — 3 +# Four — 4 +# Напишите программу, открывающую файл на чтение и считывающую построчно данные. При +# этом английские числительные должны заменяться на русские. Новый блок строк должен +# записываться в новый текстовый файл. + +dict_number = {'One':'Один', 'Two':'Два', 'Three':'Три', 'Four':'Четыре'} +new_ls = [] +out_file = open("task_4_lesson5_2.txt", "at", encoding="utf-8") +with open("task_4_lesson5_1.txt", encoding="utf-8") as in_file: + for line in in_file: + temp = line.split() + len_key = len(temp[0]) + key = temp[0] + out_file.write(dict_number[key]+line[len_key:]) +out_file.close() diff --git a/task_4_lesson5_1.txt b/task_4_lesson5_1.txt new file mode 100644 index 0000000..aca55a2 --- /dev/null +++ b/task_4_lesson5_1.txt @@ -0,0 +1,4 @@ +One — 1 +Two — 2 +Three — 3 +Four — 4 \ No newline at end of file diff --git a/task_5_lesson5.py b/task_5_lesson5.py new file mode 100644 index 0000000..861269a --- /dev/null +++ b/task_5_lesson5.py @@ -0,0 +1,26 @@ +# Задание №5 +# Создать (программно) текстовый файл, записать в него программно набор чисел, разделённых +# пробелами. Программа должна подсчитывать сумму чисел в файле и выводить её на экран. + +'''Создается текстовый файл со строками чисел''' +with open("task_5_lesson5.txt", "at", encoding="utf-8") as f: + while True: + str_numbers = input('Введите строку чисел, разделенных пробелами: ') + f.write(f'{str_numbers}\n') + exit_question = input('Введите "exit", если больше не нужно вводить строку чисел: ') + if exit_question == 'exit': + break + +'''Подсчет суммы чисел в файле''' +with open("task_5_lesson5.txt", encoding="utf-8") as f: + i = 1 + sum_file = 0 + for line in f: + ls_number_line = line.split() + sum_line = 0 + for el in ls_number_line: + sum_line = sum_line + float(el) + print(f'Сумма чисел в строке {i} равна {round(sum_line, 2)}') + sum_file = sum_file + sum_line + i += 1 +print(f'Сумма всех чисел в файле task_5_lesson5.txt равна: {round(sum_file, 2)}') diff --git a/task_6_lesson5.py b/task_6_lesson5.py new file mode 100644 index 0000000..5d92e9a --- /dev/null +++ b/task_6_lesson5.py @@ -0,0 +1,29 @@ +# Задание №6 +# Сформировать (не программно) текстовый файл. В нём каждая строка должна описывать +# учебный предмет и наличие лекционных, практических и лабораторных занятий по предмету. +# Сюда должно входить и количество занятий. Необязательно, чтобы для каждого предмета +# были все типы занятий. +# Сформировать словарь, содержащий название предмета и общее количество занятий по +# нему. Вывести его на экран. +# Примеры строк файла: Информатика: 100(л) 50(пр) 20(лаб). +# Физика: 30(л) — 10(лаб) +# Физкультура: — 30(пр) — +# Пример словаря: {“Информатика”: 170, “Физика”: 40, “Физкультура”: 30} + +dict_lessons = {} +with open("task_6_lesson5.txt", encoding="utf-8") as f: + for line in f: + ls_line = line.split() + key = ls_line[0] + sum_key = 0 + i = 1 + while i < 4: + temp_str = '' + for el in ls_line[i]: + if el.isdigit() == True: + temp_str = temp_str + el + if temp_str != '': + sum_key = sum_key + int(temp_str) + i += 1 + dict_lessons[key[:-1]] = sum_key +print(dict_lessons) diff --git a/task_6_lesson5.txt b/task_6_lesson5.txt new file mode 100644 index 0000000..9a4199b --- /dev/null +++ b/task_6_lesson5.txt @@ -0,0 +1,6 @@ +Информатика: 100(л) 50(пр) 20(лаб) +Физика: 30(л) — 10(лаб) +Физкультура: — 30(пр) — +Математика: 80(л) — 25(лаб) +Астрономия: — — — +Литература: 75(л) — — \ No newline at end of file diff --git a/task_7_lesson5.py b/task_7_lesson5.py new file mode 100644 index 0000000..2bb674c --- /dev/null +++ b/task_7_lesson5.py @@ -0,0 +1,44 @@ +# Задание №7 +# Создать вручную и заполнить несколькими строками текстовый файл, в котором каждая +# строка будет содержать данные о фирме: название, форма собственности, выручка, издержки. +# Пример строки файла: 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 + +dict_firms = {} +dict_ave_prof = {} +with open("task_7_lesson5.txt", encoding="utf-8") as f: + sum_profit = 0 + i = 0 + for line in f: + ls_line = line.split() + profit = round((float(ls_line[2]) - float(ls_line[3])), 2) + dict_firms[ls_line[0]] = profit + if profit >= 0:# Нулевая прибыль не является убытком + sum_profit = sum_profit + profit + i += 1 +dict_ave_prof['average_profit'] = round((sum_profit / i), 2) +result_list = [dict_firms, dict_ave_prof] +print(result_list) + +'''Сериализация''' +json_result_list = json.dumps(result_list) +print(json_result_list) + +with open("task_7_lesson5.json", "w") as write_f: + json.dump(result_list, write_f) + +'''Десериализация''' +with open("task_7_lesson5.json") as read_f: + load_list = json.load(read_f) +print(load_list) diff --git a/task_7_lesson5.txt b/task_7_lesson5.txt new file mode 100644 index 0000000..3ded19f --- /dev/null +++ b/task_7_lesson5.txt @@ -0,0 +1,6 @@ +Промпоставка ООО 10000 5000 +Дэмка ОАО 150000 61000 +ГАЗ ОАО 15000000 15000000 +Пятерочка ООО 1560000 1700000 +МАГНИТ ОАО 8560000 7500000 +МАГНАТ ООО 1200000 1350000 \ No newline at end of file