Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions homeworks/les05/pre_task07.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
"""
Подготовка данных к упражнению из http://generatedata.com/
7. Создать (не программно) текстовый файл, в котором каждая строка должна содержать данные о фирме:
название, форма собственности, выручка, издержки.
Пример строки файла: firm_1 ООО 10000 5000.

"""

with open('task07.txt', 'r', encoding='utf-8') as file:
out_lines = list()
for line in file.readlines():
words = line.split('|')
out_lines.append('_'.join(words[0].split()) + ' ' + ' '.join(words[1:]))
with open('task07in.txt', 'w', encoding='utf-8') as file:
file.writelines(out_lines)
12 changes: 12 additions & 0 deletions homeworks/les05/task01.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
"""
1. Создать программно файл в текстовом формате, записать в него построчно данные, вводимые пользователем.
Об окончании ввода данных свидетельствует пустая строка.
"""

# если файл не существует - будет создан, если есть - перезапишется
with open('task01out.txt', 'w', encoding='utf-8') as f:
while True:
buf = input('Введите строку :')
if buf.strip() == '':
break
f.write(buf + '\n')
11 changes: 11 additions & 0 deletions homeworks/les05/task02.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
"""
2. Создать текстовый файл (не программно), сохранить в нем несколько строк, выполнить подсчет количества строк,
количества слов в каждой строке.
"""
# import nltk
with open('task02.txt', 'r', encoding='utf-8') as file:
i = 1
for line in file:
print(f"Строка-{i} слов в строке-{len(line.split())}")
i += 1
print("Всего строк :", i - 1)
6 changes: 6 additions & 0 deletions homeworks/les05/task02.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
Я в очередной раз обходил периметр и проверял дроны, когда жилмодуль сообщил,
что обновил систему со спутника и там есть кое-что для меня.
Я сделал вид, что принимаю обновление, хотя на самом деле сложил его во внешнее хранилище.
Я больше не делаю автоматические апдейты, теперь мне это не нужно.
Когда мне захочется – вероятно, перед тем как покинуть планету, – я проверю все обновления и загружу те части,
которые понравятся, а остальные удалю.
19 changes: 19 additions & 0 deletions homeworks/les05/task03.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
"""
3. Создать текстовый файл (не программно), построчно записать фамилии сотрудников и величину их окладов.
Определить, кто из сотрудников имеет оклад менее 20 тыс., вывести фамилии этих сотрудников.
Выполнить подсчет средней величины дохода сотрудников.
"""
with open('task03.txt', 'r', encoding='utf-8') as file:
whole_sum = 0
n = 0
for line in file:
if line[0] == '#':
continue
l_line = line.split()
name = l_line[0]
salary = int(l_line[1])
n += 1
whole_sum += salary
if salary < 20000:
print(name, salary)
print(f"Средняя величина дохода : {whole_sum / n}")
102 changes: 102 additions & 0 deletions homeworks/les05/task03.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
# http://generatedata.com/
# name salary
Dennis 18304
Schwartz 17375
Leach 17291
Austin 18649
Spencer 29644
Stephens 30479
Goodman 37449
Daniels 11466
Potter 31345
Bray 46652
Barry 21477
Kaufman 27203
Bright 12417
Benson 42209
Christian 18290
Savage 10406
Snider 22229
Mccall 45370
Monroe 14567
Bailey 19163
Mills 41369
Conner 48201
Whitaker 34257
Austin 39807
Swanson 46019
Rocha 10486
Bender 43052
Todd 24426
Hicks 26279
Ortega 42928
Sullivan 28796
Bright 45380
Griffin 15725
Oconnor 26848
Schultz 35289
Miles 31652
Fields 16822
James 45916
Britt 36899
Caldwell 17339
Hill 33057
Michael 11703
Mullins 48038
Moon 16207
Miranda 10802
Gonzales 25966
Steele 11661
Galloway 16704
Tran 10237
Holder 26577
Mejia 43093
Dixon 12345
Hunt 26638
Phelps 46380
Wise 49742
Crosby 28201
Wright 14697
Day 13401
Mcbride 31829
Rasmussen 19979
Lyons 21411
Conner 21384
Mccall 40562
Hall 44377
Petersen 45885
Banks 18304
Shaffer 26025
Barr 49341
Barlow 26309
Houston 46982
Webb 34870
Burns 10150
Gray 23762
Brock 40844
Edwards 43372
Mays 29808
Spencer 35062
Merrill 11046
Manning 16458
Robles 41220
Gallegos 23659
Montgomery 36190
Woodard 33369
Orr 32988
Logan 38178
Hendricks 11790
Austin 37799
Watkins 19068
Frederick 25501
Ferguson 33137
Riley 10420
Walters 27840
Oliver 12691
Guerrero 36896
Mckenzie 31936
Noble 35064
Vang 43910
Richardson 12978
Lopez 40152
Weiss 35442
23 changes: 23 additions & 0 deletions homeworks/les05/task04.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
"""
4. Создать (не программно) текстовый файл со следующим содержимым:
One — 1
Two — 2
Three — 3
Four — 4
Необходимо написать программу, открывающую файл на чтение и считывающую построчно данные.
При этом английские числительные должны заменяться на русские.
Новый блок строк должен записываться в новый текстовый файл.
"""
dict_int = {'one': 'один',
'two': 'два',
'three': 'три',
'four': 'четыре'}
with open('task04.txt', 'r', encoding='utf-8') as file:
lines = file.readlines()
with open('task04out.txt', 'w', encoding='utf-8') as file:
for line in lines:
l_line = line.split()
if len(l_line) == 3:
# поиск по ключу со значением по умолчанию
l_line[0] = dict_int.get(l_line[0].lower(), '?????').title()
file.write(' '.join(l_line) + '\n')
4 changes: 4 additions & 0 deletions homeworks/les05/task04.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
One — 1
Two — 2
Three — 3
Four — 4
15 changes: 15 additions & 0 deletions homeworks/les05/task05.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
"""
5. Создать (программно) текстовый файл, записать в него программно набор чисел, разделенных пробелами.
Программа должна подсчитывать сумму чисел в файле и выводить ее на экран.
"""
import random

with open('task05.txt', 'w', encoding='utf-8') as file:
# создать 1000 чисел
file.write(' '.join([str(random.randint(100, 1000)) for i in range(1000)]))
with open('task05.txt', 'r', encoding='utf-8') as file:
block = file.read()
file_sum = 0
for el in block.split():
file_sum += int(el)
print("Сумма чисел в файле :", file_sum)
54 changes: 54 additions & 0 deletions homeworks/les05/task06.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
"""
6. Необходимо создать (не программно) текстовый файл, где каждая строка описывает учебный предмет и наличие лекционных,
практических и лабораторных занятий по этому предмету и их количество.
Важно, чтобы для каждого предмета не обязательно были все типы занятий.
Сформировать словарь, содержащий название предмета и общее количество занятий по нему.
Вывести словарь на экран.

Примеры строк файла:
Информатика: 100(л) 50(пр) 20(лаб).
Физика: 30(л) — 10(лаб)
Физкультура: — 30(пр) —

Пример словаря:
{“Информатика”: 170, “Физика”: 40, “Физкультура”: 30}
"""
import json


def filter_no_rem(lines):
""" фильтр строк - удаление пустых и комментариев
:param lines:
:return:
"""
for el in lines:
if el[0] == '#' or el.strip() == '':
continue
yield el


def filter_int(words):
""" преобразует слова с мусором в числа или 0
:param words:
:return:
"""
for el in words:
yield int('0' + ''.join([x for x in el if x.isdigit()]))


def repack_line(subject):
"""
формирование строки в формате
:param subject:
:return:
"""
return subject[0][:-1], sum(list(filter_int(subject[1:])))


with open("task06.txt", 'r', encoding='utf-8') as file:
les = dict()
for line in filter_no_rem(file.readlines()):
key, hours = repack_line(line.split())
les[key] = hours
# красивая печать
print(json.dumps(les, ensure_ascii=False, indent=4))
7 changes: 7 additions & 0 deletions homeworks/les05/task06.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
#
# предмет количество часов, тип занятий
#

Информатика: 100(л) 50(пр) 20(лаб).
Физика: 30(л) — 10(лаб)
Физкультура: — 30(пр) —
34 changes: 34 additions & 0 deletions homeworks/les05/task07.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
"""
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

with open('task07in.txt', 'r', encoding='utf-8') as file:
num_company = 0
sum_company = 0
dict_company = dict()
for line in file:
words = line.split()
name_company, type_company, income_company, costs_company = words[0], words[1], int(words[2]), int(words[3])
profit_company = income_company - costs_company
if profit_company > 0:
num_company += 1
sum_company += profit_company
dict_company[name_company] = profit_company
ledger_companies = [dict_company, {'average_profit': sum_company / num_company}]
# print(json.dumps(ledger_companies,indent=4))

with open('task07out.json', 'w', encoding='utf-8') as file:
json.dump(ledger_companies, file, indent=4)
Loading