diff --git a/lesson_4/hw01_4.py b/lesson_4/hw01_4.py new file mode 100644 index 0000000..e7023dd --- /dev/null +++ b/lesson_4/hw01_4.py @@ -0,0 +1,15 @@ +# Реализовать скрипт, в котором должна быть предусмотрена функция расчета заработной платы сотрудника. +# В расчете необходимо использовать формулу: (выработка в часах*ставка в час) + премия. Для выполнения расчета для +# конкретных значений необходимо запускать скрипт с параметрами. + + +import sys + + +hours, costs, bonus = sys.argv[1:] +try: + salary = int(hours) * int(costs) + int(bonus) + print(f'Сотрудник должен получить {salary} рублей') +except ValueError: + print('Какие-то проблемы с параметрами. Не можем посчитать зарплату :(') + diff --git a/lesson_4/hw02_4.py b/lesson_4/hw02_4.py new file mode 100644 index 0000000..b6cc2a0 --- /dev/null +++ b/lesson_4/hw02_4.py @@ -0,0 +1,16 @@ +# Представлен список чисел. Необходимо вывести элементы исходного списка, значения которых больше предыдущего элемента. +# Подсказка: элементы, удовлетворяющие условию, оформить в виде списка. Для формирования списка использовать генератор. + + +import random + + +base_list = [random.randint(0, 10) for _ in range(10)] +print(f'Рандомный лист: {base_list}') + +new_list = [] +for num, item in enumerate(base_list): + if num > 0 and base_list[num-1] < item: + new_list.append(item) + +print(f'Новый список: {new_list}') \ No newline at end of file diff --git a/lesson_4/hw03_4.py b/lesson_4/hw03_4.py new file mode 100644 index 0000000..ea215e3 --- /dev/null +++ b/lesson_4/hw03_4.py @@ -0,0 +1,7 @@ +# Для чисел в пределах от 20 до 240 найти числа, кратные 20 или 21. Необходимо решить задание в одну строку. +# Подсказка: использовать функцию range() и генератор. + + +my_list = [item for item in range(20, 240) if item % 20 == 0 or item % 21 == 0] + +print(my_list) \ No newline at end of file diff --git a/lesson_4/hw04_4.py b/lesson_4/hw04_4.py new file mode 100644 index 0000000..f7a6ab3 --- /dev/null +++ b/lesson_4/hw04_4.py @@ -0,0 +1,15 @@ +# Представлен список чисел. Определить элементы списка, не имеющие повторений. Сформировать итоговый массив чисел, +# соответствующих требованию. Элементы вывести в порядке их следования в исходном списке. Для выполнения задания +# обязательно использовать генератор. + + +import random + + +base_list = [random.randint(0, 20) for _ in range(20)] +print(f'Рандомный список: {base_list}') + +unique_list = [] +[unique_list.append(item) for item in base_list if item not in unique_list] + +print(f'Уникальный список: {unique_list}') \ No newline at end of file diff --git a/lesson_4/hw05_4.py b/lesson_4/hw05_4.py new file mode 100644 index 0000000..33325e9 --- /dev/null +++ b/lesson_4/hw05_4.py @@ -0,0 +1,15 @@ +# Реализовать формирование списка, используя функцию range() и возможности генератора. В список должны войти четные +# числа от 100 до 1000 (включая границы). Необходимо получить результат вычисления произведения всех элементов списка. +# Подсказка: использовать функцию reduce(). + + +from functools import reduce + +base_list = [item for item in range(100, 1001) if item % 2 == 0] + + +def my_func(prev_item, item): + return prev_item * item + + +print(f'Произведение всех чисел в списке: {reduce(my_func, base_list)}') diff --git a/lesson_4/hw06_4.py b/lesson_4/hw06_4.py new file mode 100644 index 0000000..fe6028c --- /dev/null +++ b/lesson_4/hw06_4.py @@ -0,0 +1,33 @@ +# Реализовать два небольших скрипта: +# а) бесконечный итератор, генерирующий целые числа, начиная с указанного, +# б) бесконечный итератор, повторяющий элементы некоторого списка, определенного заранее. +# Подсказка: использовать функцию count() и cycle() модуля itertools. + + +import itertools +import random + + +mode = input('Какой скрипт будем смотреть?\nБесконечно возрастающий итератор(1) или Цикличный генератор(2)?\n') + +if mode == '1': + print('Выбран вариант 1. Бесконечно возрастающий итератор.') + begin_number = input('Введите целое число, с которого начнем генерировать числа\n') + try: + begin_number = int(begin_number) + for item in itertools.count(begin_number): + print(item) + decision = input('Продолжить вывод? Наберите "Нет", чтобы прекратить, или нажмите Enter, если согласны. ') + if decision == 'Нет': + break + except ValueError: + print('Проблемы с числом. Попробуйте запустить программу еще разок.') +elif mode == '2': + print('Выбран вариант 2. Бесконечный циклический итератор.') + list_to_cycle = [random.randint(0, 10) for item in range(4)] + print(f'Список значений, который будет закциклен: {list_to_cycle}') + for item in itertools.cycle(list_to_cycle): + print(item) + decision = input('Продолжить вывод? Наберите "Нет", чтобы прекратить, или нажмите Enter, если согласны. ') + if decision == 'Нет': + break diff --git a/lesson_4/hw07_4.py b/lesson_4/hw07_4.py new file mode 100644 index 0000000..f47b413 --- /dev/null +++ b/lesson_4/hw07_4.py @@ -0,0 +1,15 @@ +# Реализовать генератор с помощью функции с ключевым словом yield, создающим очередное значение. При вызове функции +# должен создаваться объект-генератор. Функция должна вызываться следующим образом: for el in fibo_gen(). +# Функция отвечает за получение факториала числа, а в цикле необходимо выводить только первые 15 чисел. +# Подсказка: факториал числа n — произведение чисел от 1 до n. Например, факториал четырёх 4! = 1 * 2 * 3 * 4 = 24. + + +def fibo_gen(): + number = 1 + for item in (range(15)): + number *= (item + 1) + yield number + + +for el in fibo_gen(): + print(el) diff --git a/lesson_4/hw08_4.py b/lesson_4/hw08_4.py new file mode 100644 index 0000000..a2cda00 --- /dev/null +++ b/lesson_4/hw08_4.py @@ -0,0 +1,13 @@ +# Напишите Lambda функцию которая принимает на вход положительное целое число, а в ответ возвращает произведение +# всех цифр данного числа игнорируя нули. +# Например на вход 123405 в результате 120 + + +from functools import reduce + + +lambda_strong = lambda number: reduce(lambda a1, a2: a1*a2 if a2 != 0 else a1*1, + [(number // 10**i) % 10 for i in range(100) if number // (10**i) > 0]) + + +print(lambda_strong(120002))