Skip to content

Commit 1906fd9

Browse files
committed
done practice tasks
1 parent f904ef9 commit 1906fd9

File tree

6 files changed

+114
-28
lines changed

6 files changed

+114
-28
lines changed

tasks/practice1/practice1.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ def concatenate_strings(a: str, b: str) -> str:
88
:return: результат сложения
99
"""
1010

11-
# пиши свой код здесь
11+
result = a + b;
1212

1313
return result
1414

@@ -22,6 +22,6 @@ def calculate_salary(total_compensation: int) -> float:
2222
:return: сумма заплаты после вычета налога
2323
"""
2424

25-
# пиши свой код здесь
25+
result = 0.87 * total_compensation
2626

2727
return result

tasks/practice2/practice2.py

+31-7
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
from random import random, uniform
12
from typing import Iterable
23

34
UNCULTURED_WORDS = ('kotleta', 'pirog')
@@ -12,7 +13,8 @@ def greet_user(name: str) -> str:
1213
:return: приветствие
1314
"""
1415

15-
# пиши код здесь
16+
greeting = "Hi, " + name + "!"
17+
1618
return greeting
1719

1820

@@ -28,7 +30,8 @@ def get_amount() -> float:
2830
:return: случайную сумму на счете
2931
"""
3032

31-
# пиши код здесь
33+
amount = round(uniform(100, 1000000), 2)
34+
3235
return amount
3336

3437

@@ -42,7 +45,15 @@ def is_phone_correct(phone_number: str) -> bool:
4245
False - если номер некорректный
4346
"""
4447

45-
# пиши код здесь
48+
if (phone_number[0] != '+' or phone_number[1] != '7'):
49+
return False
50+
51+
result = True
52+
for i in range(2, len(phone_number)):
53+
if (phone_number[i] < '0' or '9' < phone_number[i]):
54+
result = False
55+
break
56+
4657
return result
4758

4859

@@ -58,8 +69,9 @@ def is_amount_correct(current_amount: float, transfer_amount: str) -> bool:
5869
False - если денег недостаточно
5970
"""
6071

61-
# пиши код здесь
62-
return result
72+
if (current_amount < float(transfer_amount)):
73+
return False
74+
return True
6375

6476

6577
def moderate_text(text: str, uncultured_words: Iterable[str]) -> str:
@@ -77,7 +89,17 @@ def moderate_text(text: str, uncultured_words: Iterable[str]) -> str:
7789
:return: текст, соответсвующий правилам
7890
"""
7991

80-
# пиши код здесь
92+
result = text.strip(" ")
93+
result = result.lower()
94+
result = result.capitalize()
95+
result = result.replace('\'', "")
96+
result = result.replace("\"", "")
97+
for i in UNCULTURED_WORDS:
98+
if i in result:
99+
result = result.replace(i, "#" * len(i))
100+
101+
return result
102+
81103
return result
82104

83105

@@ -100,5 +122,7 @@ def create_request_for_loan(user_info: str) -> str:
100122
:return: текст кредитной заявки
101123
"""
102124

103-
# пиши код здесь
125+
info = user_info.split(",")
126+
result = f"Фамилия: {info[0]}\nИмя: {info[1]}\nОтчество: {info[2]}\nДата рождения: {info[3]}\nЗапрошенная сумма: {info[4]}"
127+
104128
return result

tasks/practice3/practice3.py

+36-7
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from pathlib import Path
22
from typing import Dict, Any, List, Optional
3-
3+
import csv
44

55
def count_words(text: str) -> Dict[str, int]:
66
"""
@@ -26,9 +26,21 @@ def count_words(text: str) -> Dict[str, int]:
2626
значение - количество вхождений слов в текст
2727
"""
2828

29-
# пиши свой код здесь
29+
result = {}
30+
31+
alphabet = 'abcdefghijklmnopqrstuvwxyz '
32+
text = ''.join(list(filter(lambda x: x in alphabet, text.lower())))
33+
34+
words = text.split()
35+
36+
for word in words:
37+
if len(word) > 1 and word != 'notword':
38+
if word not in result:
39+
result[word] = 1
40+
continue
41+
result[word] += 1
3042

31-
return {}
43+
return result
3244

3345

3446
def exp_list(numbers: List[int], exp: int) -> List[int]:
@@ -40,9 +52,11 @@ def exp_list(numbers: List[int], exp: int) -> List[int]:
4052
:return: список натуральных чисел
4153
"""
4254

43-
# пиши свой код здесь
55+
result = []
56+
for i in numbers:
57+
result.append(i ** exp)
4458

45-
return []
59+
return result
4660

4761

4862
def get_cashback(operations: List[Dict[str, Any]], special_category: List[str]) -> float:
@@ -58,6 +72,16 @@ def get_cashback(operations: List[Dict[str, Any]], special_category: List[str])
5872
:return: размер кешбека
5973
"""
6074

75+
result = 0
76+
for j in operations:
77+
for i in special_category:
78+
if i in j.values():
79+
result += (j.get("amount") * 0.05)
80+
else:
81+
result += (j.get("amount") * 0.01)
82+
if len(special_category) == 0:
83+
result += j.get("amount") * 0.01
84+
6185
return result
6286

6387

@@ -99,6 +123,11 @@ def csv_reader(header: str) -> int:
99123
:return: количество уникальных элементов в столбце
100124
"""
101125

102-
# пиши свой код здесь
126+
unique_words = []
127+
128+
with open(get_path_to_file(), 'r') as csvfile:
129+
reader = csv.DictReader(csvfile)
130+
for row in reader:
131+
unique_words.append(row[header])
103132

104-
return 0
133+
return len(set(unique_words))

tasks/practice4/practice4.py

+11-1
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,16 @@ def search_phone(content: Any, name: str) -> Optional[str]:
3838
:return: номер телефона пользователя или None
3939
"""
4040

41-
# пиши свой код здесь
41+
if isinstance(content, list):
42+
for object in content:
43+
if search_phone(object, name):
44+
return search_phone(object, name)
45+
46+
if isinstance(content, dict):
47+
if name == content.get('name'):
48+
return content['phone']
49+
for value in content.values():
50+
if search_phone(value, name):
51+
return search_phone(value, name)
4252

4353
return None

tasks/practice5/employee.py

+16-6
Original file line numberDiff line numberDiff line change
@@ -38,14 +38,18 @@ def __init__(self, name: str, position: str, salary: int):
3838
Задача: реализовать конструктор класса, чтобы все тесты проходили
3939
"""
4040

41-
# пиши свой код здесь
41+
self.name = name
42+
self.position = position
43+
if not isinstance(salary, int):
44+
raise ValueError
45+
self._salary = salary
4246

4347
def get_salary(self) -> int:
4448
"""
4549
Метод возвращает зарплату сотрудника.
4650
"""
4751

48-
# пиши свой код здесь
52+
return self._salary
4953

5054
def __eq__(self, other: object) -> bool:
5155
"""
@@ -55,15 +59,20 @@ def __eq__(self, other: object) -> bool:
5559
Если что-то идет не так - бросаются исключения. Смотрим что происходит в тестах.
5660
"""
5761

58-
# пиши свой код здесь
62+
if isinstance(other, Employee):
63+
try:
64+
return get_position_level(self.position) == get_position_level(other.position)
65+
except NoSuchPositionError as exp:
66+
raise ValueError from exp
67+
raise TypeError
5968

6069
def __str__(self):
6170
"""
6271
Задача: реализовать строковое представление объекта.
6372
Пример вывода: 'name: Ivan position manager'
6473
"""
6574

66-
# пиши свой код здесь
75+
return f'name: {self.name} position: {self.position}'
6776

6877
def __hash__(self):
6978
return id(self)
@@ -82,7 +91,8 @@ def __init__(self, name: str, salary: int, language: str):
8291
Задача: реализовать конструктор класса, используя конструктор родителя
8392
"""
8493

85-
# пиши свой код здесь
94+
Employee.__init__(self, name, 'developer', salary)
95+
self.language = language
8696

8797

8898
class Manager(Employee):
@@ -97,4 +107,4 @@ def __init__(self, name: str, salary: int):
97107
Задача: реализовать конструктор класса, используя конструктор родителя
98108
"""
99109

100-
# пиши свой код здесь
110+
Employee.__init__(self, name, 'manager', salary)

tasks/practice5/team.py

+18-5
Original file line numberDiff line numberDiff line change
@@ -27,31 +27,44 @@ def __init__(self, name: str, manager: Manager):
2727
и инициализировать контейнер `__members`
2828
"""
2929

30-
# пиши свой код здесь
30+
self.name = name
31+
self.manager = manager
32+
self.__members = set()
3133

3234
def add_member(self, member: Employee) -> None:
3335
"""
3436
Задача: реализовать метод добавления участника в команду.
3537
Добавить можно только работника.
3638
"""
3739

38-
# пиши свой код здесь
40+
if isinstance(member, Employee):
41+
self.__members.add(member)
42+
else:
43+
raise TypeError
3944

4045
def remove_member(self, member: Employee) -> None:
4146
"""
4247
Задача: реализовать метод удаления участника из команды.
4348
Если в команде нет такого участника поднимается исключение `NoSuchMemberError`
4449
"""
4550

46-
# пиши свой код здесь
51+
if not isinstance(member, Employee):
52+
raise TypeError
53+
try:
54+
self.__members.remove(member)
55+
except KeyError as exp:
56+
raise NoSuchMemberError(self.name, member) from exp
4757

4858
def get_members(self) -> Set[Employee]:
4959
"""
5060
Задача: реализовать метод возвращения списка участков команды та,
5161
чтобы из вне нельзя было поменять список участников внутри класса
5262
"""
5363

54-
# пиши свой код здесь
64+
return set(self.__members)
65+
66+
def __str__(self):
67+
return f"team: {self.name} manager: {self.manager.name} number of members: {len(self.get_members())}"
5568

5669
def show(self) -> None:
5770
"""
@@ -64,4 +77,4 @@ def show(self) -> None:
6477
Задача: доработать класс таким образом, чтобы метод выполнял свою функцию, не меняя содержимое
6578
этого метода
6679
"""
67-
print(self)
80+
print(self)

0 commit comments

Comments
 (0)