From a00155076843fd8b4546893a30e346cb107cbdde Mon Sep 17 00:00:00 2001 From: Alex Klyanchin Date: Mon, 26 Oct 2020 00:14:50 +0300 Subject: [PATCH 1/5] les04 initial --- homeworks/task01.py | 5 +++++ homeworks/task02.py | 8 ++++++++ homeworks/task03.py | 5 +++++ homeworks/task04.py | 8 ++++++++ homeworks/task05.py | 6 ++++++ homeworks/task06.py | 10 ++++++++++ homeworks/task07.py | 9 +++++++++ 7 files changed, 51 insertions(+) create mode 100644 homeworks/task01.py create mode 100644 homeworks/task02.py create mode 100644 homeworks/task03.py create mode 100644 homeworks/task04.py create mode 100644 homeworks/task05.py create mode 100644 homeworks/task06.py create mode 100644 homeworks/task07.py diff --git a/homeworks/task01.py b/homeworks/task01.py new file mode 100644 index 0000000..623bd72 --- /dev/null +++ b/homeworks/task01.py @@ -0,0 +1,5 @@ +""" +1. Реализовать скрипт, в котором должна быть предусмотрена функция расчета заработной платы сотрудника. +В расчете необходимо использовать формулу: (выработка в часах * ставка в час) + премия. +Для выполнения расчета для конкретных значений необходимо запускать скрипт с параметрами. +""" diff --git a/homeworks/task02.py b/homeworks/task02.py new file mode 100644 index 0000000..2eeef55 --- /dev/null +++ b/homeworks/task02.py @@ -0,0 +1,8 @@ +""" +2. Представлен список чисел. +Необходимо вывести элементы исходного списка, значения которых больше предыдущего элемента. +Подсказка: элементы, удовлетворяющие условию, оформить в виде списка. +Для формирования списка использовать генератор. +Пример исходного списка: [300, 2, 12, 44, 1, 1, 4, 10, 7, 1, 78, 123, 55]. +Результат: [12, 44, 4, 10, 78, 123]. +""" \ No newline at end of file diff --git a/homeworks/task03.py b/homeworks/task03.py new file mode 100644 index 0000000..4d0140e --- /dev/null +++ b/homeworks/task03.py @@ -0,0 +1,5 @@ +""" +3. Для чисел в пределах от 20 до 240 найти числа, кратные 20 или 21. +Необходимо решить задание в одну строку. +Подсказка: использовать функцию range() и генератор. +""" \ No newline at end of file diff --git a/homeworks/task04.py b/homeworks/task04.py new file mode 100644 index 0000000..12a85ce --- /dev/null +++ b/homeworks/task04.py @@ -0,0 +1,8 @@ +""" +4. Представлен список чисел. Определить элементы списка, не имеющие повторений. +Сформировать итоговый массив чисел, соответствующих требованию. +Элементы вывести в порядке их следования в исходном списке. +Для выполнения задания обязательно использовать генератор. +Пример исходного списка: [2, 2, 2, 7, 23, 1, 44, 44, 3, 2, 10, 7, 4, 11]. +Результат: [23, 1, 3, 10, 4, 11] +""" \ No newline at end of file diff --git a/homeworks/task05.py b/homeworks/task05.py new file mode 100644 index 0000000..bea6ada --- /dev/null +++ b/homeworks/task05.py @@ -0,0 +1,6 @@ +""" +5. Реализовать формирование списка, используя функцию range() и возможности генератора. +В список должны войти четные числа от 100 до 1000 (включая границы). +Необходимо получить результат вычисления произведения всех элементов списка. +Подсказка: использовать функцию reduce(). +""" \ No newline at end of file diff --git a/homeworks/task06.py b/homeworks/task06.py new file mode 100644 index 0000000..4993268 --- /dev/null +++ b/homeworks/task06.py @@ -0,0 +1,10 @@ +""" +6. Реализовать два небольших скрипта: +а) итератор, генерирующий целые числа, начиная с указанного, +б) итератор, повторяющий элементы некоторого списка, определенного заранее. +Подсказка: использовать функцию count() и cycle() модуля itertools. +Обратите внимание, что создаваемый цикл не должен быть бесконечным. +Необходимо предусмотреть условие его завершения. +Например, в первом задании выводим целые числа, начиная с 3, а при достижении числа 10 завершаем цикл. +Во втором также необходимо предусмотреть условие, при котором повторение элементов списка будет прекращено. +""" \ No newline at end of file diff --git a/homeworks/task07.py b/homeworks/task07.py new file mode 100644 index 0000000..ed01eab --- /dev/null +++ b/homeworks/task07.py @@ -0,0 +1,9 @@ +""" +7. Реализовать генератор с помощью функции с ключевым словом yield, создающим очередное значение. +При вызове функции должен создаваться объект-генератор. +Функция должна вызываться следующим образом: for el in fact(n). +Функция отвечает за получение факториала числа, а в цикле необходимо выводить только первые n чисел, +начиная с 1! и до n!. +Подсказка: факториал числа n — произведение чисел от 1 до n. +Например, факториал четырёх 4! = 1 * 2 * 3 * 4 = 24. +""" \ No newline at end of file From 60d2e360a480c56b70c9b8dd4715a4fb025921b2 Mon Sep 17 00:00:00 2001 From: Alex Klyanchin Date: Mon, 26 Oct 2020 00:30:28 +0300 Subject: [PATCH 2/5] les04 task01 alpha --- homeworks/task01.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/homeworks/task01.py b/homeworks/task01.py index 623bd72..e0fb7f6 100644 --- a/homeworks/task01.py +++ b/homeworks/task01.py @@ -3,3 +3,13 @@ В расчете необходимо использовать формулу: (выработка в часах * ставка в час) + премия. Для выполнения расчета для конкретных значений необходимо запускать скрипт с параметрами. """ +from sys import argv + +_, param_produce_hours, param_rate, param_bonus = argv + + +def salary(produce_hours, rate, bonus): + return produce_hours * rate + bonus + + +print('Зарплата', salary(int(param_produce_hours), int(param_rate), int(param_bonus))) From 9d52246e83d93a945f3284613321355a65c5c70f Mon Sep 17 00:00:00 2001 From: Alex Klyanchin Date: Mon, 26 Oct 2020 20:18:09 +0300 Subject: [PATCH 3/5] les04 some task --- homeworks/task06-2.py | 26 ++++++++++++++++++++++++++ homeworks/task07.py | 18 +++++++++++++++++- 2 files changed, 43 insertions(+), 1 deletion(-) create mode 100644 homeworks/task06-2.py diff --git a/homeworks/task06-2.py b/homeworks/task06-2.py new file mode 100644 index 0000000..b54480b --- /dev/null +++ b/homeworks/task06-2.py @@ -0,0 +1,26 @@ +""" +6. Реализовать два небольших скрипта: +а) итератор, генерирующий целые числа, начиная с указанного, +б) итератор, повторяющий элементы некоторого списка, определенного заранее. +Подсказка: использовать функцию count() и cycle() модуля itertools. +Обратите внимание, что создаваемый цикл не должен быть бесконечным. +Необходимо предусмотреть условие его завершения. +Например, в первом задании выводим целые числа, начиная с 3, а при достижении числа 10 завершаем цикл. +Во втором также необходимо предусмотреть условие, при котором повторение элементов списка будет прекращено. +""" +from itertools import cycle + + +def cyclone(c_list, n): + def wrap(in_l, in_n): + i = 1 + gen = cycle(in_l) + while i <= in_n: + yield next(gen) + i += 1 + + return wrap(c_list, n) + + +c = cyclone([1, 2, 3], 10) +print('Список с повторениями :', list(c)) diff --git a/homeworks/task07.py b/homeworks/task07.py index ed01eab..8ab1873 100644 --- a/homeworks/task07.py +++ b/homeworks/task07.py @@ -6,4 +6,20 @@ начиная с 1! и до n!. Подсказка: факториал числа n — произведение чисел от 1 до n. Например, факториал четырёх 4! = 1 * 2 * 3 * 4 = 24. -""" \ No newline at end of file +""" + + +def fact(n): + def wrap(in_n): + i = 1 + f = 1 + while i <= in_n: + f *= i + i += 1 + yield f + + return wrap(n) + + +for el in fact(5): + print('Значение :', el) From d02330d85070cca0c9008ad4b13b4350d5d98fe0 Mon Sep 17 00:00:00 2001 From: Alex Klyanchin Date: Tue, 27 Oct 2020 10:39:55 +0300 Subject: [PATCH 4/5] les04 task[1:7] final release --- homeworks/task01.py | 9 ++++++- homeworks/task02.py | 20 +++++++++++++++- homeworks/task03.py | 28 +++++++++++++++++++++- homeworks/task04.py | 6 ++++- homeworks/task05.py | 36 +++++++++++++++++++++++++++- homeworks/{task06.py => task06-1.py} | 28 +++++++++++++++++++++- homeworks/task06-2.py | 8 +++++++ homeworks/task07.py | 10 ++++++-- 8 files changed, 137 insertions(+), 8 deletions(-) rename homeworks/{task06.py => task06-1.py} (61%) diff --git a/homeworks/task01.py b/homeworks/task01.py index e0fb7f6..3826d82 100644 --- a/homeworks/task01.py +++ b/homeworks/task01.py @@ -5,11 +5,18 @@ """ from sys import argv +# первый параметр (название скрипта) пропускаем _, param_produce_hours, param_rate, param_bonus = argv def salary(produce_hours, rate, bonus): + """ Простой расчет зарплаты + :param produce_hours: + :param rate: + :param bonus: + :return: + """ return produce_hours * rate + bonus -print('Зарплата', salary(int(param_produce_hours), int(param_rate), int(param_bonus))) +print('Зарплата : ', salary(int(param_produce_hours), int(param_rate), int(param_bonus))) diff --git a/homeworks/task02.py b/homeworks/task02.py index 2eeef55..4478768 100644 --- a/homeworks/task02.py +++ b/homeworks/task02.py @@ -5,4 +5,22 @@ Для формирования списка использовать генератор. Пример исходного списка: [300, 2, 12, 44, 1, 1, 4, 10, 7, 1, 78, 123, 55]. Результат: [12, 44, 4, 10, 78, 123]. -""" \ No newline at end of file +""" + + +def my_range(start, end): + """ частичная реализация range + :param start: + :param end: + :return: + """ + while start < end: + yield start + start += 1 + + +a = [300, 2, 12, 44, 1, 1, 4, 10, 7, 1, 78, 123, 55] +# начинаем с 1 чтобы спавнивать с предыдущим индексом (0) +b = [a[i] for i in my_range(1, len(a)) if a[i] > a[i - 1]] + +print("Решение :", b) diff --git a/homeworks/task03.py b/homeworks/task03.py index 4d0140e..88bebca 100644 --- a/homeworks/task03.py +++ b/homeworks/task03.py @@ -2,4 +2,30 @@ 3. Для чисел в пределах от 20 до 240 найти числа, кратные 20 или 21. Необходимо решить задание в одну строку. Подсказка: использовать функцию range() и генератор. -""" \ No newline at end of file +""" + + +def my_range(start, end, step=1): + """ частичная реализация range + :param start: + :param end: + :param step: + :return: + """ + while start < end: + yield start + start += step + + +# 1 вариант - в лоб +a1 = [x for x in my_range(20, 240) if not (x % 20) or not (x % 21)] + +# 1 вариант эффективный - ленивый +a2 = [x for x in my_range(20, 240, 20)] + [x for x in my_range(21, 240, 21)] + +# 2 вариант эффективный - жадный +a3 = [x for x in list(my_range(20, 240, 20)) + list(my_range(21, 240, 21))] + +print("Список чисел, кратных 20 и 21", a1) +print("Список чисел, кратных 20 и 21", a2) +print("Список чисел, кратных 20 и 21", a3) diff --git a/homeworks/task04.py b/homeworks/task04.py index 12a85ce..4e95e31 100644 --- a/homeworks/task04.py +++ b/homeworks/task04.py @@ -5,4 +5,8 @@ Для выполнения задания обязательно использовать генератор. Пример исходного списка: [2, 2, 2, 7, 23, 1, 44, 44, 3, 2, 10, 7, 4, 11]. Результат: [23, 1, 3, 10, 4, 11] -""" \ No newline at end of file +""" +a = [2, 2, 2, 7, 23, 1, 44, 44, 3, 2, 10, 7, 4, 11] +# генератор заполнения списка +b = [k for k in a if a.count(k) == 1] +print("Список без повторений : ", b) diff --git a/homeworks/task05.py b/homeworks/task05.py index bea6ada..f686aa4 100644 --- a/homeworks/task05.py +++ b/homeworks/task05.py @@ -3,4 +3,38 @@ В список должны войти четные числа от 100 до 1000 (включая границы). Необходимо получить результат вычисления произведения всех элементов списка. Подсказка: использовать функцию reduce(). -""" \ No newline at end of file +""" +from functools import reduce + + +def my_range(start, end, step): + """ частичная реализация range + :param start: + :param end: + :param step: + :return: + """ + while start < end: + yield start + start += step + + +def my_reduce(func, li): + """ + Частичная реализация reduce + :param func: + :param li: + :return: + """ + s = li[0] + for el in li[1:]: + s = func(s, el) + return s + + +a = [x for x in my_range(100, 1000 + 2, 2)] +b = my_reduce((lambda prev, mul: prev * mul), a) + +print("Произведение : ", b) +print("Количество разрядов : ", len(str(b))) +print("Хеш : ", hash(b)) diff --git a/homeworks/task06.py b/homeworks/task06-1.py similarity index 61% rename from homeworks/task06.py rename to homeworks/task06-1.py index 4993268..9dbc48c 100644 --- a/homeworks/task06.py +++ b/homeworks/task06-1.py @@ -7,4 +7,30 @@ Необходимо предусмотреть условие его завершения. Например, в первом задании выводим целые числа, начиная с 3, а при достижении числа 10 завершаем цикл. Во втором также необходимо предусмотреть условие, при котором повторение элементов списка будет прекращено. -""" \ No newline at end of file +""" +from itertools import count, cycle + + +def iter_int(start, end): + """ + Итератор на основе cycle с границей + :param start: начальное значение + :param end: конечное значение + :return: + """ + # конфигурация итератора + gen = count(start) + + def wrap(iter_gen): + i = next(iter_gen) + # контроль границ + while i <= end: + yield i + i = next(iter_gen) + + # возврат итератора + return wrap(gen) + + +iter1 = iter_int(3, 10) +print("Последовательность :", list(iter1)) diff --git a/homeworks/task06-2.py b/homeworks/task06-2.py index b54480b..7278846 100644 --- a/homeworks/task06-2.py +++ b/homeworks/task06-2.py @@ -12,7 +12,15 @@ def cyclone(c_list, n): + """ + итератор на основе cycle с контролем общего количества в финальном списке + :param c_list: список для повторений + :param n: количество элементов + :return: + """ + def wrap(in_l, in_n): + # счетчик элементов i = 1 gen = cycle(in_l) while i <= in_n: diff --git a/homeworks/task07.py b/homeworks/task07.py index 8ab1873..acae5ce 100644 --- a/homeworks/task07.py +++ b/homeworks/task07.py @@ -9,7 +9,13 @@ """ -def fact(n): +def seq_fact(n): + """ + итератор вычесления последжовательных n! + :param n: + :return: итератор + """ + def wrap(in_n): i = 1 f = 1 @@ -21,5 +27,5 @@ def wrap(in_n): return wrap(n) -for el in fact(5): +for el in seq_fact(5): print('Значение :', el) From 0087d67d34add879d6d7d99ca82b7082c2c270ed Mon Sep 17 00:00:00 2001 From: Alex Klyanchin Date: Thu, 5 Nov 2020 09:18:52 +0300 Subject: [PATCH 5/5] les04 create dir --- homeworks/{ => les04}/task01.py | 0 homeworks/{ => les04}/task02.py | 0 homeworks/{ => les04}/task03.py | 0 homeworks/{ => les04}/task04.py | 0 homeworks/{ => les04}/task05.py | 0 homeworks/{ => les04}/task06-1.py | 0 homeworks/{ => les04}/task06-2.py | 0 homeworks/{ => les04}/task07.py | 0 8 files changed, 0 insertions(+), 0 deletions(-) rename homeworks/{ => les04}/task01.py (100%) rename homeworks/{ => les04}/task02.py (100%) rename homeworks/{ => les04}/task03.py (100%) rename homeworks/{ => les04}/task04.py (100%) rename homeworks/{ => les04}/task05.py (100%) rename homeworks/{ => les04}/task06-1.py (100%) rename homeworks/{ => les04}/task06-2.py (100%) rename homeworks/{ => les04}/task07.py (100%) diff --git a/homeworks/task01.py b/homeworks/les04/task01.py similarity index 100% rename from homeworks/task01.py rename to homeworks/les04/task01.py diff --git a/homeworks/task02.py b/homeworks/les04/task02.py similarity index 100% rename from homeworks/task02.py rename to homeworks/les04/task02.py diff --git a/homeworks/task03.py b/homeworks/les04/task03.py similarity index 100% rename from homeworks/task03.py rename to homeworks/les04/task03.py diff --git a/homeworks/task04.py b/homeworks/les04/task04.py similarity index 100% rename from homeworks/task04.py rename to homeworks/les04/task04.py diff --git a/homeworks/task05.py b/homeworks/les04/task05.py similarity index 100% rename from homeworks/task05.py rename to homeworks/les04/task05.py diff --git a/homeworks/task06-1.py b/homeworks/les04/task06-1.py similarity index 100% rename from homeworks/task06-1.py rename to homeworks/les04/task06-1.py diff --git a/homeworks/task06-2.py b/homeworks/les04/task06-2.py similarity index 100% rename from homeworks/task06-2.py rename to homeworks/les04/task06-2.py diff --git a/homeworks/task07.py b/homeworks/les04/task07.py similarity index 100% rename from homeworks/task07.py rename to homeworks/les04/task07.py