From dab509d28154e2887aee6f484389e3506b98cc4a Mon Sep 17 00:00:00 2001 From: BESTTEST4YOU <81219764+BESTTEST4YOU@users.noreply.github.com> Date: Tue, 22 Jun 2021 22:46:42 +0300 Subject: [PATCH 01/25] Update and rename README.md to hw3 --- README.md | 1 - hw3 | 86 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 86 insertions(+), 1 deletion(-) delete mode 100644 README.md create mode 100644 hw3 diff --git a/README.md b/README.md deleted file mode 100644 index fdc793e..0000000 --- a/README.md +++ /dev/null @@ -1 +0,0 @@ -python diff --git a/hw3 b/hw3 new file mode 100644 index 0000000..d45c203 --- /dev/null +++ b/hw3 @@ -0,0 +1,86 @@ +#1. Реализовать функцию, принимающую два числа (позиционные аргументы) и +# выполняющую их деление. Числа запрашивать у пользователя, предусмотреть +# обработку ситуации деления на ноль. + +while True: + def myfunc(arg1, arg2): + try: + return arg1 / arg2, arg1 + except ZeroDivisionError: + return print('Division on 0') + print(myfunc((int(input('Enter first number: '))), (int(input('Enter second number: '))))) + +#2. Реализовать функцию, принимающую несколько параметров, +# описывающих данные пользователя: имя, фамилия, +# год рождения, город проживания, email, телефон. +# Функция должна принимать параметры как именованные аргументы. +# Реализовать вывод данных о пользователе одной строкой. + +# Robert Paulson 1980 NewYork rb@yahoo.com 989898 + +print('Who are You?') +def myfunc(**kwargs): + return list(kwargs.values()) +print(', '.join(myfunc(name=input('Name: '), + name2=input('Surname: '), + year=input('Year of birth: '), + town=input('Town: '), + email=input('Email: '), + tel=input('Tel number: ')))) + +# 3. Реализовать функцию my_func(), которая принимает три позиционных аргумента, +# и возвращает сумму наибольших двух аргументов. + +def myfunc(a, b, c): + n = [a, b, c] + n.remove(min(a, b, c)) + return sum(n) +print(myfunc(1, 2, 3)) + +# 4. Программа принимает действительное положительное число x и целое отрицательное число y. +# Необходимо выполнить возведение числа x в степень y. Задание необходимо реализовать в виде функции my_func(x, y). +# При решении задания необходимо обойтись без встроенной функции возведения числа в степень. +# Подсказка: попробуйте решить задачу двумя способами. Первый — возведение в степень с помощью оператора **. +# Второй — более сложная реализация без оператора **, предусматривающая использование цикла. + +def myfunc(x, y): + return 1 / x ** abs(y) +print(myfunc(3, -3)) + +def myfunc2(x, y): + for i in range(abs(y - 1)): + x *= x + return 1 / x +print(myfunc2(3, -3)) + +# 5. Программа запрашивает у пользователя строку чисел, разделенных пробелом. +# При нажатии Enter должна выводиться сумма чисел. +# Пользователь может продолжить ввод чисел, +# разделенных пробелом и снова нажать Enter. Сумма вновь введенных чисел будет добавляться +# к уже подсчитанной сумме. Но если вместо числа вводится специальный символ, выполнение программы завершается. +# Если специальный символ введен после нескольких чисел, то вначале нужно добавить сумму этих чисел к полученной +# ранее сумме и после этого завершить программу. + +def myfunc(*args): + sum = 0 + while True: + n = list(input('Input: ').split()) + if n == '#': + break + else: + for n in args: + sum +=n + +# 6. Реализовать функцию int_func(), принимающую слово из маленьких латинских +# букв и возвращающую его же, но с прописной первой буквой. Например, print(int_func(‘text’)) -> Text. + +# Продолжить работу над заданием. В программу должна попадать строка из слов, разделенных пробелом. +# Каждое слово состоит из латинских букв в нижнем регистре. Сделать вывод исходной строки, +# но каждое слово должно начинаться с заглавной буквы. +# Необходимо использовать написанную ранее функцию int_func(). + +def int_func(): + w = input("Input: ") + w = w.title() + return w +print(int_func()) From a80b9c04528ff615d0c946ae04bab229a8e52051 Mon Sep 17 00:00:00 2001 From: BESTTEST4YOU <81219764+BESTTEST4YOU@users.noreply.github.com> Date: Wed, 23 Jun 2021 17:23:24 +0300 Subject: [PATCH 02/25] Add files via upload --- hw 4 - 1.py | 11 +++++++++++ hw 4 - 2.py | 12 ++++++++++++ 2 files changed, 23 insertions(+) create mode 100644 hw 4 - 1.py create mode 100644 hw 4 - 2.py diff --git a/hw 4 - 1.py b/hw 4 - 1.py new file mode 100644 index 0000000..af96879 --- /dev/null +++ b/hw 4 - 1.py @@ -0,0 +1,11 @@ +# 1. Реализовать скрипт, в котором должна быть предусмотрена функция расчета заработной платы сотрудника. +# В расчете необходимо использовать формулу: (выработка в часах * ставка в час) + премия. +# Для выполнения расчета для конкретных значений необходимо запускать скрипт с параметрами. + +def salary(): + x = float(input('Введите количество отработанных часов: ')) + y = float(input('Ставка в час: ')) + c = float(input('Премия: ')) + pay = x * y + return pay + c +print(f'Размер заработной платы составил: {salary()} руб.') \ No newline at end of file diff --git a/hw 4 - 2.py b/hw 4 - 2.py new file mode 100644 index 0000000..54960ee --- /dev/null +++ b/hw 4 - 2.py @@ -0,0 +1,12 @@ +# 2. Представлен список чисел. Необходимо вывести элементы исходного списка, +# значения которых больше предыдущего элемента. +# Подсказка: элементы, удовлетворяющие условию, оформить в виде списка. +# Для формирования списка использовать генератор. +# Пример исходного списка: [300, 2, 12, 44, 1, 1, 4, 10, 7, 1, 78, 123, 55]. +# Результат: [12, 44, 4, 10, 78, 123]. + +import random +lst = [random.randrange(3, 33, 3) for i in range(15)] +new_lst = [number for i, number in enumerate(lst) if i > 0 and lst[i] > lst[i - 1]] +# print(f"Исходный список: {lst}") +print("New list: ", new_lst) From b89eaa841ff283d0e0d02e7ca9ff97fd16929c5f Mon Sep 17 00:00:00 2001 From: BESTTEST4YOU <81219764+BESTTEST4YOU@users.noreply.github.com> Date: Wed, 23 Jun 2021 19:18:09 +0300 Subject: [PATCH 03/25] Update hw 4 - 1.py --- hw 4 - 1.py | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/hw 4 - 1.py b/hw 4 - 1.py index af96879..25ed1ff 100644 --- a/hw 4 - 1.py +++ b/hw 4 - 1.py @@ -2,10 +2,7 @@ # В расчете необходимо использовать формулу: (выработка в часах * ставка в час) + премия. # Для выполнения расчета для конкретных значений необходимо запускать скрипт с параметрами. -def salary(): - x = float(input('Введите количество отработанных часов: ')) - y = float(input('Ставка в час: ')) - c = float(input('Премия: ')) - pay = x * y - return pay + c -print(f'Размер заработной платы составил: {salary()} руб.') \ No newline at end of file +from sys import argv +script_name, hours, rate_per_hour, bonus = argv +hours, rate_per_hour, bonus = map(int, argv[1:]) +print("Salary: ", hours * rate_per_hour + bonus, "руб.") From ec40a4b6367bf7d717577a4024b6a9ba613bccd6 Mon Sep 17 00:00:00 2001 From: BESTTEST4YOU <81219764+BESTTEST4YOU@users.noreply.github.com> Date: Wed, 23 Jun 2021 20:19:57 +0300 Subject: [PATCH 04/25] Update and rename hw 4 - 1.py to hw 4.py --- hw 4 - 1.py | 8 -------- hw 4.py | 29 +++++++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 8 deletions(-) delete mode 100644 hw 4 - 1.py create mode 100644 hw 4.py diff --git a/hw 4 - 1.py b/hw 4 - 1.py deleted file mode 100644 index 25ed1ff..0000000 --- a/hw 4 - 1.py +++ /dev/null @@ -1,8 +0,0 @@ -# 1. Реализовать скрипт, в котором должна быть предусмотрена функция расчета заработной платы сотрудника. -# В расчете необходимо использовать формулу: (выработка в часах * ставка в час) + премия. -# Для выполнения расчета для конкретных значений необходимо запускать скрипт с параметрами. - -from sys import argv -script_name, hours, rate_per_hour, bonus = argv -hours, rate_per_hour, bonus = map(int, argv[1:]) -print("Salary: ", hours * rate_per_hour + bonus, "руб.") diff --git a/hw 4.py b/hw 4.py new file mode 100644 index 0000000..a20d1f0 --- /dev/null +++ b/hw 4.py @@ -0,0 +1,29 @@ +# 1. Реализовать скрипт, в котором должна быть предусмотрена функция расчета заработной платы сотрудника. +# В расчете необходимо использовать формулу: (выработка в часах * ставка в час) + премия. +# Для выполнения расчета для конкретных значений необходимо запускать скрипт с параметрами. + +from sys import argv +script_name, hours, rate_per_hour, bonus = argv +hours, rate_per_hour, bonus = map(int, argv[1:]) +print("Salary: ", hours * rate_per_hour + bonus, "руб.") + + +# 2. Представлен список чисел. Необходимо вывести элементы исходного списка, +# значения которых больше предыдущего элемента. +# Подсказка: элементы, удовлетворяющие условию, оформить в виде списка. +# Для формирования списка использовать генератор. +# Пример исходного списка: [300, 2, 12, 44, 1, 1, 4, 10, 7, 1, 78, 123, 55]. +# Результат: [12, 44, 4, 10, 78, 123]. + +import random +lst = [random.randrange(3, 33, 3) for i in range(15)] +new_lst = [number for i, number in enumerate(lst) if i > 0 and lst[i] > lst[i - 1]] +# print(f"Old list: {lst}") +print("New list: ", new_lst) + + +# 3. Для чисел в пределах от 20 до 240 найти числа, кратные 20 или 21. +# Необходимо решить задание в одну строку. # Подсказка: использовать функцию range() и генератор. + +new = [i for i in range(20, 240) if i % 21 == 0] +# print(new) From bd355c835001b709b2521599520971f19a14c226 Mon Sep 17 00:00:00 2001 From: BESTTEST4YOU <81219764+BESTTEST4YOU@users.noreply.github.com> Date: Wed, 23 Jun 2021 20:20:18 +0300 Subject: [PATCH 05/25] Delete hw 4 - 2.py --- hw 4 - 2.py | 12 ------------ 1 file changed, 12 deletions(-) delete mode 100644 hw 4 - 2.py diff --git a/hw 4 - 2.py b/hw 4 - 2.py deleted file mode 100644 index 54960ee..0000000 --- a/hw 4 - 2.py +++ /dev/null @@ -1,12 +0,0 @@ -# 2. Представлен список чисел. Необходимо вывести элементы исходного списка, -# значения которых больше предыдущего элемента. -# Подсказка: элементы, удовлетворяющие условию, оформить в виде списка. -# Для формирования списка использовать генератор. -# Пример исходного списка: [300, 2, 12, 44, 1, 1, 4, 10, 7, 1, 78, 123, 55]. -# Результат: [12, 44, 4, 10, 78, 123]. - -import random -lst = [random.randrange(3, 33, 3) for i in range(15)] -new_lst = [number for i, number in enumerate(lst) if i > 0 and lst[i] > lst[i - 1]] -# print(f"Исходный список: {lst}") -print("New list: ", new_lst) From 5a917ed4d29daef4a32caae8c357f3a68c38cb00 Mon Sep 17 00:00:00 2001 From: BESTTEST4YOU <81219764+BESTTEST4YOU@users.noreply.github.com> Date: Wed, 23 Jun 2021 22:27:53 +0300 Subject: [PATCH 06/25] Update hw 4.py --- hw 4.py | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/hw 4.py b/hw 4.py index a20d1f0..4e9c913 100644 --- a/hw 4.py +++ b/hw 4.py @@ -27,3 +27,28 @@ new = [i for i in range(20, 240) if i % 21 == 0] # print(new) + + +# 7 (Дополнительно). Реализовать генератор с помощью функции с ключевым словом yield, +# создающим очередное значение. При вызове функции должен создаваться объект-генератор. +# Функция должна вызываться следующим образом: for el in fact(n). +# Функция отвечает за получение факториала числа, +# а в цикле необходимо выводить только первые n чисел, начиная с 1! и до n!. +# Подсказка: факториал числа n — произведение чисел от 1 до n. Например, +# факториал четырёх 4! = 1 * 2 * 3 * 4 = 24. + +from itertools import count +from math import factorial + +def gen(): + for i in count(1): + yield factorial(i) + +generator = gen() +x = 0 +for k in generator: + if x < 4: + print(k) + x += 1 + else: + break From 153da0432e74d91829c89f5fdd6801dc72f5a937 Mon Sep 17 00:00:00 2001 From: BESTTEST4YOU <81219764+BESTTEST4YOU@users.noreply.github.com> Date: Thu, 24 Jun 2021 00:31:38 +0300 Subject: [PATCH 07/25] Update hw 4.py --- hw 4.py | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/hw 4.py b/hw 4.py index 4e9c913..6a31aba 100644 --- a/hw 4.py +++ b/hw 4.py @@ -28,6 +28,33 @@ new = [i for i in range(20, 240) if i % 21 == 0] # print(new) +# 6. Реализовать два небольших скрипта: +# а) итератор, генерирующий целые числа, начиная с указанного, +# б) итератор, повторяющий элементы некоторого списка, определенного заранее. +# Подсказка: использовать функцию count() и cycle() модуля itertools. +# Обратите внимание, что создаваемый цикл не должен быть бесконечным. +# Необходимо предусмотреть условие его завершения. +# Например, в первом задании выводим целые числа, начиная с 3, а при достижении числа 10 завершаем цикл. +# Во втором также необходимо предусмотреть условие, при котором повторение элементов списка будет прекращено. + +print('итератор "a"') +import time +from itertools import count +i = int(input('>>>')) +for el in count(i): + if el == 10: + break + else: + print(el) +time.sleep(2) +print('итератор "b"') +from itertools import cycle +lst = [2, 2, 2, 7, 23, 1, 44, 44, 3, 2, 10, 7, 4, 11] +for el in cycle(lst): + if el == 10: + break + else: + print(el) # 7 (Дополнительно). Реализовать генератор с помощью функции с ключевым словом yield, # создающим очередное значение. При вызове функции должен создаваться объект-генератор. @@ -39,11 +66,9 @@ from itertools import count from math import factorial - def gen(): for i in count(1): yield factorial(i) - generator = gen() x = 0 for k in generator: From 91543d2f91f94cc0f7762593c07445d381d6b2d7 Mon Sep 17 00:00:00 2001 From: BESTTEST4YOU <81219764+BESTTEST4YOU@users.noreply.github.com> Date: Thu, 24 Jun 2021 01:16:49 +0300 Subject: [PATCH 08/25] Update hw 4.py --- hw 4.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/hw 4.py b/hw 4.py index 6a31aba..e0baa89 100644 --- a/hw 4.py +++ b/hw 4.py @@ -37,12 +37,14 @@ # Например, в первом задании выводим целые числа, начиная с 3, а при достижении числа 10 завершаем цикл. # Во втором также необходимо предусмотреть условие, при котором повторение элементов списка будет прекращено. -print('итератор "a"') + import time from itertools import count -i = int(input('>>>')) +print('итератор "a"') +# i = int(input('>>>')) +i = int(2) for el in count(i): - if el == 10: + if el == 6: break else: print(el) @@ -51,10 +53,10 @@ from itertools import cycle lst = [2, 2, 2, 7, 23, 1, 44, 44, 3, 2, 10, 7, 4, 11] for el in cycle(lst): - if el == 10: + if el == 3: break else: - print(el) + print(el, end=" ") # 7 (Дополнительно). Реализовать генератор с помощью функции с ключевым словом yield, # создающим очередное значение. При вызове функции должен создаваться объект-генератор. From 4e07c4f927abd886c9ff43cc80fee19627896cc5 Mon Sep 17 00:00:00 2001 From: BESTTEST4YOU <81219764+BESTTEST4YOU@users.noreply.github.com> Date: Fri, 25 Jun 2021 00:36:07 +0300 Subject: [PATCH 09/25] Update hw 4.py --- hw 4.py | 88 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) diff --git a/hw 4.py b/hw 4.py index e0baa89..9897752 100644 --- a/hw 4.py +++ b/hw 4.py @@ -28,6 +28,91 @@ new = [i for i in range(20, 240) if i % 21 == 0] # print(new) +# 4. Представлен список чисел. Определить элементы списка, не имеющие повторений. +# Сформировать итоговый массив чисел, соответствующих требованию. +# Элементы вывести в порядке их следования в исходном списке. +# Для выполнения задания обязательно использовать генератор. +# Пример исходного списка: [2, 2, 2, 7, 23, 1, 44, 44, 3, 2, 10, 7, 4, 11]. +# Результат: [23, 1, 3, 10, 4, 11] + +from itertools import count +lst = [2, 2, 2, 7, 23, 1, 44, 44, 3, 2, 10, 7, 4, 11] +"""первый / не правильный вариант""" +# new_lst = [] +# for i in lst: +# if lst.count(i) == 1: +# new_lst.append(i) + +new_lst = [] +for el in count(): + """тут если вставить lst будет ошибка на итерацию. если оставить так, то цикл вечный. как пройти список используя count?""" + if el == 1 in lst.count(1): + new_lst.append(el) + +print('first list: ', lst) +print('result list: ', new_lst) + +"""c 5 завал полный""" +# 5. Реализовать формирование списка, используя функцию range() и возможности генератора. +# В список должны войти четные числа от 100 до 1000 (включая границы). +# Необходимо получить результат вычисления произведения всех элементов списка. +# Подсказка: использовать функцию reduce(). + + +import math +from itertools import count +from random import randrange +from functools import reduce +def multiplication(): +new = [] +for el in count(100, 2): + if el > 1000: + break + else: + new.append(el) + print(new) +multiplication() int + +# print(reduce(multiplication, [i, b])) +# print(functools.reduce(lambda a, b : a * b, new)) + + # lst1 = [randrange(99, 1001, 1)] + # new = [] + # for i in lst1: + # i * (i+1) + # new.insert(i) +# print(reduce(multiplication, [a, b])) + +# 5. Реализовать формирование списка, используя функцию range() и возможности генератора. +# В список должны войти четные числа от 100 до 1000 (включая границы). +# Необходимо получить результат вычисления произведения всех элементов списка. +# Подсказка: использовать функцию reduce(). + + +import math +from itertools import count +from random import randrange +from functools import reduce +def multiplication(): +new = [] +for el in count(100, 2): + if el > 1000: + break + else: + new.append(el) + print(new) +multiplication() int + +# print(reduce(multiplication, [i, b])) +# print(functools.reduce(lambda a, b : a * b, new)) + + # lst1 = [randrange(99, 1001, 1)] + # new = [] + # for i in lst1: + # i * (i+1) + # new.insert(i) +# print(reduce(multiplication, [a, b])) + # 6. Реализовать два небольших скрипта: # а) итератор, генерирующий целые числа, начиная с указанного, # б) итератор, повторяющий элементы некоторого списка, определенного заранее. @@ -40,6 +125,7 @@ import time from itertools import count + print('итератор "a"') # i = int(input('>>>')) i = int(2) @@ -48,7 +134,9 @@ break else: print(el) + time.sleep(2) + print('итератор "b"') from itertools import cycle lst = [2, 2, 2, 7, 23, 1, 44, 44, 3, 2, 10, 7, 4, 11] From 25fb41faa04c525839641d71c6c29b99b21e87b5 Mon Sep 17 00:00:00 2001 From: BESTTEST4YOU <81219764+BESTTEST4YOU@users.noreply.github.com> Date: Mon, 28 Jun 2021 19:34:40 +0300 Subject: [PATCH 10/25] Create hw5 --- hw5 | 72 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 hw5 diff --git a/hw5 b/hw5 new file mode 100644 index 0000000..2fb99cd --- /dev/null +++ b/hw5 @@ -0,0 +1,72 @@ +# 1. Создать программно файл в текстовом формате, записать в него +# построчно данные, вводимые пользователем. Об окончании ввода +# данных свидетельствует пустая строка. + + +# 2. Создать текстовый файл (не программно), сохранить в нем +# несколько строк, выполнить подсчет количества строк, +# количества слов в каждой строке. + +f = open('5.2.txt', 'w', encoding='utf-8') +for i in f: + input(i) +f.close() + +print() + + +# 3. Создать текстовый файл (не программно), построчно записать фамилии +# сотрудников и величину их окладов. Определить, кто из сотрудников +# имеет оклад менее 20 тыс., вывести фамилии этих сотрудников. +# Выполнить подсчет средней величины дохода сотрудников. + + +# 4. Создать (не программно) текстовый файл со следующим содержимым: +# One — 1 +# Two — 2 +# Three — 3 +# Four — 4 +# Необходимо написать программу, открывающую файл на чтение и +# считывающую построчно данные. +# При этом английские числительные должны заменяться на русские. +# Новый блок строк должен записываться в новый текстовый файл. + + +# 5. Создать (программно) текстовый файл, записать в него программно набор чисел, +# разделенных пробелами. Программа должна подсчитывать сумму чисел в файле +# и выводить ее на экран. + + +# 6. Необходимо создать (не программно) текстовый файл, где каждая строка +# описывает учебный предмет и наличие лекционных, практических и +# лабораторных занятий по этому предмету и их количество. Важно, +# чтобы для каждого предмета не обязательно были все типы занятий. +# Сформировать словарь, содержащий название предмета и общее количество занятий по нему. +# Вывести словарь на экран. +# Примеры строк файла: +# Информатика: 100(л) 50(пр) 20(лаб). +# Физика: 30(л) — 10(лаб) +# Физкультура: — 30(пр) — +# +# Пример словаря: +# {“Информатика”: 170, “Физика”: 40, “Физкультура”: 30} + + + +# 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}] +# +# Подсказка: использовать менеджеры контекста. From a8fe10e6e5286009100e310a56e954a0513aaeed Mon Sep 17 00:00:00 2001 From: BESTTEST4YOU <81219764+BESTTEST4YOU@users.noreply.github.com> Date: Mon, 28 Jun 2021 22:18:49 +0300 Subject: [PATCH 11/25] Update hw5 --- hw5 | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/hw5 b/hw5 index 2fb99cd..30478c9 100644 --- a/hw5 +++ b/hw5 @@ -2,6 +2,20 @@ # построчно данные, вводимые пользователем. Об окончании ввода # данных свидетельствует пустая строка. +f = open('test.txt', 'w') +line = input('Input: \n') +while line: + f.writelines(line) + line = input('Input: \n') + if not line: + break +f.close() + +f = open('test.txt', 'r') +content = f.readlines() +print(content) +f.close() + # 2. Создать текстовый файл (не программно), сохранить в нем # несколько строк, выполнить подсчет количества строк, From 077bc2ac37816cb5ee861757b4986cfe21a2c49b Mon Sep 17 00:00:00 2001 From: BESTTEST4YOU <81219764+BESTTEST4YOU@users.noreply.github.com> Date: Mon, 28 Jun 2021 22:19:56 +0300 Subject: [PATCH 12/25] Update hw5 --- hw5 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hw5 b/hw5 index 30478c9..05d540e 100644 --- a/hw5 +++ b/hw5 @@ -2,7 +2,7 @@ # построчно данные, вводимые пользователем. Об окончании ввода # данных свидетельствует пустая строка. -f = open('test.txt', 'w') +f = open('5.1.txt', 'w') line = input('Input: \n') while line: f.writelines(line) @@ -11,7 +11,7 @@ while line: break f.close() -f = open('test.txt', 'r') +f = open('5.1.txt', 'r') content = f.readlines() print(content) f.close() From 55db265e111b297ad6996c7a94c1cdd218961e5b Mon Sep 17 00:00:00 2001 From: BESTTEST4YOU <81219764+BESTTEST4YOU@users.noreply.github.com> Date: Mon, 28 Jun 2021 22:34:56 +0300 Subject: [PATCH 13/25] Update and rename hw5 to hw5.py --- hw5 => hw5.py | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) rename hw5 => hw5.py (95%) diff --git a/hw5 b/hw5.py similarity index 95% rename from hw5 rename to hw5.py index 05d540e..d390855 100644 --- a/hw5 +++ b/hw5.py @@ -21,13 +21,14 @@ # несколько строк, выполнить подсчет количества строк, # количества слов в каждой строке. -f = open('5.2.txt', 'w', encoding='utf-8') -for i in f: - input(i) -f.close() - -print() - +str = open('5.2.txt', 'r') +content = str.readlines() +print(f'str: {len(content)}') +words = open('5.2.txt', 'r') +content = words.read() +content = content.split() +print(f'words: {len(content)}') +words.close() # 3. Создать текстовый файл (не программно), построчно записать фамилии # сотрудников и величину их окладов. Определить, кто из сотрудников From 69e421b502cf0c19d2b30528732327985865abae Mon Sep 17 00:00:00 2001 From: BESTTEST4YOU <81219764+BESTTEST4YOU@users.noreply.github.com> Date: Mon, 28 Jun 2021 22:35:55 +0300 Subject: [PATCH 14/25] Create 5.3.txt --- 5.3.txt | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 5.3.txt diff --git a/5.3.txt b/5.3.txt new file mode 100644 index 0000000..47f891c --- /dev/null +++ b/5.3.txt @@ -0,0 +1,9 @@ +Patterson 21000 +Carmack 22000 +Knut 19000 +Rossum 19500 +Gosling 23500 +Kernighan 18700 +Thompson 20500 +Wirth 22500 +Curtis 19300 From 8c623d14172d19675bdd93fd06642445dea057a8 Mon Sep 17 00:00:00 2001 From: BESTTEST4YOU <81219764+BESTTEST4YOU@users.noreply.github.com> Date: Mon, 28 Jun 2021 22:36:27 +0300 Subject: [PATCH 15/25] Create 5.2.txt --- 5.2.txt | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 5.2.txt diff --git a/5.2.txt b/5.2.txt new file mode 100644 index 0000000..a48dba6 --- /dev/null +++ b/5.2.txt @@ -0,0 +1,3 @@ +Создать текстовый файл (не программно), сохранить в нем +несколько строк, выполнить подсчет количества строк, +количества слов в каждой строке. From 8b434d1a22ecb36189b9ee74643aa466e7cefda5 Mon Sep 17 00:00:00 2001 From: BESTTEST4YOU <81219764+BESTTEST4YOU@users.noreply.github.com> Date: Mon, 28 Jun 2021 22:50:10 +0300 Subject: [PATCH 16/25] Update hw5.py --- hw5.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/hw5.py b/hw5.py index d390855..8abf180 100644 --- a/hw5.py +++ b/hw5.py @@ -16,7 +16,6 @@ print(content) f.close() - # 2. Создать текстовый файл (не программно), сохранить в нем # несколько строк, выполнить подсчет количества строк, # количества слов в каждой строке. @@ -35,6 +34,17 @@ # имеет оклад менее 20 тыс., вывести фамилии этих сотрудников. # Выполнить подсчет средней величины дохода сотрудников. +with open('5.3.txt', 'r') as salary: + sal = [] + poor = [] + lst = salary.read().split('\n') + for i in lst: + i = i.split() + if int(i[1]) < 20000: + poor.append(i[0]) + sal.append(i[1]) + avsalary = round(sum(map(int, sal)) / len(sal), 1) +print(f'Salary > 20.000 {poor}\nAverage salary = {avsalary}') # 4. Создать (не программно) текстовый файл со следующим содержимым: # One — 1 From dde1065fa21ff73b278d76ab649263327f7448c9 Mon Sep 17 00:00:00 2001 From: BESTTEST4YOU <81219764+BESTTEST4YOU@users.noreply.github.com> Date: Mon, 28 Jun 2021 23:03:17 +0300 Subject: [PATCH 17/25] Update hw5.py --- hw5.py | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/hw5.py b/hw5.py index 8abf180..690956a 100644 --- a/hw5.py +++ b/hw5.py @@ -36,15 +36,15 @@ with open('5.3.txt', 'r') as salary: sal = [] - poor = [] + avsal = [] lst = salary.read().split('\n') for i in lst: i = i.split() if int(i[1]) < 20000: - poor.append(i[0]) + avsal.append(i[0]) sal.append(i[1]) avsalary = round(sum(map(int, sal)) / len(sal), 1) -print(f'Salary > 20.000 {poor}\nAverage salary = {avsalary}') +print(f'Salary > 20.000 {avsal}\nAverage salary = {avsalary}') # 4. Создать (не программно) текстовый файл со следующим содержимым: # One — 1 @@ -56,6 +56,14 @@ # При этом английские числительные должны заменяться на русские. # Новый блок строк должен записываться в новый текстовый файл. +rus = {'One': 'Один', 'Two': 'Два', 'Three': 'Три', 'Four': 'Четыре'} +second = [] +with open('5.4.txt', 'r', encoding='utf-8') as first: + for i in first: + i = i.split(' ', 1) + second.append(rus[i[0]] + ' ' + i[1]) +with open('5.4.1.txt', 'w') as file_obj_2: + file_obj_2.writelines(second) # 5. Создать (программно) текстовый файл, записать в него программно набор чисел, # разделенных пробелами. Программа должна подсчитывать сумму чисел в файле From 9d4e42cf1e0019a57bcb12c9646c044691da03b5 Mon Sep 17 00:00:00 2001 From: BESTTEST4YOU <81219764+BESTTEST4YOU@users.noreply.github.com> Date: Mon, 28 Jun 2021 23:04:03 +0300 Subject: [PATCH 18/25] Add files via upload --- 5.4.1.txt | 4 ++++ 5.4.txt | 4 ++++ 2 files changed, 8 insertions(+) create mode 100644 5.4.1.txt create mode 100644 5.4.txt diff --git a/5.4.1.txt b/5.4.1.txt new file mode 100644 index 0000000..7971f95 --- /dev/null +++ b/5.4.1.txt @@ -0,0 +1,4 @@ + 1 + 2 + 3 + 4 \ No newline at end of file diff --git a/5.4.txt b/5.4.txt new file mode 100644 index 0000000..df851a0 --- /dev/null +++ b/5.4.txt @@ -0,0 +1,4 @@ +One — 1 +Two — 2 +Three — 3 +Four — 4 \ No newline at end of file From 184c5dce6f4ff1ca6ef71e0207b6edcb872e25a2 Mon Sep 17 00:00:00 2001 From: BESTTEST4YOU <81219764+BESTTEST4YOU@users.noreply.github.com> Date: Mon, 28 Jun 2021 23:27:02 +0300 Subject: [PATCH 19/25] Update hw5.py --- hw5.py | 44 ++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 42 insertions(+), 2 deletions(-) diff --git a/hw5.py b/hw5.py index 690956a..aff6e07 100644 --- a/hw5.py +++ b/hw5.py @@ -56,12 +56,12 @@ # При этом английские числительные должны заменяться на русские. # Новый блок строк должен записываться в новый текстовый файл. -rus = {'One': 'Один', 'Two': 'Два', 'Three': 'Три', 'Four': 'Четыре'} +res = {'One': 'Один', 'Two': 'Два', 'Three': 'Три', 'Four': 'Четыре'} second = [] with open('5.4.txt', 'r', encoding='utf-8') as first: for i in first: i = i.split(' ', 1) - second.append(rus[i[0]] + ' ' + i[1]) + second.append(res[i[0]] + ' ' + i[1]) with open('5.4.1.txt', 'w') as file_obj_2: file_obj_2.writelines(second) @@ -69,6 +69,17 @@ # разделенных пробелами. Программа должна подсчитывать сумму чисел в файле # и выводить ее на экран. +def my_func(): + while True: + try: + with open('5.5.txt', 'w+') as file_obj: + line = input('Input numbers separated by a space\n') + file_obj.writelines(line) + numb = line.split() + print(sum(map(int, numb))) + except ValueError: + print('Error') +my_func() # 6. Необходимо создать (не программно) текстовый файл, где каждая строка # описывает учебный предмет и наличие лекционных, практических и @@ -103,3 +114,32 @@ # {"average_profit": 2000}] # # Подсказка: использовать менеджеры контекста. + +import json +profit = {} +pr = {} +prof = 0 +prof_aver = 0 +i = 0 +with open('5.7.txt', 'r') as file: + for line in file: + name, firm, earning, damage = line.split() + profit[name] = int(earning) - int(damage) + if profit.setdefault(name) >= 0: + prof = prof + profit.setdefault(name) + i += 1 + if i != 0: + prof_aver = prof / i + print(f'Прибыль средняя - {prof_aver:.2f}') + else: + print(f'Прибыль средняя - отсутсвует. Все работают в убыток') + pr = {'средняя прибыль': round(prof_aver)} + profit.update(pr) + print(f'Прибыль каждой компании - {profit}') + +with open('5.7.json', 'w') as write_js: + json.dump(profit, write_js) + + js_str = json.dumps(profit) + print(f'Создан файл с расширением json со следующим содержимым: \n ' + f' {js_str}') From 252d0e92d96e989ec117627fac2150e6d19175c0 Mon Sep 17 00:00:00 2001 From: BESTTEST4YOU <81219764+BESTTEST4YOU@users.noreply.github.com> Date: Mon, 28 Jun 2021 23:28:35 +0300 Subject: [PATCH 20/25] Add files via upload --- 5.7.json | 1 + 5.7.txt | 6 ++++++ 2 files changed, 7 insertions(+) create mode 100644 5.7.json create mode 100644 5.7.txt diff --git a/5.7.json b/5.7.json new file mode 100644 index 0000000..d625129 --- /dev/null +++ b/5.7.json @@ -0,0 +1 @@ +{"firm_1": 5000, "firm_2": 13000, "firm_3": 24000, "firm_4": 42000, "firm_5": 11000, "firm_6": 5000, "\u0441\u0440\u0435\u0434\u043d\u044f\u044f \u043f\u0440\u0438\u0431\u044b\u043b\u044c": 16667} \ No newline at end of file diff --git a/5.7.txt b/5.7.txt new file mode 100644 index 0000000..f726c3d --- /dev/null +++ b/5.7.txt @@ -0,0 +1,6 @@ +firm_1 ООО 10000 5000 +firm_2 ООО 20000 7000 +firm_3 ООО 30000 6000 +firm_4 IP 50000 8000 +firm_5 AО 20000 9000 +firm_6 ОAО 10000 5000 \ No newline at end of file From 52ec032d21ab4d17455f60666f45a02f9cc01d5b Mon Sep 17 00:00:00 2001 From: BESTTEST4YOU <81219764+BESTTEST4YOU@users.noreply.github.com> Date: Mon, 28 Jun 2021 23:29:03 +0300 Subject: [PATCH 21/25] Add files via upload --- 5.6.txt | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 5.6.txt diff --git a/5.6.txt b/5.6.txt new file mode 100644 index 0000000..10a2503 --- /dev/null +++ b/5.6.txt @@ -0,0 +1,3 @@ +Информатика: 100(л) 50(пр) 20(лаб). +Физика: 30(л) — 10(лаб) +Физкультура: — 30(пр) — \ No newline at end of file From b8fc3977837acc9daae5bed65835c33f117a10ca Mon Sep 17 00:00:00 2001 From: BESTTEST4YOU <81219764+BESTTEST4YOU@users.noreply.github.com> Date: Mon, 28 Jun 2021 23:35:06 +0300 Subject: [PATCH 22/25] Delete hw 4.py --- hw 4.py | 169 -------------------------------------------------------- 1 file changed, 169 deletions(-) delete mode 100644 hw 4.py diff --git a/hw 4.py b/hw 4.py deleted file mode 100644 index 9897752..0000000 --- a/hw 4.py +++ /dev/null @@ -1,169 +0,0 @@ -# 1. Реализовать скрипт, в котором должна быть предусмотрена функция расчета заработной платы сотрудника. -# В расчете необходимо использовать формулу: (выработка в часах * ставка в час) + премия. -# Для выполнения расчета для конкретных значений необходимо запускать скрипт с параметрами. - -from sys import argv -script_name, hours, rate_per_hour, bonus = argv -hours, rate_per_hour, bonus = map(int, argv[1:]) -print("Salary: ", hours * rate_per_hour + bonus, "руб.") - - -# 2. Представлен список чисел. Необходимо вывести элементы исходного списка, -# значения которых больше предыдущего элемента. -# Подсказка: элементы, удовлетворяющие условию, оформить в виде списка. -# Для формирования списка использовать генератор. -# Пример исходного списка: [300, 2, 12, 44, 1, 1, 4, 10, 7, 1, 78, 123, 55]. -# Результат: [12, 44, 4, 10, 78, 123]. - -import random -lst = [random.randrange(3, 33, 3) for i in range(15)] -new_lst = [number for i, number in enumerate(lst) if i > 0 and lst[i] > lst[i - 1]] -# print(f"Old list: {lst}") -print("New list: ", new_lst) - - -# 3. Для чисел в пределах от 20 до 240 найти числа, кратные 20 или 21. -# Необходимо решить задание в одну строку. # Подсказка: использовать функцию range() и генератор. - -new = [i for i in range(20, 240) if i % 21 == 0] -# print(new) - -# 4. Представлен список чисел. Определить элементы списка, не имеющие повторений. -# Сформировать итоговый массив чисел, соответствующих требованию. -# Элементы вывести в порядке их следования в исходном списке. -# Для выполнения задания обязательно использовать генератор. -# Пример исходного списка: [2, 2, 2, 7, 23, 1, 44, 44, 3, 2, 10, 7, 4, 11]. -# Результат: [23, 1, 3, 10, 4, 11] - -from itertools import count -lst = [2, 2, 2, 7, 23, 1, 44, 44, 3, 2, 10, 7, 4, 11] -"""первый / не правильный вариант""" -# new_lst = [] -# for i in lst: -# if lst.count(i) == 1: -# new_lst.append(i) - -new_lst = [] -for el in count(): - """тут если вставить lst будет ошибка на итерацию. если оставить так, то цикл вечный. как пройти список используя count?""" - if el == 1 in lst.count(1): - new_lst.append(el) - -print('first list: ', lst) -print('result list: ', new_lst) - -"""c 5 завал полный""" -# 5. Реализовать формирование списка, используя функцию range() и возможности генератора. -# В список должны войти четные числа от 100 до 1000 (включая границы). -# Необходимо получить результат вычисления произведения всех элементов списка. -# Подсказка: использовать функцию reduce(). - - -import math -from itertools import count -from random import randrange -from functools import reduce -def multiplication(): -new = [] -for el in count(100, 2): - if el > 1000: - break - else: - new.append(el) - print(new) -multiplication() int - -# print(reduce(multiplication, [i, b])) -# print(functools.reduce(lambda a, b : a * b, new)) - - # lst1 = [randrange(99, 1001, 1)] - # new = [] - # for i in lst1: - # i * (i+1) - # new.insert(i) -# print(reduce(multiplication, [a, b])) - -# 5. Реализовать формирование списка, используя функцию range() и возможности генератора. -# В список должны войти четные числа от 100 до 1000 (включая границы). -# Необходимо получить результат вычисления произведения всех элементов списка. -# Подсказка: использовать функцию reduce(). - - -import math -from itertools import count -from random import randrange -from functools import reduce -def multiplication(): -new = [] -for el in count(100, 2): - if el > 1000: - break - else: - new.append(el) - print(new) -multiplication() int - -# print(reduce(multiplication, [i, b])) -# print(functools.reduce(lambda a, b : a * b, new)) - - # lst1 = [randrange(99, 1001, 1)] - # new = [] - # for i in lst1: - # i * (i+1) - # new.insert(i) -# print(reduce(multiplication, [a, b])) - -# 6. Реализовать два небольших скрипта: -# а) итератор, генерирующий целые числа, начиная с указанного, -# б) итератор, повторяющий элементы некоторого списка, определенного заранее. -# Подсказка: использовать функцию count() и cycle() модуля itertools. -# Обратите внимание, что создаваемый цикл не должен быть бесконечным. -# Необходимо предусмотреть условие его завершения. -# Например, в первом задании выводим целые числа, начиная с 3, а при достижении числа 10 завершаем цикл. -# Во втором также необходимо предусмотреть условие, при котором повторение элементов списка будет прекращено. - - -import time -from itertools import count - -print('итератор "a"') -# i = int(input('>>>')) -i = int(2) -for el in count(i): - if el == 6: - break - else: - print(el) - -time.sleep(2) - -print('итератор "b"') -from itertools import cycle -lst = [2, 2, 2, 7, 23, 1, 44, 44, 3, 2, 10, 7, 4, 11] -for el in cycle(lst): - if el == 3: - break - else: - print(el, end=" ") - -# 7 (Дополнительно). Реализовать генератор с помощью функции с ключевым словом yield, -# создающим очередное значение. При вызове функции должен создаваться объект-генератор. -# Функция должна вызываться следующим образом: for el in fact(n). -# Функция отвечает за получение факториала числа, -# а в цикле необходимо выводить только первые n чисел, начиная с 1! и до n!. -# Подсказка: факториал числа n — произведение чисел от 1 до n. Например, -# факториал четырёх 4! = 1 * 2 * 3 * 4 = 24. - -from itertools import count -from math import factorial -def gen(): - for i in count(1): - yield factorial(i) -generator = gen() -x = 0 -for k in generator: - if x < 4: - print(k) - x += 1 - else: - break From ca38b716f04c0a5a337c2775c38c69576a217fa2 Mon Sep 17 00:00:00 2001 From: BESTTEST4YOU <81219764+BESTTEST4YOU@users.noreply.github.com> Date: Mon, 28 Jun 2021 23:35:17 +0300 Subject: [PATCH 23/25] Delete hw3 --- hw3 | 86 ------------------------------------------------------------- 1 file changed, 86 deletions(-) delete mode 100644 hw3 diff --git a/hw3 b/hw3 deleted file mode 100644 index d45c203..0000000 --- a/hw3 +++ /dev/null @@ -1,86 +0,0 @@ -#1. Реализовать функцию, принимающую два числа (позиционные аргументы) и -# выполняющую их деление. Числа запрашивать у пользователя, предусмотреть -# обработку ситуации деления на ноль. - -while True: - def myfunc(arg1, arg2): - try: - return arg1 / arg2, arg1 - except ZeroDivisionError: - return print('Division on 0') - print(myfunc((int(input('Enter first number: '))), (int(input('Enter second number: '))))) - -#2. Реализовать функцию, принимающую несколько параметров, -# описывающих данные пользователя: имя, фамилия, -# год рождения, город проживания, email, телефон. -# Функция должна принимать параметры как именованные аргументы. -# Реализовать вывод данных о пользователе одной строкой. - -# Robert Paulson 1980 NewYork rb@yahoo.com 989898 - -print('Who are You?') -def myfunc(**kwargs): - return list(kwargs.values()) -print(', '.join(myfunc(name=input('Name: '), - name2=input('Surname: '), - year=input('Year of birth: '), - town=input('Town: '), - email=input('Email: '), - tel=input('Tel number: ')))) - -# 3. Реализовать функцию my_func(), которая принимает три позиционных аргумента, -# и возвращает сумму наибольших двух аргументов. - -def myfunc(a, b, c): - n = [a, b, c] - n.remove(min(a, b, c)) - return sum(n) -print(myfunc(1, 2, 3)) - -# 4. Программа принимает действительное положительное число x и целое отрицательное число y. -# Необходимо выполнить возведение числа x в степень y. Задание необходимо реализовать в виде функции my_func(x, y). -# При решении задания необходимо обойтись без встроенной функции возведения числа в степень. -# Подсказка: попробуйте решить задачу двумя способами. Первый — возведение в степень с помощью оператора **. -# Второй — более сложная реализация без оператора **, предусматривающая использование цикла. - -def myfunc(x, y): - return 1 / x ** abs(y) -print(myfunc(3, -3)) - -def myfunc2(x, y): - for i in range(abs(y - 1)): - x *= x - return 1 / x -print(myfunc2(3, -3)) - -# 5. Программа запрашивает у пользователя строку чисел, разделенных пробелом. -# При нажатии Enter должна выводиться сумма чисел. -# Пользователь может продолжить ввод чисел, -# разделенных пробелом и снова нажать Enter. Сумма вновь введенных чисел будет добавляться -# к уже подсчитанной сумме. Но если вместо числа вводится специальный символ, выполнение программы завершается. -# Если специальный символ введен после нескольких чисел, то вначале нужно добавить сумму этих чисел к полученной -# ранее сумме и после этого завершить программу. - -def myfunc(*args): - sum = 0 - while True: - n = list(input('Input: ').split()) - if n == '#': - break - else: - for n in args: - sum +=n - -# 6. Реализовать функцию int_func(), принимающую слово из маленьких латинских -# букв и возвращающую его же, но с прописной первой буквой. Например, print(int_func(‘text’)) -> Text. - -# Продолжить работу над заданием. В программу должна попадать строка из слов, разделенных пробелом. -# Каждое слово состоит из латинских букв в нижнем регистре. Сделать вывод исходной строки, -# но каждое слово должно начинаться с заглавной буквы. -# Необходимо использовать написанную ранее функцию int_func(). - -def int_func(): - w = input("Input: ") - w = w.title() - return w -print(int_func()) From 8fe5d907c4539a256d4f510dcea9340f682b29c9 Mon Sep 17 00:00:00 2001 From: BESTTEST4YOU <81219764+BESTTEST4YOU@users.noreply.github.com> Date: Tue, 29 Jun 2021 20:21:44 +0300 Subject: [PATCH 24/25] Update hw5.py --- hw5.py | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/hw5.py b/hw5.py index aff6e07..99e4e9b 100644 --- a/hw5.py +++ b/hw5.py @@ -119,27 +119,25 @@ def my_func(): profit = {} pr = {} prof = 0 -prof_aver = 0 +aver_profit = 0 i = 0 with open('5.7.txt', 'r') as file: for line in file: - name, firm, earning, damage = line.split() - profit[name] = int(earning) - int(damage) + name, firm, earning, loss = line.split() + profit[name] = int(earning) - int(loss) if profit.setdefault(name) >= 0: prof = prof + profit.setdefault(name) i += 1 if i != 0: - prof_aver = prof / i - print(f'Прибыль средняя - {prof_aver:.2f}') + aver_profit = prof / i + print(f'Average profit:\n{aver_profit:}') else: - print(f'Прибыль средняя - отсутсвует. Все работают в убыток') - pr = {'средняя прибыль': round(prof_aver)} + print('No profit') + pr = {'average profit': round(aver_profit)} profit.update(pr) - print(f'Прибыль каждой компании - {profit}') + print(f'Companies profit:\n{profit}') with open('5.7.json', 'w') as write_js: json.dump(profit, write_js) - js_str = json.dumps(profit) - print(f'Создан файл с расширением json со следующим содержимым: \n ' - f' {js_str}') + print(f'json: \n{js_str}') From b0c643a4b209640c8f5d142bb03a4be9b81f4efb Mon Sep 17 00:00:00 2001 From: BESTTEST4YOU <81219764+BESTTEST4YOU@users.noreply.github.com> Date: Fri, 9 Jul 2021 16:53:41 +0300 Subject: [PATCH 25/25] Update hw5.py --- hw5.py | 80 +++++++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 71 insertions(+), 9 deletions(-) diff --git a/hw5.py b/hw5.py index 99e4e9b..004fc1c 100644 --- a/hw5.py +++ b/hw5.py @@ -16,6 +16,13 @@ print(content) f.close() +#короткий варинат кода: +with open('5.1.txt', 'w', encoding='utf-8') as f: + line = ' ' + while line != '': + line = input() + print(line, file=f) + # 2. Создать текстовый файл (не программно), сохранить в нем # несколько строк, выполнить подсчет количества строк, # количества слов в каждой строке. @@ -29,6 +36,13 @@ print(f'words: {len(content)}') words.close() +#короткий варинат кода: +with open('5.2.txt', 'r', encoding='utf-8') as f: + text = f.readlines() + for i, line in enumerate(text, 1): + words = len(line.split()) + print(f'{i}ая строка содержит {words} слов') + # 3. Создать текстовый файл (не программно), построчно записать фамилии # сотрудников и величину их окладов. Определить, кто из сотрудников # имеет оклад менее 20 тыс., вывести фамилии этих сотрудников. @@ -46,6 +60,17 @@ avsalary = round(sum(map(int, sal)) / len(sal), 1) print(f'Salary > 20.000 {avsal}\nAverage salary = {avsalary}') +# 2 вариант исполнения кода: +total_w = 0 +empl = 0 +with open('5.3.txt', 'r') as salary: + for line in salary: + total_w += float(line.split()[1]) + empl += 1 + if float(line.split()[1]) > 20000: + print(line.split()[0]) +print('Средняя величина дохода: ', round(total_w / empl, 2)) + # 4. Создать (не программно) текстовый файл со следующим содержимым: # One — 1 # Two — 2 @@ -65,6 +90,14 @@ with open('5.4.1.txt', 'w') as file_obj_2: file_obj_2.writelines(second) +# еще один вариант кода: +res = {'One': 'Один', 'Two': 'Два', 'Three': 'Три', 'Four': 'Четыре'} +with open('5.4.1.txt', 'w', encoding='utf-8') as f_write: + with open('5.4.txt', 'r', encoding='utf-8') as f_read: + for line in f_read: + f_write.writelines([line.replace(line.split()[0], res[line.split()[0]])]) + + # 5. Создать (программно) текстовый файл, записать в него программно набор чисел, # разделенных пробелами. Программа должна подсчитывать сумму чисел в файле # и выводить ее на экран. @@ -81,6 +114,15 @@ def my_func(): print('Error') my_func() +# еще один вариант кода: +from random import randint + +with open('5.5.txt', 'w', encoding='utf-8') as file_obj: + li = [randint(1, 20) for _ in range(50)] + file_obj.write(' '.join(map(str, li))) + +print('Сумма чисел: ', sum(li)) + # 6. Необходимо создать (не программно) текстовый файл, где каждая строка # описывает учебный предмет и наличие лекционных, практических и # лабораторных занятий по этому предмету и их количество. Важно, @@ -95,6 +137,14 @@ def my_func(): # Пример словаря: # {“Информатика”: 170, “Физика”: 40, “Физкультура”: 30} +with open('5.6.txt', 'r', encoding='utf-8') as file: + text = file.readlines() + for line in text: + new = '' + for el in line: + new = ''.join([new, (el if el in '0123456789' else ' ')]) + res = [int(i) for i in new.split()] + print(f'{line.split()[0]} - {sum(res)} часов') # 7. Создать (не программно) текстовый файл, в котором каждая строка должна содержать данные о фирме: название, форма собственности, выручка, издержки. @@ -119,25 +169,37 @@ def my_func(): profit = {} pr = {} prof = 0 -aver_profit = 0 +prof_aver = 0 i = 0 with open('5.7.txt', 'r') as file: for line in file: - name, firm, earning, loss = line.split() - profit[name] = int(earning) - int(loss) + name, firm, earning, damage = line.split() + profit[name] = int(earning) - int(damage) if profit.setdefault(name) >= 0: prof = prof + profit.setdefault(name) i += 1 if i != 0: - aver_profit = prof / i - print(f'Average profit:\n{aver_profit:}') + prof_aver = prof / i + print(f'Прибыль средняя - {prof_aver:.2f}') else: - print('No profit') - pr = {'average profit': round(aver_profit)} + print(f'Прибыль средняя - отсутсвует. Все работают в убыток') + pr = {'средняя прибыль': round(prof_aver)} profit.update(pr) - print(f'Companies profit:\n{profit}') + print(f'Прибыль каждой компании - {profit}') with open('5.7.json', 'w') as write_js: json.dump(profit, write_js) + js_str = json.dumps(profit) - print(f'json: \n{js_str}') + print(f'Создан файл с расширением json со следующим содержимым: \n ' + f' {js_str}') + +#короткий варинат кода: +import json + +with open('5.7.json', 'w', encoding='utf-8') as f_write: + with open('5.7.txt', 'r', encoding='utf-8') as f_read: + profit = {line.split()[0]: int(line.split()[2]) - int(line.split()[3]) for line in f_read} + res = [profit,{'average_profit': sum([int(i) for i in profit.values() if int(i) > 0]) / + len([int(i) for i in profit.values() if int(i) > 0])}] + json.dump(res, f_write)