Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
0f1e138
basic_exercises part 1
Feb 20, 2023
1c8d7d0
basic_exercises fixed
Feb 22, 2023
88169bb
basic_exercises fixed_1
Feb 22, 2023
190192d
add string_challenges.py, for_challenges.py fixed
Feb 23, 2023
85ef5fb
add for_dict_challenges.py
Feb 25, 2023
c27c417
for_challenges.py, string_challenges.py fixed
Feb 25, 2023
dd92056
add task company.py solution
Feb 26, 2023
c63c919
add task company.py solution
Feb 26, 2023
b3ba249
company.py fixed, add additional tasks
Feb 27, 2023
867a711
fixed compane.py
Feb 28, 2023
991276a
fixed company.py, for_dict_challenges.py +last task
Mar 1, 2023
7ff8a37
fixed company.py
Mar 3, 2023
1a2b535
fixed for_dict_challenges.py, except for the 5 task
Mar 3, 2023
d7696ae
fixed company.py, for_dict_challenges.py
Mar 4, 2023
1a9d3bc
fixed for_challenges.py, string_challenges.py
Mar 4, 2023
2c3c060
correcting remarks code review company.py, for_dict_challenges.py
Mar 5, 2023
0563d48
add task 13, 14 company
Mar 6, 2023
f4da86c
correcting task 13, add functions
Mar 9, 2023
9b7131c
fixed 13, 14 tasks
Mar 11, 2023
0b79ba6
Исправил замечания, добавил решения задач 16,17,18
Mar 18, 2023
7598ae9
Решение 1 задачи в for_dict_challenges_bonus.py
Mar 18, 2023
fb5366d
исправление замечаний review
Mar 19, 2023
191c915
исправление замечаний, немного поменял алгоритм
Mar 19, 2023
3cc58b3
fixing the mistakes according to the comments
Mar 21, 2023
3aa9ea8
Решение 2 задачи \for_dict_challenges_bonus.py
Mar 27, 2023
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
118 changes: 118 additions & 0 deletions company.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
"""
В этот раз у нас есть компания, в ней отделы, в отделах люди. У людей есть имя, должность и зарплата.
Ваши задачи такие:
1. Вывести названия всех отделов
2. Вывести имена всех сотрудников компании.
3. Вывести имена всех сотрудников компании с указанием отдела, в котором они работают.
4. Вывести имена всех сотрудников компании, которые получают больше 100к.
5. Вывести позиции, на которых люди получают меньше 80к (можно с повторениями).
6. Посчитать, сколько денег в месяц уходит на каждый отдел – и вывести вместе с названием отдела

Второй уровень:
7. Вывести названия отделов с указанием минимальной зарплаты в нём.
8. Вывести названия отделов с указанием минимальной, средней и максимальной зарплаты в нём.
9. Вывести среднюю зарплату по всей компании.
10. Вывести названия должностей, которые получают больше 90к без повторений.
11. Посчитать среднюю зарплату по каждому отделу среди девушек (их зовут Мишель, Николь, Кристина и Кейтлин).
12. Вывести без повторений имена людей, чьи фамилии заканчиваются на гласную букву.
"""

departments = [
{
"title": "HR department",
"employers": [
{"first_name": "Daniel", "last_name": "Berger", "position": "Junior HR", "salary_rub": 50000},
{"first_name": "Michelle", "last_name": "Frey", "position": "Middle HR", "salary_rub": 75000},
{"first_name": "Kevin", "last_name": "Jimenez", "position": "Middle HR", "salary_rub": 70000},
{"first_name": "Nicole", "last_name": "Riley", "position": "HRD", "salary_rub": 120000},
]
},
{
"title": "IT department",
"employers": [
{"first_name": "Christina", "last_name": "Walker", "position": "Python dev", "salary_rub": 80000},
{"first_name": "Michelle", "last_name": "Gilbert", "position": "JS dev", "salary_rub": 85000},
{"first_name": "Caitlin", "last_name": "Bradley", "position": "Teamlead", "salary_rub": 950000},
{"first_name": "Brian", "last_name": "Hartman", "position": "CTO", "salary_rub": 130000},
]
},
]

for department in departments: # task 1
print(department['title'])

for department in departments: # task 2
for employer in department['employers']:
print(employer['first_name'])

for department in departments: # task 3
for employer in department['employers']:
print(f'{employer["first_name"]} работает в {department["title"]}')

task_salary = 100000 # task 4
for department in departments:
for employer in department['employers']:
if employer['salary_rub'] > task_salary:
print(f'Заработная плата {employer["first_name"]} превышает {task_salary}')

task_salary = 80000 # task 5
for department in departments:
for employer in department['employers']:
if employer['salary_rub'] < task_salary:
print(f'Заработная плата {employer["position"]} ниже {task_salary}')

for department in departments: # task 6
department_salary = 0
for employer in department['employers']:
department_salary += employer['salary_rub']
print(f'Заработная плата {department["title"]} в месяц составляет {department_salary}')

for department in departments: # task 7
department_salary = []
for employer in department['employers']:
department_salary.append(employer['salary_rub'])
print(f'Отдел {department["title"]} - минимальная зарплата {min(department_salary)}')

for department in departments: # task 8
department_salary = []
avg_salary = 0
for employer in department['employers']:
department_salary.append(employer['salary_rub'])
avg_salary = sum(department_salary) / len(department_salary)
min_salary = min(department_salary)
max_salary = max(department_salary)
print(f'Отдел {department["title"]}: минимальная зарплата {min_salary}')
print(f'Отдел {department["title"]}: максимальная зарплата {max_salary}')
print(f'Отдел {department["title"]}: cредняя зарплата {int(avg_salary)}')

salary = [] # task 9
for department in departments:
for employer in department['employers']:
salary.append(employer['salary_rub'])
avg_salary = sum(salary) / len(salary)
print(f'Средняя зарплата компании {avg_salary}')

task_salary = 90000 # task 10
salary_cap = []
for department in departments:
for employer in department['employers']:
if employer['salary_rub'] > task_salary:
salary_cap.append(employer["position"])
print(f'{", ".join(salary_cap)} получают больше {task_salary}')

girls = ['Michelle', 'Nicole', 'Christina', 'Caitlin'] # task 11
for department in departments:
girl_salary = []
for employer in department['employers']:
if employer['first_name'] in girls:
girl_salary.append(employer['salary_rub'])
avg_girls_salary = sum(girl_salary) / len(girl_salary)
print(f'Средняя зарплата девушек по {department["title"]} составляет: {int(avg_girls_salary)}')

end_vowel_letter_in_last_name = [] # task 12
for department in departments:
for employer in department['employers']:
if employer['last_name'][-1] in 'aeiouy':
end_vowel_letter_in_last_name.append(employer["first_name"])
end_vowel_letter_in_last_name_set = set(end_vowel_letter_in_last_name)
print(f'Фамилии сотрудников {", ".join(end_vowel_letter_in_last_name_set)} оканчиваются на гласную букву')
160 changes: 160 additions & 0 deletions company_add_tasks.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,160 @@
"""
В этот раз у нас есть компания, в ней отделы, в отделах люди. У людей есть имя, должность и зарплата.
Ваши задачи такие:

Третий уровень:
Теперь вам пригодится ещё список taxes, в котором хранится информация о налогах на сотрудников из разных департаметов.
Если department None, значит, этот налог применяется ко всем сотрудникам компании.
Иначе он применяется только к сотрудникам департмента, название которого совпадает с тем, что записано по ключу department.
К одному сотруднику может применяться несколько налогов.

13. Вывести список отделов с суммарным налогом на сотрудников этого отдела.
14. Вывести список всех сотредников с указанием зарплаты "на руки" и зарплаты с учётом налогов.
15. Вывести список отделов с указанием месячной налоговой нагрузки – количеством денег, которые в месяц этот отдел платит налогами.
16. Вывести список отделов, отсортированный по месячной налоговой нагрузке.
17. Вывести всех сотрудников, за которых компания платит больше 100к налогов в год.
18. Вывести имя и фамилию сотрудника, за которого компания платит меньше всего налогов.
"""
import operator

departments = [
{
"title": "HR department",
"employers": [
{"first_name": "Daniel", "last_name": "Berger", "position": "Junior HR", "salary_rub": 50000},
{"first_name": "Michelle", "last_name": "Frey", "position": "Middle HR", "salary_rub": 75000},
{"first_name": "Kevin", "last_name": "Jimenez", "position": "Middle HR", "salary_rub": 70000},
{"first_name": "Nicole", "last_name": "Riley", "position": "HRD", "salary_rub": 120000},
]
},
{
"title": "IT department",
"employers": [
{"first_name": "Christina", "last_name": "Walker", "position": "Python dev", "salary_rub": 80000},
{"first_name": "Michelle", "last_name": "Gilbert", "position": "JS dev", "salary_rub": 85000},
{"first_name": "Caitlin", "last_name": "Bradley", "position": "Teamlead", "salary_rub": 950000},
{"first_name": "Brian", "last_name": "Hartman", "position": "CTO", "salary_rub": 130000},
]
},
]

taxes = [
{"department": None, "name": "vat", "value_percents": 13},
{"department": "IT department", "name": "hiring", "value_percents": 6},
{"department": "BizDev Department", "name": "sales", "value_percents": 20},
]

# task 13. Вывести список отделов с суммарным налогом на сотрудников этого отдела.
def generating_departments_salaries(departments):
departments_salary = {}
for department in departments:
department_salaries = []
for employer in department["employers"]:
department_salaries.append(employer["salary_rub"])
departments_salary[department["title"]] = sum(department_salaries)
return departments_salary


def get_departments_tax_rate(taxes, departments):
taxes_for_department = {}
for tax in taxes:
if tax["department"] is not None:
taxes_for_department[tax["department"]] = tax["value_percents"] / 100
else:
tax_for_all_departments = tax["value_percents"] / 100

department_taxes = {}
departments_title = [department["title"] for department in departments]
tax_titles = [tax for tax in taxes_for_department]

for department in departments_title:
tax = []
if department in tax_titles:
tax.append(taxes_for_department.get(department))
tax.append(tax_for_all_departments)
department_taxes[department] = sum(tax)
else:
tax.append(tax_for_all_departments)
department_taxes[department] = sum(tax)
return department_taxes


def calculate_department_tax_burden(departments_salary, department_taxes):
departments_tax_burden = {}
for department in departments_salary:
tax_burden = departments_salary.get(department) * department_taxes.get(department)
departments_tax_burden[department] = tax_burden

for department, tax_burden in departments_tax_burden.items():
print(f'По {department} суммарный налог на сотрудников равен {tax_burden}')


# task 14. Вывести список всех сотрудников с указанием зарплаты "на руки" и зарплаты с учётом налогов.
def calculate_employers_salaries(departments):
tax_of_departments = get_departments_tax_rate(taxes, departments)
for department in departments:
for employer in department['employers']:
employer_tax = employer['salary_rub'] * (tax_of_departments[department["title"]]) / 100
salary_after_tax = employer['salary_rub'] - employer_tax
print(f'{employer["first_name"]} {employer["last_name"]}: зарплата после вычета налогов'
f' {int(salary_after_tax)}')
print(f'{employer["first_name"]} {employer["last_name"]}: зарплата до вычета налогов'
f' {employer["salary_rub"]}')


# task 16. Вывести список отделов, отсортированный по месячной налоговой нагрузке.
def output_departments_name_by_total_taxes(departments_salary, department_taxes):
departments_total_taxes = {}
for department in departments_salary:
tax_burden = departments_salary.get(department) * department_taxes.get(department)
departments_total_taxes[department] = tax_burden

departments_names_by_total_taxes = sorted(
departments_total_taxes,
key=departments_total_taxes.get,
reverse=True,
)

for department_name in departments_names_by_total_taxes:
print(department_name)


# task 17. Вывести всех сотрудников, за которых компания платит больше 100к налогов в год.
def output_employers_over_option_tax(departments, option_sum_of_tax):
tax_of_departments = get_departments_tax_rate(taxes, departments)
for department in departments:
for employer in department['employers']:
employer_year_tax = employer['salary_rub'] * 12 * tax_of_departments[department["title"]]
if employer_year_tax > option_sum_of_tax:
print(f'За {employer["first_name"]} {employer["last_name"]} компания платит больше '
f'{option_sum_of_tax // 1000} тысяч налогов в год')


# task 18. Вывести имя и фамилию сотрудника, за которого компания платит меньше всего налогов.
def get_employer_with_max_tax(departments):
tax_of_departments = get_departments_tax_rate(taxes, departments)
employers_taxes_list = []
for department in departments:
for employer in department['employers']:
employers_taxes = {}
employer_year_tax = employer['salary_rub'] * 12 * tax_of_departments[department["title"]]
employers_taxes = {
"first_name": employer["first_name"],
"last_name": employer["last_name"],
"year_tax": employer_year_tax,
}
employers_taxes_list.append(employers_taxes)

employer_with_max_tax = max(employers_taxes_list, key=lambda x: x["year_tax"])

return employer_with_max_tax["first_name"], employer_with_max_tax["last_name"]


if __name__ == "__main__":
salaries_of_departments = generating_departments_salaries(departments)
tax_of_departments = get_departments_tax_rate(taxes, departments)
print(calculate_department_tax_burden(salaries_of_departments, tax_of_departments)) # 13
print(calculate_employers_salaries(departments)) # 14
print(output_departments_name_by_total_taxes(salaries_of_departments, tax_of_departments)) # 16
print(output_employers_over_option_tax(departments, 100000)) # 17
print(* get_employer_with_max_tax(departments)) # 18
25 changes: 17 additions & 8 deletions for_challenges.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@
# Необходимо вывести имена всех учеников из списка с новой строки

names = ['Оля', 'Петя', 'Вася', 'Маша']
# ???

for name in names:
print(name)

# Задание 2
# Необходимо вывести имена всех учеников из списка, рядом с именем показать количество букв в нём
Expand All @@ -12,9 +12,8 @@
# Петя: 4

names = ['Оля', 'Петя', 'Вася', 'Маша']
# ???


for name in names:
print(f'{name}: {len(name)}')
# Задание 3
# Необходимо вывести имена всех учеников из списка, рядом с именем вывести пол ученика

Expand All @@ -25,7 +24,12 @@
'Маша': False,
}
names = ['Оля', 'Петя', 'Вася', 'Маша']
# ???

def gender(male_female):
return 'мужской' if male_female else 'женский'

for name in names:
print(f'{name}: {gender(is_male[name])}')


# Задание 4
Expand All @@ -40,7 +44,10 @@
['Вася', 'Маша', 'Саша', 'Женя'],
['Оля', 'Петя', 'Гриша'],
]
# ???

print(f'Всего {len(groups)} группы')
for group, names in enumerate(groups, start=1):
print(f'Группа {group}: {len(names)} ученика')


# Задание 5
Expand All @@ -54,4 +61,6 @@
['Оля', 'Петя', 'Гриша'],
['Вася', 'Маша', 'Саша', 'Женя'],
]
# ???

for group, names in enumerate(groups, start=1):
print(f'Группа {group}: {", ".join(groups[names])}')
Loading