mirror of
https://github.com/denis-on/basicsPython.git
synced 2026-02-03 08:00:51 +03:00
dz les 5
This commit is contained in:
parent
2dc50c1f1f
commit
8188d0766d
30
less-05/task-01.py
Normal file
30
less-05/task-01.py
Normal 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
21
less-05/task-02.py
Normal 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
21
less-05/task-03.py
Normal 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
22
less-05/task-04.py
Normal 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
12
less-05/task-05.py
Normal 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
24
less-05/task-06.py
Normal 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
36
less-05/task-07.py
Normal 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)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user