This commit is contained in:
denis-on 2022-03-19 14:55:20 +03:00
parent 2dc50c1f1f
commit 8188d0766d
7 changed files with 166 additions and 0 deletions

30
less-05/task-01.py Normal file
View File

@ -0,0 +1,30 @@
# Создать программный файл в текстовом формате,
# записать в него построчно данные, вводимые пользователем.
# Об окончании ввода данных будет свидетельствовать пустая строка.
import os
n_str = 0
n_char = 0
file_name = 'task01.txt'
def get_string_user():
global n_str
global n_char
m_str = input(f"{n_str+1:03}->>>")
n_str += 1
# количество символов с учетом перевода строк под Win используеться CR LF
# а это 2 байта а вот под лин будет только что мы укажем "\n" - 1 байт (LF)
lb = 2 if os.name == "nt" else 1
n_char += len(m_str) + (lb if len(m_str) > 0 and n_str>1 else 0)
return m_str
print('введите строки для записи в файл, окончание ввода пустая строка')
with open(file_name, "w", encoding='utf-8') as f_obj:
user_str = get_string_user()
while user_str != "":
if n_str>1: f_obj.writelines("\n")
f_obj.writelines(user_str)
user_str = get_string_user()
f_size = os.path.getsize(file_name)
print('в фаил записано {} символов, {} строк, размер файла на диске {} байт'.format(n_char, n_str-1, f_size))

21
less-05/task-02.py Normal file
View File

@ -0,0 +1,21 @@
# Создать текстовый файл (не программно), сохранить в нём несколько строк,
# выполнить подсчёт строк и слов в каждой строке.
file_name = 'examples5/text_7.txt'
lines = 0
words = 0
try:
with open(file_name, "r", encoding='utf-8') as file:
for line in file:
words_in_line = len(line.split())
lines += 1
words += words_in_line
print(f'строка {lines} содержит {words_in_line} слов')
except Exception:
print('Проблемы данными')
else:
print(f'Из файла прочитано {lines} строка и всего {words} слов')

21
less-05/task-03.py Normal file
View File

@ -0,0 +1,21 @@
# Создать текстовый файл (не программно). Построчно записать фамилии сотрудников
# и величину их окладов (не менее 10 строк). Определить, кто из сотрудников имеет оклад
# менее 20 тысяч, вывести фамилии этих сотрудников. Выполнить подсчёт средней величины дохода сотрудников.
file_name = 'examples5/text_3.txt'
employ_dict = {}
try:
with open(file_name, "r", encoding='utf-8') as file:
for line in file:
line_sp = line.split()
employ_dict[line_sp[0]] = float(line_sp[1])
except Exception:
print('Проблемы данными')
else:
print(f'всего прочитано {len(employ_dict)} строк')
print('Сотрудники получающие менее 20 000')
for el in employ_dict.items():
if float(el[1]) < 20000.0:
print(' '*5, f'{el[0]}')
print(f'Средняя ЗП по полному списку: {sum(employ_dict.values())/len(employ_dict):.2f}')

22
less-05/task-04.py Normal file
View File

@ -0,0 +1,22 @@
# Создать (не программно) текстовый файл со следующим содержимым:
#
#One — 1
#Two — 2
#Three — 3
#Four — 4
#
#Напишите программу, открывающую файл на чтение и считывающую построчно данные.
#При этом английские числительные должны заменяться на русские.
#Новый блок строк должен записываться в новый текстовый файл.
file_name = 'examples5/text_4.txt'
dig = {'One':'Один', 'Two':'Два', 'Three':'Три', 'Four':'Четыре', 'Five':'Пять',
'Six':'Шесть', 'Seven':'Семь', 'Eight':'Восемь', 'Nine':'Девять',}
with open(file_name, "r", encoding='utf-8') as fr, open("task04.txt", "w", encoding='utf-8') as fw:
for line in fr:
eng, sep, num = line.split()
# print(f'{dig[eng]} {sep} {num}')
print(f'{dig[eng]} {sep} {num}', file=fw)

12
less-05/task-05.py Normal file
View File

@ -0,0 +1,12 @@
# Создать (программно) текстовый файл, записать в него программно набор чисел,
# разделённых пробелами. Программа должна подсчитывать сумму чисел в файле и выводить её на экран.
from random import randint
with open("task05.txt", "w+", encoding='utf-8') as f:
# запишем
f.write(f"{' '.join(map(str,[randint(1,99) for _ in range(100)]))}")
# вернемся в начало и прочтем файл
f.seek(0)
numbers = [int(i) for i in f.read().split()]
print(f'Сумма чисел из файла {sum(numbers)}')

24
less-05/task-06.py Normal file
View File

@ -0,0 +1,24 @@
# Сформировать (не программно) текстовый файл. В нём каждая строка должна описывать учебный предмет
# и наличие лекционных, практических и лабораторных занятий по предмету. Сюда должно входить и количество
# занятий. Необязательно, чтобы для каждого предмета были все типы занятий.
# Сформировать словарь, содержащий название предмета и общее количество занятий по нему. Вывести его на экран.
#
# Примеры строк файла:
# Информатика: 100(л) 50(пр) 20(лаб).
# Физика: 30(л) — 10(лаб)
# Физкультура: — 30(пр) —
# Пример словаря: {“Информатика”: 170, “Физика”: 40, “Физкультура”: 30}
file_name = 'examples5/text_6.txt'
dig_les = {}
with open(file_name, "r", encoding='utf-8') as fr:
for line in fr:
num_les = 0
item, desc = line.split(':')
desc = desc.split()
for les in desc:
if '-' in les: continue
num, rest = les.split('(')
num_les += int(num)
dig_les[item] = num_les
print(dig_les)

36
less-05/task-07.py Normal file
View File

@ -0,0 +1,36 @@
# Создать вручную и заполнить несколькими строками текстовый файл, в котором каждая строка будет содержать
# данные о фирме: название, форма собственности, выручка, издержки.
#
# Пример строки файла: 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
file_name = "examples5/text_7.txt"
dig_firm = {}
num_firm = 0
aver_profit = 0
with open(file_name, "r", encoding='utf-8') as fr:
for line in fr:
name, type_own, rev, cost = line.split()
profit = int(rev)-int(cost)
if profit >= 0:
aver_profit += profit
num_firm += 1
dig_firm[name] = profit
aver_profit /= num_firm
with open('examples5/task07.json', "w", encoding='utf-8') as f:
json.dump([dig_firm, {"average_profit": aver_profit}], f, ensure_ascii=False)