Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions .vscode/launch.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
{
// Используйте IntelliSense, чтобы узнать о возможных атрибутах.
// Наведите указатель мыши, чтобы просмотреть описания существующих атрибутов.
// Для получения дополнительной информации посетите: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Python: Текущий файл",
"type": "python",
"request": "launch",
"program": "${file}",
"console": "integratedTerminal"
}
]
}
41 changes: 41 additions & 0 deletions Lesson/4/Task 1.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
'''
Реализовать скрипт, в котором должна быть предусмотрена функция расчета
заработной платы сотрудника.
В расчете необходимо использовать формулу:
(выработка в часах * ставка в час) + премия. Для выполнения
расчета для конкретных значений необходимо запускать скрипт с параметрами.
'''

from sys import argv
print(argv)
param = argv[1:]

def payroll_accounting(output_in_hours: float, rate_per_hour: float, prize: float )->float:
try:
return output_in_hours*rate_per_hour + prize
except:
print('Не ошибайтесь, вводите правильно значения!')
return None

def float_new(value):
try:
return float(value)
except:
return value

if 'help' in param or 'h' in param:
print('Расчет заработной платы сотрудника.\n',
'Вводим три значения: <output_in_hours>, <rate_per_hour>, <prize>') # для консоли cmd
else:
if 3==len(param):
print('Заработная плата: ',
payroll_accounting(
float_new(param[0]),
float_new(param[1]),
float_new(param[2])
)
)
else:
print('Вводить надо три значения: <output_in_hours>, <rate_per_hour>, <prize>')

# print(payroll_accounting(23,12,78))
14 changes: 14 additions & 0 deletions Lesson/4/Task 2.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
'''
Представлен список чисел.
Необходимо вывести элементы исходного списка, значения которых
больше предыдущего элемента.
Подсказка: элементы, удовлетворяющие условию, оформить в виде списка.
Для формирования списка использовать генератор.
Пример исходного списка: [300, 2, 12, 44, 1, 1, 4, 10, 7, 1, 78, 123, 55].
Результат: [12, 44, 4, 10, 78, 123].
'''

my_list = [300, 2, 12, 44, 1, 1, 4, 10, 7, 1, 78, 123, 55]
my_list_new = [el for num, el in enumerate(my_list) if num > 0 if my_list[num - 1] < my_list[num]]

print(my_list_new)
8 changes: 8 additions & 0 deletions Lesson/4/Task 3.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
'''
Для чисел в пределах от 20 до 240 найти числа, кратные 20 или 21.
Необходимо решить задание в одну строку.
Подсказка: использовать функцию range() и генератор.
'''

my_list = [el for el in range(20, 241) if el % 20 == 0 or el % 21 == 0 ]
print(my_list)
13 changes: 13 additions & 0 deletions Lesson/4/Task 4.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
'''
Представлен список чисел. Определить элементы списка, не имеющие повторений.
Сформировать итоговый массив чисел, соответствующих требованию.
Элементы вывести в порядке их следования в исходном списке.
Для выполнения задания обязательно использовать генератор.
Пример исходного списка: [2, 2, 2, 7, 23, 1, 44, 44, 3, 2, 10, 7, 4, 11].
Результат: [23, 1, 3, 10, 4, 11]
'''

my_list = [2, 2, 2, 7, 23, 1, 44, 44, 3, 2, 10, 7, 4, 11]
my_list_new = [el for el in my_list if my_list.count(el) < 2]

print(my_list_new)
15 changes: 15 additions & 0 deletions Lesson/4/Task 5.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
'''
Реализовать формирование списка, используя функцию range() и возможности генератора.
В список должны войти четные числа от 100 до 1000 (включая границы).
Необходимо получить результат вычисления произведения всех элементов списка.
Подсказка: использовать функцию reduce().
'''

from functools import reduce

def multiplication(num1, num2):
return num1*num2

my_list = [el for el in range(99, 1001) if el%2 == 0]

print(reduce(multiplication, my_list))
26 changes: 26 additions & 0 deletions Lesson/4/Task 6.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
'''
Реализовать два небольших скрипта:
а) итератор, генерирующий целые числа, начиная с указанного,
б) итератор, повторяющий элементы некоторого списка, определенного заранее.
Подсказка: использовать функцию count() и cycle() модуля itertools.
Обратите внимание, что создаваемый цикл не должен быть бесконечным.
Необходимо предусмотреть условие его завершения.
Например, в первом задании выводим целые числа, начиная с 3,
а при достижении числа 10 завершаем цикл.
Во втором также необходимо предусмотреть условие,
при котором повторение элементов списка будет прекращено.
'''
from itertools import count, cycle

for i in count(start = int(input("Целое число: ")), step=3):
print(i)
if i > 215:
break

colors = cycle(['red', 'greed', 'yellow'])
n = 0
for color in colors:
n += 1
print(color)
if n > 2215:
break
26 changes: 26 additions & 0 deletions Lesson/4/Task 7.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
'''
Реализовать генератор с помощью функции с ключевым словом yield,
создающим очередное значение.
При вызове функции должен создаваться объект-генератор.
Функция должна вызываться следующим образом: for el in fact(n).
Функция отвечает за получение факториала числа, а в цикле необходимо выводить
только первые n чисел, начиная с 1! и до n!.
Подсказка: факториал числа n — произведение чисел от 1 до n.
Например, факториал четырёх 4! = 1 * 2 * 3 * 4 = 24.
'''

def fact(): # это генераторный объект
i = 0
k = 1
while True:
i += 1
k = i * k
yield k

#g = fact()

for j, num in enumerate(fact()):
print(num)
if j == 4:
break

33 changes: 33 additions & 0 deletions Lesson/5/6/Task 1.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
'''
Создать класс TrafficLight (светофор) и определить у него один
атрибут color (цвет) и метод running (запуск).
Атрибут реализовать как приватный.
В рамках метода реализовать переключение светофора в режимы:
красный, желтый, зеленый.
Продолжительность первого состояния (красный) составляет 7 секунд,
второго (желтый) — 2 секунды, третьего (зеленый) — на ваше усмотрение.
Переключение между режимами должно осуществляться только в указанном
порядке (красный, желтый, зеленый).
Проверить работу примера, создав экземпляр и вызвав описанный метод.
Задачу можно усложнить, реализовав проверку порядка режимов,
и при его нарушении выводить соответствующее сообщение и завершать скрипт.
'''

from time import sleep
class TrafficLight:
__color = ['красный', 'желтый', 'зеленый'] # __ приватный

def run(self):
i = 0
while i < 3:
print(TrafficLight.__color[i])
if i == 0:
sleep(7)
elif i == 1:
sleep(2)
elif i == 2:
sleep(1)
i += 1

t = TrafficLight()
t.run()
22 changes: 22 additions & 0 deletions Lesson/5/6/Task 2.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
'''
Реализовать класс Road (дорога), в котором определить атрибуты:
length (длина), width (ширина).
Значения данных атрибутов должны передаваться при создании экземпляра класса.
Атрибуты сделать защищенными.
Определить метод расчета массы асфальта, необходимого для покрытия
всего дорожного полотна.
Использовать формулу: длина * ширина * масса асфальта для покрытия
одного кв метра дороги асфальтом, толщиной в 1 см * чи сло см толщины полотна.
Проверить работу метода.
Например: 20м * 5000м * 25кг * 5см = 12500 т
'''
class Road:
def __init__(self, length, width): # _ защищенный
self._length = length
self._width = width

def mass(self, wt, depth):
return (self._length * self._width * wt * depth) * 0.001

r = Road(20, 5000)
print(f'Масса асфальта: {r.mass(25, 5):2g} т.')
35 changes: 35 additions & 0 deletions Lesson/5/6/Task 3.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
'''
Реализовать базовый класс Worker (работник), в котором
определить атрибуты: name, surname, position (должность),
income (доход). Последний атрибут должен быть защищенным
и ссылаться на словарь, содержащий элементы: оклад и премия,
например, {"wage": wage, "bonus": bonus}.
Создать класс Position (должность) на базе класса Worker.
В классе Position реализовать методы получения полного имени
сотрудника (get_full_name) и дохода с учетом премии (get_total_income).
Проверить работу примера на реальных данных
(создать экземпляры класса Position, передать данные,
проверить значения атрибутов, вызвать методы экземпляров).
'''

class Worker:
def __init__(self, name, surname, position, wage, bonus):
self.name = name
self.surname = surname
self.position = position
self._income = {"wage": wage, "bonus": bonus}

class Position(Worker):
def __init__(self, name, surname, position, wage, bonus):
super().__init__(name, surname, position, wage, bonus) # обращение к родительскому классу

def get_total_income(self):
print(self._income.get('wage') + self._income.get('bonus'))

def get_full_name(self):
print(self.name + ' ' + self.surname)

cl = Position("Ivan", 'Zubkov', "posi", 100, 200)
print(cl.position)
cl.get_full_name()
cl.get_total_income()
94 changes: 94 additions & 0 deletions Lesson/5/6/Task 4.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
'''
Реализуйте базовый класс Car.
У данного класса должны быть следующие атрибуты:
speed, color, name, is_police (булево).
А также методы: go, stop, turn(direction), которые должны сообщать,
что машина поехала, остановилась, повернула (куда).
Опишите несколько дочерних классов: TownCar, SportCar, WorkCar, PoliceCar.
Добавьте в базовый класс метод show_speed,
который должен показывать текущую скорость автомобиля.
Для классов TownCar и WorkCar переопределите метод show_speed.
При значении скорости свыше 60 (TownCar) и 40 (WorkCar) должно выводиться
сообщение о превышении скорости.
Создайте экземпляры классов, передайте значения атрибутов.
Выполните доступ к атрибутам, выведите результат.
Выполните вызов методов и также покажите результат.
'''

class Car:
def __init__(self, speed, color, name, is_police=False):
self.speed = speed
self.color = color
self.name = name
self.is_police = is_police

def go(self):
print(f'{self.name} go')

def stop(self):
print(f'{self.name} stop')

def turn_right(self):
print(f'{self.name} turned right')

def turn_left(self):
print(f'{self.name} turned left')

def show_speed(self):
return f'Current speed {self.name} is {self.speed}'

class TownCar(Car):
def __init__(self, speed, color, name, is_police=False):
super().__init__(speed, color, name, is_police)

def show_speed(self):
print(f'Current speed of town car {self.name} is {self.speed}')

if self.speed > 40:
return f'Speed of {self.name} is higher than allow for town car'
else:
return f'Speed of {self.name} is normal for town car'


class SportCar(Car):
def __init__(self, speed, color, name, is_police=False):
super().__init__(speed, color, name, is_police)

class WorkCar(Car):
def __init__(self, speed, color, name, is_police=False):
super().__init__(speed, color, name, is_police)

def show_speed(self):
print(f'Current speed of work car {self.name} is {self.speed}')

if self.speed > 60:
return f'Speed of {self.name} is higher than allow for work car'


class PoliceCar(Car):
def __init__(self, speed, color, name, is_police=False):
super().__init__(speed, color, name, is_police)

def police(self):
if self.is_police:
return f'{self.name} is from police department'
else:
return f'{self.name} is not from police department'

car1 = Car(100, 'red', 'car1', False)
car1.go()
car1.stop()
print(car1.show_speed())

bmw = TownCar(100, 'black', 'BMW')
nissan = SportCar(200, 'red', 'NISSAN')
bugatti = WorkCar(10, 'blue','BUGATTI', True)
ferrari = PoliceCar(200, 'gray', 'FERRARI', True)


bmw.go()
print(bmw.show_speed())
print(nissan.show_speed())
print(bugatti.show_speed())
print(ferrari.show_speed())
print(ferrari.police())
Loading