diff --git a/04_Useful_tools/Task_01.py b/04_Useful_tools/Task_01.py new file mode 100644 index 0000000..4f674da --- /dev/null +++ b/04_Useful_tools/Task_01.py @@ -0,0 +1,37 @@ +''' +Реализовать скрипт, в котором должна быть предусмотрена функция расчета заработной платы сотрудника. +В расчете необходимо использовать формулу: (выработка в часах * ставка в час) + премия. +Для выполнения расчета для конкретных значений необходимо запускать скрипт с параметрами. +''' + +# функция расчета заработной платы +def slr(hr = 0, pay = 0, pr = 0): + ''' + :param hr: часы + :param pay: оплата в час + :param pr: премия + :return: зарплата за указанное количество часов + ''' + return (hr * pay) + pr + +# информация о работе +Tom_work = {'jun': {'hours': 168, 'payment': 3000, 'premium': 20000}, + 'feb': {'hours': 150, 'payment': 3000, 'premium': 10000}, + 'march': {'hours': 168, 'payment': 3000, 'premium': 20000} + } + +# вариант №1 +# расчет заработной платы на каждый месяц +Tom_salary = [] +for key in Tom_work: + Tom_salary.append(slr(Tom_work[key]['hours'], Tom_work[key]['payment'], Tom_work[key]['premium'])) +print(Tom_salary) + + +# вариант №2 +Tom_salary_2 = [slr(Tom_work[key]['hours'], Tom_work[key]['payment'], Tom_work[key]['premium']) for key in Tom_work] +print(Tom_salary_2) + + + + diff --git a/04_Useful_tools/Task_02.py b/04_Useful_tools/Task_02.py new file mode 100644 index 0000000..4239b87 --- /dev/null +++ b/04_Useful_tools/Task_02.py @@ -0,0 +1,19 @@ +''' +Представлен список чисел. Необходимо вывести элементы исходного списка, значения которых больше предыдущего элемента. +Подсказка: элементы, удовлетворяющие условию, оформить в виде списка. Для формирования списка использовать генератор. + +Пример исходного списка: [300, 2, 12, 44, 1, 1, 4, 10, 7, 1, 78, 123, 55]. +Результат: [12, 44, 4, 10, 78, 123]. +''' + +import functools as ft + +# исходный список +my_list = [300, 2, 12, 44, 1, 1, 4, 10, 7, 1, 78, 123, 124] + +# генератор +change_list = [my_list[i+1] for i in range(len(my_list)-1) if my_list[i] < my_list[i+1]] + +# вывод результата +print(my_list) +print(change_list) \ No newline at end of file diff --git a/04_Useful_tools/Task_03.py b/04_Useful_tools/Task_03.py new file mode 100644 index 0000000..a2f5c8f --- /dev/null +++ b/04_Useful_tools/Task_03.py @@ -0,0 +1,6 @@ +''' +Для чисел в пределах от 20 до 240 найти числа, кратные 20 или 21. Необходимо решить задание в одну строку. +Подсказка: использовать функцию range() и генератор. +''' + +my_list = [print(i) for i in range(20, 241) if i % 20 == 0 or i % 21 == 0] diff --git a/04_Useful_tools/Task_04.py b/04_Useful_tools/Task_04.py new file mode 100644 index 0000000..56916a5 --- /dev/null +++ b/04_Useful_tools/Task_04.py @@ -0,0 +1,18 @@ +''' +Представлен список чисел. Определить элементы списка, не имеющие повторений. +Сформировать итоговый массив чисел, соответствующих требованию. Элементы вывести в порядке их следования +в исходном списке. +Для выполнения задания обязательно использовать генератор. + +Пример исходного списка: [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] + +# измененный список +new_list = [el for el in my_list if my_list.count(el) == 1] + +print(my_list) +print(new_list) \ No newline at end of file diff --git a/04_Useful_tools/Task_05.py b/04_Useful_tools/Task_05.py new file mode 100644 index 0000000..27daa07 --- /dev/null +++ b/04_Useful_tools/Task_05.py @@ -0,0 +1,20 @@ +''' +Реализовать формирование списка, используя функцию range() и возможности генератора. +В список должны войти четные числа от 100 до 1000 (включая границы). +Необходимо получить результат вычисления произведения всех элементов списка. + +Подсказка: использовать функцию reduce(). +''' + +import functools as ft +import math + +# функция перемножения двух элементов +def my_func(el_1, el_2): + return el_1 * el_2 + +# вычисление +my_list = ft.reduce(my_func, [i for i in range(100, 1001)]) + +print(my_list) + diff --git a/04_Useful_tools/Task_06.py b/04_Useful_tools/Task_06.py new file mode 100644 index 0000000..7485ad0 --- /dev/null +++ b/04_Useful_tools/Task_06.py @@ -0,0 +1,43 @@ +''' +Реализовать два небольших скрипта: +а) итератор, генерирующий целые числа, начиная с указанного, +б) итератор, повторяющий элементы некоторого списка, определенного заранее. + +Подсказка: использовать функцию count() и cycle() модуля itertools. +Обратите внимание, что создаваемый цикл не должен быть бесконечным. Необходимо предусмотреть условие его завершения. + +Например, в первом задании выводим целые числа, начиная с 3, а при достижении числа 10 завершаем цикл. +Во втором также необходимо предусмотреть условие, при котором повторение элементов списка будет прекращено. +''' + +import itertools as it + + +# 01 итератор, генерирующий целые числа, начиная и заканчивая с указанных +def iter_a(start, stop): + for el in it.count(start): + if el > stop: + break + else: + yield el + +some_list_01 = list(iter_a(3, 5)) +print(some_list_01) + + +# 02 итератор, повторяющий элементы некоторого списка, определенного заранее +my_list = [1,2,3,4] +def iter_b(data, stop): + i = 0 + for el in it.cycle(data): + if i > stop-1: # если использовать "i > stop * (len(data)-1)", то список будет копироваться указанное кол-во раз + break + else: + i += 1 + yield el + +some_list_02 = list(iter_b(my_list, 5)) +print(some_list_02) + +some_list_03 = list(iter_b('asd', 5)) +print(some_list_03) \ No newline at end of file diff --git a/04_Useful_tools/Task_07.py b/04_Useful_tools/Task_07.py new file mode 100644 index 0000000..dfacbf6 --- /dev/null +++ b/04_Useful_tools/Task_07.py @@ -0,0 +1,39 @@ +''' +Реализовать генератор с помощью функции с ключевым словом yield, создающим очередное значение. +При вызове функции должен создаваться объект-генератор. +Функция должна вызываться следующим образом: for el in fact(n). +Функция отвечает за получение факториала числа, а в цикле необходимо выводить только первые n чисел, +начиная с 1! и до n!. + +Подсказка: факториал числа n — произведение чисел от 1 до n. Например, факториал четырёх 4! = 1 * 2 * 3 * 4 = 24. +''' + +import itertools as it +import math + + +# вариант №1 +def fact_1(n): + for i in it.count(1): + if i > n: + break + else: + yield math.factorial(i) # использую встроенную функцию факториала + +for el in fact_1(4): + print(el) + + +# вариант №2 +def fact_2(n): + for i in it.count(1): + if i > n: + break + else: + fct = 1 + for i in range(1, i+1): # использую цикл для расчета факториала + fct *= i + yield fct + +for el in fact_2(4): + print(el)