dz less04

This commit is contained in:
denis-on 2022-02-27 00:45:19 +03:00
parent 3e515756ea
commit a03616f9f7
7 changed files with 143 additions and 0 deletions

15
less-04/task-01.py Normal file
View File

@ -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])))

12
less-04/task-02.py Normal file
View File

@ -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))

7
less-04/task-03.py Normal file
View File

@ -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=" ")

41
less-04/task-04.py Normal file
View File

@ -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])

8
less-04/task-05.py Normal file
View File

@ -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)]) )

36
less-04/task-06.py Normal file
View File

@ -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

24
less-04/task-07.py Normal file
View File

@ -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)