|
48 | 48 | def generating_departments_salaries(departments): |
49 | 49 | departments_salary = {} |
50 | 50 | for department in departments: |
51 | | - salary = [] |
| 51 | + department_salaries = [] |
52 | 52 | for employer in department["employers"]: |
53 | | - salary.append(employer["salary_rub"]) |
54 | | - departments_salary[department["title"]] = sum(salary) |
| 53 | + department_salaries.append(employer["salary_rub"]) |
| 54 | + departments_salary[department["title"]] = sum(department_salaries) |
55 | 55 | return departments_salary |
56 | 56 |
|
57 | 57 |
|
58 | 58 | def get_departments_tax_rate(taxes, departments): |
59 | 59 | taxes_for_department = {} |
60 | 60 | for tax in taxes: |
61 | | - if tax["department"] != None: |
| 61 | + if tax["department"] is not None: |
62 | 62 | taxes_for_department[tax["department"]] = tax["value_percents"] / 100 |
63 | 63 | else: |
64 | 64 | tax_for_all_departments = tax["value_percents"] / 100 |
@@ -94,23 +94,62 @@ def calculate_employers_salaries(departments): |
94 | 94 | tax_of_departments = get_departments_tax_rate(taxes, departments) |
95 | 95 | for department in departments: |
96 | 96 | for employer in department['employers']: |
97 | | - employer_tax = employer['salary_rub'] * (tax_of_departments.get(department["title"])) / 100 |
| 97 | + employer_tax = employer['salary_rub'] * (tax_of_departments[department["title"]]) / 100 |
98 | 98 | salary_after_tax = employer['salary_rub'] - employer_tax |
99 | 99 | print(f'{employer["first_name"]} {employer["last_name"]}: зарплата после вычета налогов' |
100 | 100 | f' {int(salary_after_tax)}') |
101 | 101 | print(f'{employer["first_name"]} {employer["last_name"]}: зарплата до вычета налогов' |
102 | 102 | f' {employer["salary_rub"]}') |
103 | 103 |
|
104 | 104 |
|
105 | | -if __name__ == "__main__": |
106 | | - salaries_of_departments = generating_departments_salaries(departments) |
107 | | - tax_of_departments = get_departments_tax_rate(taxes, departments) |
108 | | - print(calculate_department_tax_burden(salaries_of_departments, tax_of_departments)) # 13 |
109 | | - print(calculate_employers_salaries(departments)) # 14 |
| 105 | +# task 16. Вывести список отделов, отсортированный по месячной налоговой нагрузке. |
| 106 | +def output_departments_name_by_total_taxes(departments_salary, department_taxes): |
| 107 | + departments_total_taxes = {} |
| 108 | + for department in departments_salary: |
| 109 | + tax_burden = departments_salary.get(department) * department_taxes.get(department) |
| 110 | + departments_total_taxes[department] = tax_burden |
110 | 111 |
|
| 112 | + sorted_departments_total_taxes = dict(sorted(departments_total_taxes.items(), key=lambda item: item[1], |
| 113 | + reverse=True)) |
| 114 | + departments_names_by_total_taxes = [department_name for department_name in sorted_departments_total_taxes] |
| 115 | + for department_name in departments_names_by_total_taxes: |
| 116 | + print(department_name) |
111 | 117 |
|
112 | | -# task 16. Вывести список отделов, отсортированный по месячной налоговой нагрузке. |
113 | 118 |
|
114 | 119 | # task 17. Вывести всех сотрудников, за которых компания платит больше 100к налогов в год. |
| 120 | +def output_employers_over_option_tax(departments, option_sum_of_tax): |
| 121 | + tax_of_departments = get_departments_tax_rate(taxes, departments) |
| 122 | + for department in departments: |
| 123 | + for employer in department['employers']: |
| 124 | + employer_year_tax = employer['salary_rub'] * 12 * tax_of_departments[department["title"]] |
| 125 | + if employer_year_tax > option_sum_of_tax: |
| 126 | + print(f'За {employer["first_name"]} {employer["last_name"]} компания платит больше ' |
| 127 | + f'{option_sum_of_tax//1000} тысяч налогов в год') |
| 128 | + |
115 | 129 |
|
116 | 130 | # task 18. Вывести имя и фамилию сотрудника, за которого компания платит меньше всего налогов. |
| 131 | +def get_employer_with_max_tax(departments): |
| 132 | + tax_of_departments = get_departments_tax_rate(taxes, departments) |
| 133 | + employers_taxes_list = [] |
| 134 | + for department in departments: |
| 135 | + for employer in department['employers']: |
| 136 | + employers_taxes = {} |
| 137 | + employer_year_tax = employer['salary_rub'] * 12 * tax_of_departments[department["title"]] |
| 138 | + employers_taxes["first_name"] = employer["first_name"] |
| 139 | + employers_taxes["last_name"] = employer["last_name"] |
| 140 | + employers_taxes["year_tax"] = employer_year_tax |
| 141 | + employers_taxes_list.append(employers_taxes) |
| 142 | + |
| 143 | + sorted_list_of_employers_tax = sorted(employers_taxes_list, key=lambda x: x["year_tax"], reverse=True) |
| 144 | + |
| 145 | + return sorted_list_of_employers_tax[0]["first_name"], sorted_list_of_employers_tax[0]["last_name"] |
| 146 | + |
| 147 | + |
| 148 | +if __name__ == "__main__": |
| 149 | + salaries_of_departments = generating_departments_salaries(departments) |
| 150 | + tax_of_departments = get_departments_tax_rate(taxes, departments) |
| 151 | + print(calculate_department_tax_burden(salaries_of_departments, tax_of_departments)) # 13 |
| 152 | + print(calculate_employers_salaries(departments)) # 14 |
| 153 | + print(output_departments_name_by_total_taxes(salaries_of_departments, tax_of_departments)) # 16 |
| 154 | + print(output_employers_over_option_tax(departments, 100000)) # 17 |
| 155 | + print(* get_employer_with_max_tax(departments)) # 18 |
0 commit comments