diff --git a/task_1.py b/task_1.py new file mode 100644 index 0000000..2e70726 --- /dev/null +++ b/task_1.py @@ -0,0 +1,26 @@ +from sys import argv + +if len(argv) < 4: + print('error attributes less 3 digits') + exit() + +values = [] + +for el in argv[1:]: + try: + el = int(el) + values.append(el) + except ValueError: + print('you need use 3 digits\n[выработка в часах] [ставка в час] [премия]') + exit() + +#values = [20, 300, 2050] +#print(lambda work_time, mp_hour, prem: (work_time * mp_hour) + prem, values) + +def out_final(*args): + params = args[0] + out = params[0] * params[1] + params[2] + return out + +print(out_final(values)) +exit() diff --git a/task_1_exampl.py b/task_1_exampl.py new file mode 100644 index 0000000..fc4af50 --- /dev/null +++ b/task_1_exampl.py @@ -0,0 +1,14 @@ +''' +lect 4 task 1 +''' + +from sys import argv + +_, hour, price, bonus, *__ = argv + +try: + result = float(hour) * float(price) + float(bonus) + print(result) +except ValueError as e: + print('Ошибка ввода') + print(e) diff --git a/task_2.py b/task_2.py new file mode 100644 index 0000000..eb6f0ab --- /dev/null +++ b/task_2.py @@ -0,0 +1,17 @@ +'''2. Представлен список чисел. Необходимо вывести элементы исходного списка, значения которых больше предыдущего элемента. +Подсказка: элементы, удовлетворяющие условию, оформить в виде списка. Для формирования списка использовать генератор. +Пример исходного списка: [300, 2, 12, 44, 1, 1, 4, 10, 7, 1, 78, 123, 55]. +Результат: [12, 44, 4, 10, 78, 123]. +''' +from random import randint + +rnd_lis = [randint(0,100) for i in range(30)] + + +new_lis = [] +for i in range(1,len(rnd_lis)): + if rnd_lis[i]>rnd_lis[i-1]: + new_lis.append(rnd_lis[i]) + +print(new_lis) +exit() diff --git a/task_3.py b/task_3.py new file mode 100644 index 0000000..5967396 --- /dev/null +++ b/task_3.py @@ -0,0 +1,7 @@ +'''3. Для чисел в пределах от 20 до 240 найти числа, кратные 20 или 21. Необходимо решить задание в одну строку. +Подсказка: использовать функцию range() и генератор. +''' + +print([i for i in range(20,241) if i % 20 == 0 or i % 21 == 0]) + +print([(i % 20) == 0 or (i % 21) == 0 for i in range(20,241)]) diff --git a/task_4.py b/task_4.py new file mode 100644 index 0000000..e8190b4 --- /dev/null +++ b/task_4.py @@ -0,0 +1,9 @@ +'''4. Представлен список чисел. Определить элементы списка, не имеющие повторений. Сформировать итоговый массив чисел, соответствующих требованию. Элементы вывести в порядке их следования в исходном списке. Для выполнения задания обязательно использовать генератор. +Пример исходного списка: [2, 2, 2, 7, 23, 1, 44, 44, 3, 2, 10, 7, 4, 11]. +Результат: [23, 1, 3, 10, 4, 11] +''' + +examlpe_list = [2, 2, 2, 7, 23, 1, 44, 44, 3, 2, 10, 7, 4, 11] +output_list = [element for element in examlpe_list if examlpe_list.count(element) == 1] +print(output_list) + diff --git a/task_5.py b/task_5.py new file mode 100644 index 0000000..f2bb427 --- /dev/null +++ b/task_5.py @@ -0,0 +1,6 @@ +'''5. Реализовать формирование списка, используя функцию range() и возможности генератора. В список должны войти четные числа от 100 до 1000 (включая границы). Необходимо получить результат вычисления произведения всех элементов списка. +Подсказка: использовать функцию reduce(). +''' +from functools import reduce + +print(reduce(lambda x, y: x * y, [i for i in range(100,1001)])) diff --git a/task_6.py b/task_6.py new file mode 100644 index 0000000..0228a8c --- /dev/null +++ b/task_6.py @@ -0,0 +1,25 @@ +'''6. Реализовать два небольших скрипта: +а) итератор, генерирующий целые числа, начиная с указанного, +б) итератор, повторяющий элементы некоторого списка, определенного заранее. +Подсказка: использовать функцию count() и cycle() модуля itertools. Обратите внимание, что создаваемый цикл не должен быть бесконечным. Необходимо предусмотреть условие его завершения. +Например, в первом задании выводим целые числа, начиная с 3, а при достижении числа 10 завершаем цикл. Во втором также необходимо предусмотреть условие, при котором повторение элементов списка будет прекращено. +''' +from itertools import count as i_count +from itertools import cycle as i_cycle + +c = 0 +for el in i_cycle([50, 100, 170]): + print(f'{c} = с') + if abs(c) > 20: + exit('c > 20') + print(el + c) + count_num = el + for element in i_count(count_num, -11): + if element % 2 == 0: + print(f' {element} % 2 == 0 check') + elif element < 0: + print(f'success 0 over {count_num}') + break + else: + print(element) + c += 1 diff --git a/task_7.py b/task_7.py new file mode 100644 index 0000000..8591260 --- /dev/null +++ b/task_7.py @@ -0,0 +1,27 @@ +'''Реализовать генератор с помощью функции с ключевым словом yield, создающим очередное значение. При вызове функции должен создаваться объект-генератор. Функция вызывается следующим образом: for el in fact(n). Она отвечает за получение факториала числа. В цикле нужно выводить только первые n чисел, начиная с 1! и до n!. +Подсказка: факториал числа n — произведение чисел от 1 до n. Например, факториал четырёх 4! = 1 * 2 * 3 * 4 = 24.''' + + +def fact(n): + result = 1 + print("==fact1==") + for num in range(1, n+1): + result *= num + yield result + +gen = fact(7) +for idx, itm in enumerate(gen, 1): + print(idx, itm) + +def fact2(n): + prev2 = 1 + result2 = 1 + print("--fact2--") + while prev2 <= n: + yield result2 + prev2 += 1 + result2 *= prev2 + +a = fact2(7) +for foo, bar in enumerate(a, 1): + print(foo, bar) \ No newline at end of file