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 .vscode/launch.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
{
// Используйте IntelliSense, чтобы узнать о возможных атрибутах.
// Наведите указатель мыши, чтобы просмотреть описания существующих атрибутов.
// Для получения дополнительной информации посетите: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Python: Текущий файл",
"type": "python",
"request": "launch",
"program": "${file}",
"console": "integratedTerminal"
}
]
}
41 changes: 41 additions & 0 deletions Lesson/4/Task 1.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
'''
Реализовать скрипт, в котором должна быть предусмотрена функция расчета
заработной платы сотрудника.
В расчете необходимо использовать формулу:
(выработка в часах * ставка в час) + премия. Для выполнения
расчета для конкретных значений необходимо запускать скрипт с параметрами.
'''

from sys import argv
print(argv)
param = argv[1:]

def payroll_accounting(output_in_hours: float, rate_per_hour: float, prize: float )->float:
try:
return output_in_hours*rate_per_hour + prize
except:
print('Не ошибайтесь, вводите правильно значения!')
return None

def float_new(value):
try:
return float(value)
except:
return value

if 'help' in param or 'h' in param:
print('Расчет заработной платы сотрудника.\n',
'Вводим три значения: <output_in_hours>, <rate_per_hour>, <prize>') # для консоли cmd
else:
if 3==len(param):
print('Заработная плата: ',
payroll_accounting(
float_new(param[0]),
float_new(param[1]),
float_new(param[2])
)
)
else:
print('Вводить надо три значения: <output_in_hours>, <rate_per_hour>, <prize>')

# print(payroll_accounting(23,12,78))
14 changes: 14 additions & 0 deletions Lesson/4/Task 2.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
'''
Представлен список чисел.
Необходимо вывести элементы исходного списка, значения которых
больше предыдущего элемента.
Подсказка: элементы, удовлетворяющие условию, оформить в виде списка.
Для формирования списка использовать генератор.
Пример исходного списка: [300, 2, 12, 44, 1, 1, 4, 10, 7, 1, 78, 123, 55].
Результат: [12, 44, 4, 10, 78, 123].
'''

my_list = [300, 2, 12, 44, 1, 1, 4, 10, 7, 1, 78, 123, 55]
my_list_new = [el for num, el in enumerate(my_list) if num > 0 if my_list[num - 1] < my_list[num]]

print(my_list_new)
8 changes: 8 additions & 0 deletions Lesson/4/Task 3.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
'''
Для чисел в пределах от 20 до 240 найти числа, кратные 20 или 21.
Необходимо решить задание в одну строку.
Подсказка: использовать функцию range() и генератор.
'''

my_list = [el for el in range(20, 241) if el % 20 == 0 or el % 21 == 0 ]
print(my_list)
13 changes: 13 additions & 0 deletions Lesson/4/Task 4.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
'''
Представлен список чисел. Определить элементы списка, не имеющие повторений.
Сформировать итоговый массив чисел, соответствующих требованию.
Элементы вывести в порядке их следования в исходном списке.
Для выполнения задания обязательно использовать генератор.
Пример исходного списка: [2, 2, 2, 7, 23, 1, 44, 44, 3, 2, 10, 7, 4, 11].
Результат: [23, 1, 3, 10, 4, 11]
'''

my_list = [2, 2, 2, 7, 23, 1, 44, 44, 3, 2, 10, 7, 4, 11]
my_list_new = [el for el in my_list if my_list.count(el) < 2]

print(my_list_new)
15 changes: 15 additions & 0 deletions Lesson/4/Task 5.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
'''
Реализовать формирование списка, используя функцию range() и возможности генератора.
В список должны войти четные числа от 100 до 1000 (включая границы).
Необходимо получить результат вычисления произведения всех элементов списка.
Подсказка: использовать функцию reduce().
'''

from functools import reduce

def multiplication(num1, num2):
return num1*num2

my_list = [el for el in range(99, 1001) if el%2 == 0]

print(reduce(multiplication, my_list))
26 changes: 26 additions & 0 deletions Lesson/4/Task 6.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
'''
Реализовать два небольших скрипта:
а) итератор, генерирующий целые числа, начиная с указанного,
б) итератор, повторяющий элементы некоторого списка, определенного заранее.
Подсказка: использовать функцию count() и cycle() модуля itertools.
Обратите внимание, что создаваемый цикл не должен быть бесконечным.
Необходимо предусмотреть условие его завершения.
Например, в первом задании выводим целые числа, начиная с 3,
а при достижении числа 10 завершаем цикл.
Во втором также необходимо предусмотреть условие,
при котором повторение элементов списка будет прекращено.
'''
from itertools import count, cycle

for i in count(start = int(input("Целое число: ")), step=3):
print(i)
if i > 215:
break

colors = cycle(['red', 'greed', 'yellow'])
n = 0
for color in colors:
n += 1
print(color)
if n > 2215:
break
26 changes: 26 additions & 0 deletions Lesson/4/Task 7.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
'''
Реализовать генератор с помощью функции с ключевым словом yield,
создающим очередное значение.
При вызове функции должен создаваться объект-генератор.
Функция должна вызываться следующим образом: for el in fact(n).
Функция отвечает за получение факториала числа, а в цикле необходимо выводить
только первые n чисел, начиная с 1! и до n!.
Подсказка: факториал числа n — произведение чисел от 1 до n.
Например, факториал четырёх 4! = 1 * 2 * 3 * 4 = 24.
'''

def fact(): # это генераторный объект
i = 0
k = 1
while True:
i += 1
k = i * k
yield k

#g = fact()

for j, num in enumerate(fact()):
print(num)
if j == 4:
break

11 changes: 11 additions & 0 deletions Lesson/5/Task 1.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
'''
Создать программно файл в текстовом формате,
записать в него построчно данные, вводимые пользователем.
Об окончании ввода данных свидетельствует пустая строка.
'''

with open('file1.txt', 'w', encoding='utf-8') as f:
s = input("Введите данные для записи в файл, пустая строка выход из программы: ")
while s:
f.write(s + '\n')
s = input("Введите данные для записи в файл, пустая строка выход из программы: ")
14 changes: 14 additions & 0 deletions Lesson/5/Task 2.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
'''
Создать текстовый файл (не программно),
сохранить в нем несколько строк,
выполнить подсчет количества строк,
количества слов в каждой строке.
'''

with open('file2.txt', 'r', encoding='utf-8') as f:
lines = f.readlines()
print(f'Количество строк: {len(lines)}')
f.seek(0)
for i, line in enumerate(lines):
words =line.split()
print(f'{i+1} - строка, {len(words)} слов =>{words}')
17 changes: 17 additions & 0 deletions Lesson/5/Task 3.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
'''
Создать текстовый файл (не программно),
построчно записать фамилии сотрудников и величину их окладов.
Определить, кто из сотрудников имеет оклад менее 20 тыс.,
вывести фамилии этих сотрудников.
Выполнить подсчет средней величины дохода сотрудников.
'''

with open('file3.txt', 'r', encoding='utf-8') as f:
staff = f.readlines()
total = 0
for employee in staff:
i = int(employee.split()[1])
total += i
if i < 20000:
print(employee.split()[0])
print(f'Средняя величина дохода сотруднико: {total/len(staff):02}' )
20 changes: 20 additions & 0 deletions Lesson/5/Task 4.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
'''
Создать (не программно) текстовый файл со следующим содержимым:
One — 1
Two — 2
Three — 3
Four — 4
Необходимо написать программу, открывающую файл
на чтение и считывающую построчно данные.
При этом английские числительные должны заменяться на русские.
Новый блок строк должен записываться в новый текстовый файл.
'''

score ={'One': 'Один', 'Two': 'Два', 'Three': 'Три', 'Four': 'Четыре'}

with open('file4-2.txt', 'w', encoding='utf-8') as fw:
with open('file4-1.txt', 'r', encoding='utf-8') as f:
for line in f.readlines():
rez = line.split()
rez[0] = score[rez[0]]
print(' '.join(rez), file=fw)
11 changes: 11 additions & 0 deletions Lesson/5/Task 5.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
'''
Создать (программно) текстовый файл,
записать в него программно набор чисел, разделенных пробелами.
Программа должна подсчитывать сумму чисел в файле и выводить ее на экран.
'''
from random import randint
my_str = [str(randint(1, 365)) for i in range(1, 200)]
with open('file5.txt', 'r+', encoding='utf-8') as f:
f.write(' '.join(my_str))
f.seek(0)
print(f'Сумма чисел из файла: {sum(map(int,f.read().split()))}')
42 changes: 42 additions & 0 deletions Lesson/5/Task 6.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
'''
Необходимо создать (не программно) текстовый файл,
где каждая строка описывает учебный предмет и наличие лекционных,
практических и лабораторных занятий по этому предмету и их количество.
Важно, чтобы для каждого предмета не обязательно были все типы занятий.
Сформировать словарь, содержащий название предмета и общее количество
занятий по нему. Вывести словарь на экран.
Примеры строк файла:
Информатика: 100(л) 50(пр) 20(лаб).
Физика: 30(л) — 10(лаб)
Физкультура: — 30(пр) —

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

def get_str_sum_of_numbers(s: str) -> int:
n = 0
b = ''
for i in range(len(s)):
try:
b = b + str(int(s[i]))
except:
if len(b) > 0:
n = n + int(b)
b = ''
if len(b) > 0:
n = n + int(b)
return n

items = dict('')

with open('file6.txt', 'r', encoding='utf-8') as f:
for line in f:
s_split = line.split(': ')
s_key = str(s_split[0])
default = get_str_sum_of_numbers(s_split[1])
if s_key in items:
items[s_key] = items.get(s_key) + default # повторно встречается предмет
else:
s_dict = items.setdefault(s_key, default)
print(items)
43 changes: 43 additions & 0 deletions Lesson/5/Task 7.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
'''
Создать (не программно) текстовый файл,
в котором каждая строка должна содержать данные о фирме:
название, форма собственности, выручка, издержки.
Пример строки файла: 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
profit = {}
prof_sum = 0
prof_count = 0
prof_aver = 0
aver_dict = {}
list_profit = []
with open('file7.txt', 'r', encoding='utf-8') as f:
for line in f:
name, ownership, revenue, costs = line.split()
profit[name] = int(revenue) -int(costs)
if profit.get(name) >= 0:
prof_sum += profit.get(name)
prof_count += 1
list_profit.append(profit)
if prof_count != 0:
prof_aver = prof_sum / prof_count
aver_dict = {'average_profit': round(prof_aver)}
list_profit.append(aver_dict)

with open('file7.json', 'w', encoding='utf-8') as f:
json.dump(list_profit, f)

3 changes: 3 additions & 0 deletions Lesson/5/file1.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
1-я строка
2-я строка
3-я строка
6 changes: 6 additions & 0 deletions Lesson/5/file2.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
Создать текстовый файл (не программно),
сохранить в нем несколько строк,
выполнить подсчет количества строк,
количества слов в каждой строке.


20 changes: 20 additions & 0 deletions Lesson/5/file3.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
Смирнов 10000
Иванов 15000
Кузнецов 23000
Соколов 11602
Попов 10385
Лебедев 23875
Козлов 12557
Новиков 27785
Морозов 15554
Петров 20991
Волков 24359
Соловьёв 18328
Васильев 12580
Зайцев 26102
Павлов 29390
Семёнов 22581
Голубев 23080
Виноградов 22862
Богданов 28371
Воробьёв 29344
4 changes: 4 additions & 0 deletions Lesson/5/file4-1.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
One — 1
Two — 2
Three — 3
Four — 4
4 changes: 4 additions & 0 deletions Lesson/5/file4-2.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
Один — 1
Два — 2
Три — 3
Четыре — 4
1 change: 1 addition & 0 deletions Lesson/5/file5.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
361 88 170 315 364 271 270 194 307 352 241 362 300 219 186 311 249 192 206 339 199 241 48 102 223 287 257 211 81 177 92 308 52 120 177 51 192 334 25 65 59 114 220 173 203 173 86 244 68 49 233 303 102 238 343 150 360 154 276 305 308 300 184 130 65 271 250 9 104 362 84 233 235 311 353 182 24 101 189 19 334 85 42 4 216 45 45 298 93 104 324 249 156 45 181 239 63 68 292 283 321 324 77 85 275 43 200 58 96 141 287 312 104 92 83 31 121 302 164 138 323 242 53 216 173 65 189 164 71 170 326 97 151 102 212 7 352 75 156 110 177 121 19 304 281 98 102 112 192 329 95 152 192 5 335 288 85 231 195 125 242 209 211 333 170 214 244 347 359 333 221 117 290 302 207 162 305 287 175 81 166 295 300 207 347 72 236 178 362 67 180 60 53 356 104 296 202 104 3045
6 changes: 6 additions & 0 deletions Lesson/5/file6.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
Информатика: 100(л) 50(пр) 20(лаб).
Физика: 30(л) — 10(лаб)
Физкультура: — 30(пр) 30(л)
Информатика: 110(л) 50(пр) 20(лаб).
Физика: 60(л) — 10(лаб)
Физкультура: — 50(пр) 30(л)
Loading