diff --git a/less-04/task-01.py b/less-04/task-01.py new file mode 100644 index 0000000..a435c05 --- /dev/null +++ b/less-04/task-01.py @@ -0,0 +1,15 @@ +# Реализовать скрипт, в котором должна быть предусмотрена функция расчёта заработной +# платы сотрудника. Используйте в нём формулу: (выработка в часах*ставка в час) + премия. +# Во время выполнения расчёта для конкретных значений необходимо запускать скрипт с параметрами. +import sys + +def salary(hous, rate, prem): + return (hous*rate)+prem + +#if __name__ == '__main__': +# print(salary(12,24,100)) + +if len(sys.argv)<4: + print('добавте агрументы. "выработка в часах" "ставка в час" "премия" task.py 10 2 100') +else: + print(salary(int(sys.argv[1]),int(sys.argv[2]),int(sys.argv[3]))) \ No newline at end of file diff --git a/less-04/task-02.py b/less-04/task-02.py new file mode 100644 index 0000000..f7a213a --- /dev/null +++ b/less-04/task-02.py @@ -0,0 +1,12 @@ +# Представлен список чисел. Необходимо вывести элементы исходного списка, +# значения которых больше предыдущего элемента. +def my_func(list): + new_list = [] + for i in range(1, len(list), 1): + if list[i]>list[i-1]: new_list.append(list[i]) + + return new_list + +temp_list = [300, 2, 12, 44, 1, 1, 4, 10, 7, 1, 78, 123, 55] +print(temp_list) +print(my_func(temp_list)) \ No newline at end of file diff --git a/less-04/task-03.py b/less-04/task-03.py new file mode 100644 index 0000000..6012e55 --- /dev/null +++ b/less-04/task-03.py @@ -0,0 +1,7 @@ +#Для чисел в пределах от 20 до 240 найти числа, кратные 20 или 21. Решите задание в одну строку. + +# список генерируемый for +print([n for n in range(20,240,1) if not n % 20 or not n % 21]) + +# генератор () - распечатываем значения +for i in (n for n in range(20,240,1) if not n % 20 or not n % 21) : print(i, end=" ") \ No newline at end of file diff --git a/less-04/task-04.py b/less-04/task-04.py new file mode 100644 index 0000000..44532eb --- /dev/null +++ b/less-04/task-04.py @@ -0,0 +1,41 @@ +# Представлен список чисел. Определите элементы списка, не имеющие повторений. +# Сформируйте итоговый массив чисел, соответствующих требованию. +# Элементы выведите в порядке их следования в исходном списке. +# Для выполнения задания обязательно используйте генератор. + +temp_list = [2, 2, 2, 7, 23, 1, 44, 44, 3, 2, 10, 7, 4, 11] +print(temp_list) + +rep = set() +work_list = temp_list.copy() +print( [x for x in temp_list if x not in rep and not work_list.remove(x) and x not in work_list or not not rep.add(x)] ) + + + + +# позволил себе вариации на тему возможных решений +# т.к. по мне записаное выше сложно в понимании (читабельности) + +# вариан решения 1 не эфективный count() +print([n for n in temp_list if temp_list.count(n) == 1]) + + +# вариан решения 2 + +def my_uni_el(list): + uni = set() + rep = set() + for el in list: + if el in rep: + continue + if el in uni: + rep.add(el) + uni.discard(el) + continue + uni.add(el) + return uni + +unique = my_uni_el(temp_list) #построим словарь уникальных элементов +print([n for n in temp_list if n in unique]) + + diff --git a/less-04/task-05.py b/less-04/task-05.py new file mode 100644 index 0000000..11a42bd --- /dev/null +++ b/less-04/task-05.py @@ -0,0 +1,8 @@ +# Реализовать формирование списка, используя функцию range() и возможности генератора. +# В список должны войти чётные числа от 100 до 1000 (включая границы). +# Нужно получить результат вычисления произведения всех элементов списка. + +from functools import reduce + + +print( reduce(lambda a,b: a*b, [n for n in range(100,1000+1,2)]) ) \ No newline at end of file diff --git a/less-04/task-06.py b/less-04/task-06.py new file mode 100644 index 0000000..47c213c --- /dev/null +++ b/less-04/task-06.py @@ -0,0 +1,36 @@ +# Реализовать два небольших скрипта: +# итератор, генерирующий целые числа, начиная с указанного; +# итератор, повторяющий элементы некоторого списка, определённого заранее. +# Подсказка: используйте функцию count() и cycle() модуля itertools. +# Обратите внимание, что создаваемый цикл не должен быть бесконечным. Предусмотрите условие его завершения. +# Например, в первом задании выводим целые числа, начиная с 3. При достижении числа 10 — завершаем цикл. +# Вторым пунктом необходимо предусмотреть условие, при котором повторение элементов списка прекратится. + +from itertools import count, cycle + + +# итератор, генерирующий целые числа, начиная с указанного; +def iter_num(n): + for i in count(n): + yield i + +# итератор, повторяющий элементы некоторого списка, определённого заранее. +def iter_el(list): + for el in cycle(list): + yield el + +# выводим целые числа, начиная с 3. При достижении числа 10 — завершаем цикл. +for i in iter_num(3): + if i > 10: + break + print(i, end=' ') + +print('') +#повторение элементов списка +count = 10 +char = 'a' # прикратим цикл если встретим символ 'a' 10 раз +for el in iter_el('qwrasqwe'): + if count < 0: + break + print(el, end=' ') + if el == char: count -= 1 \ No newline at end of file diff --git a/less-04/task-07.py b/less-04/task-07.py new file mode 100644 index 0000000..38e3272 --- /dev/null +++ b/less-04/task-07.py @@ -0,0 +1,24 @@ +# Реализовать генератор с помощью функции с ключевым словом yield, создающим очередное значение. +# При вызове функции должен создаваться объект-генератор. Функция вызывается следующим образом: +# for el in fact(n). Она отвечает за получение факториала числа. +# В цикле нужно выводить только первые n чисел, начиная с 1! и до n! + + +def fact_gen(): + f = 1 + n = 1 + while True: + n += 1 + yield f + f *= n + +def fact(n): + list = [] + f = fact_gen() + for _ in range(n): + list.append(next(f)) + return list + + +for el in fact(10): + print(el)