From 0f1e138447351610868110aa82ea382cff95d3aa Mon Sep 17 00:00:00 2001 From: Alexey Chernykh Date: Mon, 20 Feb 2023 21:53:49 +0300 Subject: [PATCH 01/25] basic_exercises part 1 --- for_challenges.py | 29 +++++++++++++++++++++++------ 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/for_challenges.py b/for_challenges.py index 997754da..6023b827 100644 --- a/for_challenges.py +++ b/for_challenges.py @@ -2,7 +2,7 @@ # Необходимо вывести имена всех учеников из списка с новой строки names = ['Оля', 'Петя', 'Вася', 'Маша'] -# ??? +print(* names) # Задание 2 @@ -12,8 +12,8 @@ # Петя: 4 names = ['Оля', 'Петя', 'Вася', 'Маша'] -# ??? - +for name in names: + print(f'{name}: {len(name)}') # Задание 3 # Необходимо вывести имена всех учеников из списка, рядом с именем вывести пол ученика @@ -25,7 +25,17 @@ 'Маша': False, } names = ['Оля', 'Петя', 'Вася', 'Маша'] -# ??? + + +def gender(bool): + if bool == True: + return 'мужской' + else: + return 'женский' + + +for name in names: + print(f'{name}: {gender(is_male[name])}') # Задание 4 @@ -40,7 +50,12 @@ ['Вася', 'Маша', 'Саша', 'Женя'], ['Оля', 'Петя', 'Гриша'], ] -# ??? + +print(f'Всего {len(groups)} группы') +count_of_groups = len(groups) +list_of_groups = [i for i in range(count_of_groups)] +for group in list_of_groups: + print(f'Группа {group+1}: {len(groups[group])} ученика') # Задание 5 @@ -54,4 +69,6 @@ ['Оля', 'Петя', 'Гриша'], ['Вася', 'Маша', 'Саша', 'Женя'], ] -# ??? \ No newline at end of file + +for group in list_of_groups: + print(f'Группа {group+1}: {", ".join(groups[group])}') \ No newline at end of file From 1c8d7d066f4e812dc820bf4825b99c602c63ad24 Mon Sep 17 00:00:00 2001 From: Alexey Chernykh Date: Wed, 22 Feb 2023 08:07:50 +0300 Subject: [PATCH 02/25] basic_exercises fixed --- for_challenges.py | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/for_challenges.py b/for_challenges.py index 6023b827..385885a5 100644 --- a/for_challenges.py +++ b/for_challenges.py @@ -2,8 +2,8 @@ # Необходимо вывести имена всех учеников из списка с новой строки names = ['Оля', 'Петя', 'Вася', 'Маша'] -print(* names) - +print(* names, sep='\n') +print() # Задание 2 # Необходимо вывести имена всех учеников из списка, рядом с именем показать количество букв в нём @@ -14,7 +14,7 @@ names = ['Оля', 'Петя', 'Вася', 'Маша'] for name in names: print(f'{name}: {len(name)}') - +print() # Задание 3 # Необходимо вывести имена всех учеников из списка, рядом с именем вывести пол ученика @@ -25,10 +25,10 @@ 'Маша': False, } names = ['Оля', 'Петя', 'Вася', 'Маша'] +print() - -def gender(bool): - if bool == True: +def gender(male_female): + if male_female: return 'мужской' else: return 'женский' @@ -37,6 +37,7 @@ def gender(bool): for name in names: print(f'{name}: {gender(is_male[name])}') +print() # Задание 4 # Даны группу учеников. Нужно вывести количество групп и для каждой группы – количество учеников в ней @@ -52,11 +53,10 @@ def gender(bool): ] print(f'Всего {len(groups)} группы') -count_of_groups = len(groups) -list_of_groups = [i for i in range(count_of_groups)] -for group in list_of_groups: - print(f'Группа {group+1}: {len(groups[group])} ученика') +for group, k in enumerate(groups): + print(f'Группа {group+1}: {len(k)} ученика') +print() # Задание 5 # Для каждой пары учеников нужно с новой строки перечислить учеников, которые в неё входят @@ -70,5 +70,5 @@ def gender(bool): ['Вася', 'Маша', 'Саша', 'Женя'], ] -for group in list_of_groups: +for group, k in enumerate(groups): print(f'Группа {group+1}: {", ".join(groups[group])}') \ No newline at end of file From 88169bb5dfd025269b2200f2ae864ac6e2028a02 Mon Sep 17 00:00:00 2001 From: Alexey Chernykh Date: Wed, 22 Feb 2023 08:13:03 +0300 Subject: [PATCH 03/25] basic_exercises fixed_1 --- for_challenges.py | 5 ----- 1 file changed, 5 deletions(-) diff --git a/for_challenges.py b/for_challenges.py index 385885a5..77e2daf6 100644 --- a/for_challenges.py +++ b/for_challenges.py @@ -3,7 +3,6 @@ names = ['Оля', 'Петя', 'Вася', 'Маша'] print(* names, sep='\n') -print() # Задание 2 # Необходимо вывести имена всех учеников из списка, рядом с именем показать количество букв в нём @@ -14,7 +13,6 @@ names = ['Оля', 'Петя', 'Вася', 'Маша'] for name in names: print(f'{name}: {len(name)}') -print() # Задание 3 # Необходимо вывести имена всех учеников из списка, рядом с именем вывести пол ученика @@ -25,7 +23,6 @@ 'Маша': False, } names = ['Оля', 'Петя', 'Вася', 'Маша'] -print() def gender(male_female): if male_female: @@ -37,7 +34,6 @@ def gender(male_female): for name in names: print(f'{name}: {gender(is_male[name])}') -print() # Задание 4 # Даны группу учеников. Нужно вывести количество групп и для каждой группы – количество учеников в ней @@ -56,7 +52,6 @@ def gender(male_female): for group, k in enumerate(groups): print(f'Группа {group+1}: {len(k)} ученика') -print() # Задание 5 # Для каждой пары учеников нужно с новой строки перечислить учеников, которые в неё входят From 190192dd661f99116172b6f937586ca617cef0ea Mon Sep 17 00:00:00 2001 From: Alexey Chernykh Date: Thu, 23 Feb 2023 18:08:41 +0300 Subject: [PATCH 04/25] add string_challenges.py, for_challenges.py fixed --- .idea/.gitignore | 0 .idea/basic_exercises.iml | 8 ++ .idea/inspectionProfiles/Project_Default.xml | 6 ++ .../inspectionProfiles/profiles_settings.xml | 6 ++ .idea/modules.xml | 8 ++ .idea/vcs.xml | 6 ++ .idea/workspace.xml | 59 +++++++++++++ for_challenges.py | 11 +-- for_dict_challenges.py | 8 +- string_challenges.py | 86 +++++++++++++++++-- 10 files changed, 182 insertions(+), 16 deletions(-) create mode 100644 .idea/.gitignore create mode 100644 .idea/basic_exercises.iml create mode 100644 .idea/inspectionProfiles/Project_Default.xml create mode 100644 .idea/inspectionProfiles/profiles_settings.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/vcs.xml create mode 100644 .idea/workspace.xml diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 00000000..e69de29b diff --git a/.idea/basic_exercises.iml b/.idea/basic_exercises.iml new file mode 100644 index 00000000..d0876a78 --- /dev/null +++ b/.idea/basic_exercises.iml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 00000000..5d9758c1 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 00000000..105ce2da --- /dev/null +++ b/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 00000000..09aacff9 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 00000000..94a25f7f --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml new file mode 100644 index 00000000..904310e1 --- /dev/null +++ b/.idea/workspace.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + 1677078327747 + + + + + + + + + \ No newline at end of file diff --git a/for_challenges.py b/for_challenges.py index 77e2daf6..20a819f9 100644 --- a/for_challenges.py +++ b/for_challenges.py @@ -2,7 +2,8 @@ # Необходимо вывести имена всех учеников из списка с новой строки names = ['Оля', 'Петя', 'Вася', 'Маша'] -print(* names, sep='\n') +for name in names: + print(name) # Задание 2 # Необходимо вывести имена всех учеников из списка, рядом с именем показать количество букв в нём @@ -49,8 +50,8 @@ def gender(male_female): ] print(f'Всего {len(groups)} группы') -for group, k in enumerate(groups): - print(f'Группа {group+1}: {len(k)} ученика') +for group, names in enumerate(groups, start=1): + print(f'Группа {group}: {len(names)} ученика') # Задание 5 @@ -65,5 +66,5 @@ def gender(male_female): ['Вася', 'Маша', 'Саша', 'Женя'], ] -for group, k in enumerate(groups): - print(f'Группа {group+1}: {", ".join(groups[group])}') \ No newline at end of file +for group, names in enumerate(groups, start=1): + print(f'Группа {group}: {", ".join(groups[group-1])}') \ No newline at end of file diff --git a/for_dict_challenges.py b/for_dict_challenges.py index 96062ebc..7d889b71 100644 --- a/for_dict_challenges.py +++ b/for_dict_challenges.py @@ -12,7 +12,10 @@ {'first_name': 'Маша'}, {'first_name': 'Петя'}, ] -# ??? +name_of_students = [students[name]['first_name'] for name in range(len(students))] + +for name in range(len(students)): + print(f'{students[name]["first_name"]}: {name_of_students.count(students[name]["first_name"])}') # Задание 2 @@ -26,7 +29,8 @@ {'first_name': 'Маша'}, {'first_name': 'Оля'}, ] -# ??? +name_of_students = [students[name]['first_name'] for name in range(len(students))] +print(name_of_students) # Задание 3 diff --git a/string_challenges.py b/string_challenges.py index 856add2d..8714f9af 100644 --- a/string_challenges.py +++ b/string_challenges.py @@ -1,28 +1,96 @@ # Вывести последнюю букву в слове word = 'Архангельск' -# ??? +print(word[-1]) # Вывести количество букв "а" в слове word = 'Архангельск' -# ??? +print(word.count('а')) # Вывести количество гласных букв в слове word = 'Архангельск' -# ??? - +vowel_letters = 'а, е, ё, и, о, у, ы, э, ю, я' +count_vowel_letters = 0 +for letters in word.lower(): + if letters in vowel_letters: + count_vowel_letters += 1 +print(f'Количество гласных букв в слове {word}: {count_vowel_letters}') # Вывести количество слов в предложении sentence = 'Мы приехали в гости' -# ??? - +word_count = sentence.count(' ') + 1 +print(f'Количество слов в предложении: {word_count}') # Вывести первую букву каждого слова на отдельной строке sentence = 'Мы приехали в гости' -# ??? - +list_sentence = sentence.split() +for letter in list_sentence: + print(letter[0]) # Вывести усреднённую длину слова в предложении sentence = 'Мы приехали в гости' -# ??? \ No newline at end of file +len_word = 0 +for word in sentence.split(): + len_word += len(word) +avg_len_word = len_word / len(sentence.split()) +print(avg_len_word) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 85ef5fbabdddeeb8e295cbd892a7d329bb111b55 Mon Sep 17 00:00:00 2001 From: Alexey Chernykh Date: Sat, 25 Feb 2023 07:11:00 +0300 Subject: [PATCH 05/25] add for_dict_challenges.py --- .idea/basic_exercises.iml | 2 +- .idea/misc.xml | 4 ++ .idea/workspace.xml | 140 +++++++++++++++++++++++++++++++++++--- for_dict_challenges.py | 52 ++++++++++++-- 4 files changed, 182 insertions(+), 16 deletions(-) create mode 100644 .idea/misc.xml diff --git a/.idea/basic_exercises.iml b/.idea/basic_exercises.iml index d0876a78..d870a4a7 100644 --- a/.idea/basic_exercises.iml +++ b/.idea/basic_exercises.iml @@ -2,7 +2,7 @@ - + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 00000000..ab530bfd --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 904310e1..f49ee699 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -1,7 +1,12 @@ + + + + + + + @@ -21,15 +33,118 @@ + + + + + + \ No newline at end of file diff --git a/for_dict_challenges.py b/for_dict_challenges.py index 7d889b71..8c8ee920 100644 --- a/for_dict_challenges.py +++ b/for_dict_challenges.py @@ -13,10 +13,14 @@ {'first_name': 'Петя'}, ] name_of_students = [students[name]['first_name'] for name in range(len(students))] +uniq_name = [] -for name in range(len(students)): - print(f'{students[name]["first_name"]}: {name_of_students.count(students[name]["first_name"])}') +for name in name_of_students: + if name not in uniq_name: + uniq_name.append(name) +for name in range(len(uniq_name)): + print(f'{uniq_name[name]}: {name_of_students.count(students[name]["first_name"])}') # Задание 2 # Дан список учеников, нужно вывести самое часто повторящееся имя @@ -29,10 +33,30 @@ {'first_name': 'Маша'}, {'first_name': 'Оля'}, ] -name_of_students = [students[name]['first_name'] for name in range(len(students))] -print(name_of_students) + +def max_name(students): + name_of_students = [students[name]['first_name'] for name in range(len(students))] + + names_counter = dict() + for name in name_of_students: + if name in names_counter: + names_counter[name] += 1 + else: + names_counter[name] = 1 + + max_names = [] + max_count = 0 + + for name, count_of_name in names_counter.items(): + if count_of_name > max_count: + max_count = count_of_name + max_names = [name] + elif count_of_name == max_count: + max_names.append(name) + return f'Самое частое имя среди учеников: {"".join(max_names)}' +print(max_name(students)) # Задание 3 # Есть список учеников в нескольких классах, нужно вывести самое частое имя в каждом классе. # Пример вывода: @@ -55,8 +79,9 @@ {'first_name': 'Саша'}, ], ] -# ??? - +print(max_name(school_students[0])) +print(max_name(school_students[1])) +print(max_name(school_students[2])) # Задание 4 # Для каждого класса нужно вывести количество девочек и мальчиков в нём. @@ -76,7 +101,20 @@ 'Миша': True, 'Даша': False, } -# ??? + +male_gender = 0 +female_gender = 0 + +for class_i in range(len(school)): + lst_of_class = [class_x for class_x in school[class_i]['students']] + for i in range(len(lst_of_class)): + if is_male.get(lst_of_class[i]['first_name']) == 1: + male_gender += 1 + else: + female_gender += 1 + print(f'Класс {school[class_i]["class"]}: девочки {female_gender}, мальчики {male_gender}') + male_gender = 0 + female_gender = 0 # Задание 5 From c27c41733f59015e7d55f4c362bb666a115093ea Mon Sep 17 00:00:00 2001 From: Alexey Chernykh Date: Sat, 25 Feb 2023 08:05:39 +0300 Subject: [PATCH 06/25] for_challenges.py, string_challenges.py fixed --- .idea/workspace.xml | 51 +++++++++++++++++++++++++++++++++----------- for_challenges.py | 8 ++----- string_challenges.py | 7 +++--- 3 files changed, 43 insertions(+), 23 deletions(-) diff --git a/.idea/workspace.xml b/.idea/workspace.xml index f49ee699..72ce0dfd 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -5,9 +5,9 @@ - - + + - - + + - + - + + + + + + - @@ -156,7 +179,7 @@ - + @@ -175,9 +198,11 @@ + + \ No newline at end of file diff --git a/for_challenges.py b/for_challenges.py index 20a819f9..241815e4 100644 --- a/for_challenges.py +++ b/for_challenges.py @@ -26,11 +26,7 @@ names = ['Оля', 'Петя', 'Вася', 'Маша'] def gender(male_female): - if male_female: - return 'мужской' - else: - return 'женский' - + return 'мужской' if male_female else 'женский' for name in names: print(f'{name}: {gender(is_male[name])}') @@ -67,4 +63,4 @@ def gender(male_female): ] for group, names in enumerate(groups, start=1): - print(f'Группа {group}: {", ".join(groups[group-1])}') \ No newline at end of file + print(f'Группа {group}: {", ".join(groups[names])}') \ No newline at end of file diff --git a/string_challenges.py b/string_challenges.py index 8714f9af..dc1adf61 100644 --- a/string_challenges.py +++ b/string_challenges.py @@ -5,12 +5,12 @@ # Вывести количество букв "а" в слове word = 'Архангельск' -print(word.count('а')) +print(word.lower().count('а')) # Вывести количество гласных букв в слове word = 'Архангельск' -vowel_letters = 'а, е, ё, и, о, у, ы, э, ю, я' +vowel_letters = 'аеёиоуыэюя' count_vowel_letters = 0 for letters in word.lower(): if letters in vowel_letters: @@ -24,8 +24,7 @@ # Вывести первую букву каждого слова на отдельной строке sentence = 'Мы приехали в гости' -list_sentence = sentence.split() -for letter in list_sentence: +for letter in sentence.split(): print(letter[0]) # Вывести усреднённую длину слова в предложении From dd920569516b40e62cc32191ff81f08ce39a28f8 Mon Sep 17 00:00:00 2001 From: Alexey Chernykh Date: Sun, 26 Feb 2023 16:42:30 +0300 Subject: [PATCH 07/25] add task company.py solution --- .idea/workspace.xml | 64 +++++++++++++++++++++++---------------------- company.py | 58 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 91 insertions(+), 31 deletions(-) create mode 100644 company.py diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 72ce0dfd..a4770c96 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -6,8 +6,6 @@ - - - { - "keyToString": { - "RunOnceActivity.OpenProjectViewOnStart": "true", - "RunOnceActivity.ShowReadmeOnStart": "true", - "WebServerToolWindowFactoryState": "false", - "last_opened_file_path": "C:/projects/learn-homework-1/5_while2.py", - "node.js.detected.package.eslint": "true", - "node.js.detected.package.tslint": "true", - "node.js.selected.package.eslint": "(autodetect)", - "node.js.selected.package.tslint": "(autodetect)", - "nodejs_package_manager_path": "npm", - "settings.editor.selected.configurable": "com.jetbrains.python.configuration.PyActiveSdkModuleConfigurable" + - - +}]]> + + - + - + - + + + + - - - @@ -179,7 +177,9 @@ - + + + @@ -199,10 +199,12 @@ - + + + \ No newline at end of file diff --git a/company.py b/company.py new file mode 100644 index 00000000..d5efb50d --- /dev/null +++ b/company.py @@ -0,0 +1,58 @@ +""" +В этот раз у нас есть компания, в ней отделы, в отделах люди. У людей есть имя, должность и зарплата. +Ваши задачи такие: +1. Вывести названия всех отделов +2. Вывести имена всех сотрудников компании. +3. Вывести имена всех сотрудников компании с указанием отдела, в котором они работают. +4. Вывести имена всех сотрудников компании, которые получают больше 100к. +5. Вывести позиции, на которых люди получают меньше 80к (можно с повторениями). +6. Посчитать, сколько денег в месяц уходит на каждый отдел – и вывести вместе с названием отдела +""" + +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: + print(department["title"]) + +for department in departments: + for employer in department["employers"]: + print(employer["first_name"]) + +for department in departments: + for employer in department["employers"]: + print(f'{employer["first_name"]} работает в {department["title"]}') + +for department in departments: + for employer in department["employers"]: + if employer.get('salary_rub') > 100000: + print(f'Заработная плата {employer["first_name"]} превышает 100К') + +for department in departments: + for employer in department["employers"]: + if employer.get('salary_rub') < 80000: + print(f'Заработная плата {employer["first_name"]} ниже 80К') + +for department in departments: + department_salary = 0 + for employer in department["employers"]: + department_salary += employer.get('salary_rub') + print(f'Заработная плата {department["title"]} в месяц составляет {department_salary}') \ No newline at end of file From c63c9194dd32ef32096225d3a15fbbebf3b4ecd9 Mon Sep 17 00:00:00 2001 From: Alexey Chernykh Date: Sun, 26 Feb 2023 16:56:37 +0300 Subject: [PATCH 08/25] add task company.py solution --- company.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/company.py b/company.py index d5efb50d..a26129b9 100644 --- a/company.py +++ b/company.py @@ -31,28 +31,28 @@ ] for department in departments: - print(department["title"]) + print(department['title']) for department in departments: - for employer in department["employers"]: - print(employer["first_name"]) + for employer in department['employers']: + print(employer['first_name']) for department in departments: - for employer in department["employers"]: + for employer in department['employers']: print(f'{employer["first_name"]} работает в {department["title"]}') for department in departments: - for employer in department["employers"]: + for employer in department['employers']: if employer.get('salary_rub') > 100000: print(f'Заработная плата {employer["first_name"]} превышает 100К') for department in departments: - for employer in department["employers"]: + for employer in department['employers']: if employer.get('salary_rub') < 80000: print(f'Заработная плата {employer["first_name"]} ниже 80К') for department in departments: department_salary = 0 - for employer in department["employers"]: + for employer in department['employers']: department_salary += employer.get('salary_rub') print(f'Заработная плата {department["title"]} в месяц составляет {department_salary}') \ No newline at end of file From b3ba249300f8d0cd40bf6bcd6349db8772d8aa5b Mon Sep 17 00:00:00 2001 From: Alexey Chernykh Date: Mon, 27 Feb 2023 20:52:49 +0300 Subject: [PATCH 09/25] company.py fixed, add additional tasks --- company.py | 76 ++++++++++++++++++++++++++++++++++++------ for_dict_challenges.py | 11 +++--- 2 files changed, 69 insertions(+), 18 deletions(-) diff --git a/company.py b/company.py index a26129b9..7f627ef8 100644 --- a/company.py +++ b/company.py @@ -7,6 +7,14 @@ 4. Вывести имена всех сотрудников компании, которые получают больше 100к. 5. Вывести позиции, на которых люди получают меньше 80к (можно с повторениями). 6. Посчитать, сколько денег в месяц уходит на каждый отдел – и вывести вместе с названием отдела + +Второй уровень: +7. Вывести названия отделов с указанием минимальной зарплаты в нём. +8. Вывести названия отделов с указанием минимальной, средней и максимальной зарплаты в нём. +9. Вывести среднюю зарплату по всей компании. +10. Вывести названия должностей, которые получают больше 90к без повторений. +11. Посчитать среднюю зарплату по каждому отделу среди девушек (их зовут Мишель, Николь, Кристина и Кейтлин). +12. Вывести без повторений имена людей, чьи фамилии заканчиваются на гласную букву. """ departments = [ @@ -30,29 +38,75 @@ }, ] -for department in departments: +for department in departments: # task 1 print(department['title']) -for department in departments: +for department in departments: # task 2 for employer in department['employers']: print(employer['first_name']) -for department in departments: +for department in departments: # task 3 for employer in department['employers']: print(f'{employer["first_name"]} работает в {department["title"]}') -for department in departments: +for department in departments: # task 4 for employer in department['employers']: - if employer.get('salary_rub') > 100000: + if employer['salary_rub'] > 100000: print(f'Заработная плата {employer["first_name"]} превышает 100К') -for department in departments: +for department in departments: # task 5 for employer in department['employers']: - if employer.get('salary_rub') < 80000: - print(f'Заработная плата {employer["first_name"]} ниже 80К') + if employer['salary_rub'] < 80000: + print(f'Заработная плата {employer["position"]} ниже 80К') -for department in departments: +for department in departments: # task 6 department_salary = 0 for employer in department['employers']: - department_salary += employer.get('salary_rub') - print(f'Заработная плата {department["title"]} в месяц составляет {department_salary}') \ No newline at end of file + 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"]}, минимальная зарплата {sorted(department_salary)[0]}') + +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) + print(f'Отдел {department["title"]}: минимальная зарплата {sorted(department_salary)[0]}, cредняя зарплата ' + f'{int(avg_salary)}, максимальная зарплата {sorted(department_salary)[-1]}') + +avg_salary = 0 # task 9 +department_salary = [] +for department in departments: + for employer in department['employers']: + department_salary.append(employer['salary_rub']) +avg_salary = sum(department_salary) / len(department_salary) +print(f'Средняя зарплата {avg_salary}') + +for department in departments: # task 10 + for employer in department['employers']: + if employer['salary_rub'] > 90000: + print(f'{employer["position"]} получает больше 90К') + +for department in departments: # task 11 + avg_girls_salary = 0 + girl_salary = [] + for employer in department['employers']: + if employer['first_name'] == 'Michelle' or employer['first_name'] == 'Nicole' or employer['first_name'] == \ + 'Christina' or employer['first_name'] == 'Caitlin': + girl_salary.append(employer['salary_rub']) + avg_girls_salary = sum(girl_salary) / len(girl_salary) + print(f'Средняя зарплата девушек по {department["title"]} составляет: {int(avg_girls_salary)}') + +for department in departments: # task 12 + for employer in department['employers']: + if employer['last_name'][-1] in 'aeiouy': + print(f'Фамилия сотрудника {employer["first_name"]} заканчивается на гласную букву') + + + diff --git a/for_dict_challenges.py b/for_dict_challenges.py index 8c8ee920..32b590af 100644 --- a/for_dict_challenges.py +++ b/for_dict_challenges.py @@ -13,14 +13,11 @@ {'first_name': 'Петя'}, ] name_of_students = [students[name]['first_name'] for name in range(len(students))] -uniq_name = [] +uniq_name_set = set(name_of_students) +uniq_name_list = list(uniq_name_set) -for name in name_of_students: - if name not in uniq_name: - uniq_name.append(name) - -for name in range(len(uniq_name)): - print(f'{uniq_name[name]}: {name_of_students.count(students[name]["first_name"])}') +for name in range(len(uniq_name_list)): + print(f'{uniq_name_list[name]}: {name_of_students.count(students[name]["first_name"])}') # Задание 2 # Дан список учеников, нужно вывести самое часто повторящееся имя From 867a71179e796e0bff977787c8ff49cd58955d07 Mon Sep 17 00:00:00 2001 From: Alexey Chernykh Date: Tue, 28 Feb 2023 20:12:34 +0300 Subject: [PATCH 10/25] fixed compane.py --- company.py | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/company.py b/company.py index 7f627ef8..7ed9db55 100644 --- a/company.py +++ b/company.py @@ -69,7 +69,7 @@ department_salary = [] for employer in department['employers']: department_salary.append(employer['salary_rub']) - print(f'Отдел {department["title"]}, минимальная зарплата {sorted(department_salary)[0]}') + print(f'Отдел {department["title"]} - минимальная зарплата {sorted(department_salary)[0]}') for department in departments: # task 8 department_salary = [] @@ -77,8 +77,11 @@ for employer in department['employers']: department_salary.append(employer['salary_rub']) avg_salary = sum(department_salary) / len(department_salary) - print(f'Отдел {department["title"]}: минимальная зарплата {sorted(department_salary)[0]}, cредняя зарплата ' - f'{int(avg_salary)}, максимальная зарплата {sorted(department_salary)[-1]}') + min_salary = sorted(department_salary)[0] + max_salary = sorted(department_salary)[-1] + print(f'Отдел {department["title"]}: минимальная зарплата {min_salary}') + print(f'Отдел {department["title"]}: максимальная зарплата {max_salary}') + print(f'Отдел {department["title"]}: cредняя зарплата {int(avg_salary)}') avg_salary = 0 # task 9 department_salary = [] @@ -86,27 +89,30 @@ for employer in department['employers']: department_salary.append(employer['salary_rub']) avg_salary = sum(department_salary) / len(department_salary) -print(f'Средняя зарплата {avg_salary}') +print(f'Средняя зарплата компании {avg_salary}') -for department in departments: # task 10 +salary_over_90 = [] # task 10 +for department in departments: for employer in department['employers']: if employer['salary_rub'] > 90000: - print(f'{employer["position"]} получает больше 90К') + salary_over_90.append(employer["position"]) +print(f'{", ".join(salary_over_90)} получают больше 90К') for department in departments: # task 11 - avg_girls_salary = 0 + girls = ['Michelle', 'Nicole', 'Christina', 'Caitlin', ] girl_salary = [] for employer in department['employers']: - if employer['first_name'] == 'Michelle' or employer['first_name'] == 'Nicole' or employer['first_name'] == \ - 'Christina' or employer['first_name'] == 'Caitlin': + 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 = [] for department in departments: # task 12 for employer in department['employers']: if employer['last_name'][-1] in 'aeiouy': - print(f'Фамилия сотрудника {employer["first_name"]} заканчивается на гласную букву') + end_vowel_letter_in_last_name.append(employer["first_name"]) +print(f'Фамилии сотрудников {", ".join(end_vowel_letter_in_last_name)} оканчиваются на гласную букву') From 991276aa62097bd5eb91066315219976080c1c75 Mon Sep 17 00:00:00 2001 From: Alexey Chernykh Date: Wed, 1 Mar 2023 18:35:24 +0300 Subject: [PATCH 11/25] fixed company.py, for_dict_challenges.py +last task --- company.py | 27 ++++++++++++++------------- for_dict_challenges.py | 39 ++++++++++++++++++++++----------------- 2 files changed, 36 insertions(+), 30 deletions(-) diff --git a/company.py b/company.py index 7ed9db55..c8507a1e 100644 --- a/company.py +++ b/company.py @@ -69,7 +69,7 @@ department_salary = [] for employer in department['employers']: department_salary.append(employer['salary_rub']) - print(f'Отдел {department["title"]} - минимальная зарплата {sorted(department_salary)[0]}') + print(f'Отдел {department["title"]} - минимальная зарплата {min(department_salary)}') for department in departments: # task 8 department_salary = [] @@ -77,34 +77,34 @@ for employer in department['employers']: department_salary.append(employer['salary_rub']) avg_salary = sum(department_salary) / len(department_salary) - min_salary = sorted(department_salary)[0] - max_salary = sorted(department_salary)[-1] + 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)}') avg_salary = 0 # task 9 -department_salary = [] +salary = [] for department in departments: for employer in department['employers']: - department_salary.append(employer['salary_rub']) -avg_salary = sum(department_salary) / len(department_salary) + salary.append(employer['salary_rub']) +avg_salary = sum(salary) / len(salary) print(f'Средняя зарплата компании {avg_salary}') -salary_over_90 = [] # task 10 +salary_cap = [] # task 10 for department in departments: for employer in department['employers']: if employer['salary_rub'] > 90000: - salary_over_90.append(employer["position"]) -print(f'{", ".join(salary_over_90)} получают больше 90К') + salary_cap.append(employer["position"]) +print(f'{", ".join(salary_cap)} получают больше 90К') -for department in departments: # task 11 - girls = ['Michelle', 'Nicole', 'Christina', 'Caitlin', ] +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) + avg_girls_salary = sum(girl_salary) / len(girl_salary) print(f'Средняя зарплата девушек по {department["title"]} составляет: {int(avg_girls_salary)}') end_vowel_letter_in_last_name = [] @@ -112,7 +112,8 @@ for employer in department['employers']: if employer['last_name'][-1] in 'aeiouy': end_vowel_letter_in_last_name.append(employer["first_name"]) -print(f'Фамилии сотрудников {", ".join(end_vowel_letter_in_last_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)} оканчиваются на гласную букву') diff --git a/for_dict_challenges.py b/for_dict_challenges.py index 32b590af..60b86042 100644 --- a/for_dict_challenges.py +++ b/for_dict_challenges.py @@ -36,7 +36,7 @@ def max_name(students): names_counter = dict() for name in name_of_students: - if name in names_counter: + if names_counter.get(name): names_counter[name] += 1 else: names_counter[name] = 1 @@ -52,8 +52,8 @@ def max_name(students): max_names.append(name) return f'Самое частое имя среди учеников: {"".join(max_names)}' - print(max_name(students)) + # Задание 3 # Есть список учеников в нескольких классах, нужно вывести самое частое имя в каждом классе. # Пример вывода: @@ -76,14 +76,13 @@ def max_name(students): {'first_name': 'Саша'}, ], ] -print(max_name(school_students[0])) -print(max_name(school_students[1])) -print(max_name(school_students[2])) +for name in range(len(school_students)): + print(max_name(school_students[name])) # Задание 4 # Для каждого класса нужно вывести количество девочек и мальчиков в нём. # Пример вывода: -# Класс 2a: девочки 2, мальчики 0 +# Класс 2a: девочки 2, мальчики 0 # Класс 2б: девочки 0, мальчики 2 school = [ @@ -99,19 +98,15 @@ def max_name(students): 'Даша': False, } -male_gender = 0 -female_gender = 0 - -for class_i in range(len(school)): - lst_of_class = [class_x for class_x in school[class_i]['students']] - for i in range(len(lst_of_class)): - if is_male.get(lst_of_class[i]['first_name']) == 1: +for students in school: + male_gender = 0 + female_gender = 0 + for name in students['students']: + if is_male.get(name['first_name']): male_gender += 1 else: female_gender += 1 - print(f'Класс {school[class_i]["class"]}: девочки {female_gender}, мальчики {male_gender}') - male_gender = 0 - female_gender = 0 + print(f'Класс {students["class"]}: девочки {female_gender}, мальчики {male_gender}') # Задание 5 @@ -130,5 +125,15 @@ def max_name(students): 'Олег': True, 'Миша': True, } -# ??? +for students in school: + male_gender = 0 + female_gender = 0 + for name in students['students']: + if is_male.get(name['first_name']): + male_gender += 1 + else: + female_gender += 1 + boys_predominate = 'Больше всего мальчиков в классе ' + girls_predominate = 'Больше всего девочек в классе ' + print(f'{boys_predominate}{students["class"]}') if male_gender > female_gender else print(f'{girls_predominate}{students["class"]}') \ No newline at end of file From 7ff8a372b88f2a11b379edb26bf135a9213f3762 Mon Sep 17 00:00:00 2001 From: Alexey Chernykh Date: Fri, 3 Mar 2023 19:00:55 +0300 Subject: [PATCH 12/25] fixed company.py --- .idea/.gitignore | 0 .idea/basic_exercises.iml | 8 - .idea/inspectionProfiles/Project_Default.xml | 6 - .../inspectionProfiles/profiles_settings.xml | 6 - .idea/misc.xml | 4 - .idea/modules.xml | 8 - .idea/vcs.xml | 6 - .idea/workspace.xml | 210 ------------------ company.py | 24 +- 9 files changed, 13 insertions(+), 259 deletions(-) delete mode 100644 .idea/.gitignore delete mode 100644 .idea/basic_exercises.iml delete mode 100644 .idea/inspectionProfiles/Project_Default.xml delete mode 100644 .idea/inspectionProfiles/profiles_settings.xml delete mode 100644 .idea/misc.xml delete mode 100644 .idea/modules.xml delete mode 100644 .idea/vcs.xml delete mode 100644 .idea/workspace.xml diff --git a/.idea/.gitignore b/.idea/.gitignore deleted file mode 100644 index e69de29b..00000000 diff --git a/.idea/basic_exercises.iml b/.idea/basic_exercises.iml deleted file mode 100644 index d870a4a7..00000000 --- a/.idea/basic_exercises.iml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml deleted file mode 100644 index 5d9758c1..00000000 --- a/.idea/inspectionProfiles/Project_Default.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - \ No newline at end of file diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml deleted file mode 100644 index 105ce2da..00000000 --- a/.idea/inspectionProfiles/profiles_settings.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml deleted file mode 100644 index ab530bfd..00000000 --- a/.idea/misc.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml deleted file mode 100644 index 09aacff9..00000000 --- a/.idea/modules.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml deleted file mode 100644 index 94a25f7f..00000000 --- a/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml deleted file mode 100644 index a4770c96..00000000 --- a/.idea/workspace.xml +++ /dev/null @@ -1,210 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1677078327747 - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/company.py b/company.py index c8507a1e..ef11cfab 100644 --- a/company.py +++ b/company.py @@ -49,14 +49,16 @@ for employer in department['employers']: print(f'{employer["first_name"]} работает в {department["title"]}') -for department in departments: # task 4 +task_salary = 100000 # task 4 +for department in departments: for employer in department['employers']: - if employer['salary_rub'] > 100000: + if employer['salary_rub'] > task_salary: print(f'Заработная плата {employer["first_name"]} превышает 100К') -for department in departments: # task 5 +task_salary = 80000 # task 5 +for department in departments: for employer in department['employers']: - if employer['salary_rub'] < 80000: + if employer['salary_rub'] < task_salary: print(f'Заработная плата {employer["position"]} ниже 80К') for department in departments: # task 6 @@ -83,22 +85,22 @@ print(f'Отдел {department["title"]}: максимальная зарплата {max_salary}') print(f'Отдел {department["title"]}: cредняя зарплата {int(avg_salary)}') -avg_salary = 0 # task 9 -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}') -salary_cap = [] # task 10 +task_salary = 90000 # task 10 +salary_cap = [] for department in departments: for employer in department['employers']: - if employer['salary_rub'] > 90000: + if employer['salary_rub'] > task_salary: salary_cap.append(employer["position"]) print(f'{", ".join(salary_cap)} получают больше 90К') -girls = ['Michelle', 'Nicole', 'Christina', 'Caitlin', ] # task 11 +girls = ['Michelle', 'Nicole', 'Christina', 'Caitlin'] # task 11 for department in departments: girl_salary = [] for employer in department['employers']: @@ -107,8 +109,8 @@ avg_girls_salary = sum(girl_salary) / len(girl_salary) print(f'Средняя зарплата девушек по {department["title"]} составляет: {int(avg_girls_salary)}') -end_vowel_letter_in_last_name = [] -for department in departments: # task 12 +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"]) From 1a2b535dfffe9c8b2461f737861c0cd3f6e3d6cf Mon Sep 17 00:00:00 2001 From: Alexey Chernykh Date: Fri, 3 Mar 2023 19:48:29 +0300 Subject: [PATCH 13/25] fixed for_dict_challenges.py, except for the 5 task --- for_dict_challenges.py | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/for_dict_challenges.py b/for_dict_challenges.py index 60b86042..8123ee1a 100644 --- a/for_dict_challenges.py +++ b/for_dict_challenges.py @@ -12,12 +12,12 @@ {'first_name': 'Маша'}, {'first_name': 'Петя'}, ] -name_of_students = [students[name]['first_name'] for name in range(len(students))] -uniq_name_set = set(name_of_students) -uniq_name_list = list(uniq_name_set) -for name in range(len(uniq_name_list)): - print(f'{uniq_name_list[name]}: {name_of_students.count(students[name]["first_name"])}') +name_of_students = [student['first_name'] for student in students] +uniq_name = list(set(name_of_students)) + +for name in uniq_name: + print(f'{name}: {name_of_students.count(name)}') # Задание 2 # Дан список учеников, нужно вывести самое часто повторящееся имя @@ -76,8 +76,8 @@ def max_name(students): {'first_name': 'Саша'}, ], ] -for name in range(len(school_students)): - print(max_name(school_students[name])) +for name in school_students: + print(max_name(name)) # Задание 4 # Для каждого класса нужно вывести количество девочек и мальчиков в нём. @@ -118,6 +118,7 @@ def max_name(students): school = [ {'class': '2a', 'students': [{'first_name': 'Маша'}, {'first_name': 'Оля'}]}, {'class': '3c', 'students': [{'first_name': 'Олег'}, {'first_name': 'Миша'}]}, + {'class': '4c', 'students': [{'first_name': 'Олег'}, {'first_name': 'Миша'}, {'first_name': 'Миша'}]}, ] is_male = { 'Маша': False, @@ -136,4 +137,4 @@ def max_name(students): female_gender += 1 boys_predominate = 'Больше всего мальчиков в классе ' girls_predominate = 'Больше всего девочек в классе ' - print(f'{boys_predominate}{students["class"]}') if male_gender > female_gender else print(f'{girls_predominate}{students["class"]}') \ No newline at end of file + print(f'{boys_predominate}{students["class"]}') if male_gender > female_gender else print(f'{girls_predominate}{students["class"]}') From d7696aed4508fcfc4a10d10adfa76312df19c060 Mon Sep 17 00:00:00 2001 From: Alexey Chernykh Date: Sat, 4 Mar 2023 15:45:14 +0300 Subject: [PATCH 14/25] fixed company.py, for_dict_challenges.py --- company.py | 9 +++------ for_dict_challenges.py | 23 ++++++++++++++++++----- 2 files changed, 21 insertions(+), 11 deletions(-) diff --git a/company.py b/company.py index ef11cfab..75791b96 100644 --- a/company.py +++ b/company.py @@ -53,13 +53,13 @@ for department in departments: for employer in department['employers']: if employer['salary_rub'] > task_salary: - print(f'Заработная плата {employer["first_name"]} превышает 100К') + 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"]} ниже 80К') + print(f'Заработная плата {employer["position"]} ниже {task_salary}К') for department in departments: # task 6 department_salary = 0 @@ -98,7 +98,7 @@ for employer in department['employers']: if employer['salary_rub'] > task_salary: salary_cap.append(employer["position"]) -print(f'{", ".join(salary_cap)} получают больше 90К') +print(f'{", ".join(salary_cap)} получают больше {task_salary}К') girls = ['Michelle', 'Nicole', 'Christina', 'Caitlin'] # task 11 for department in departments: @@ -116,6 +116,3 @@ 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)} оканчиваются на гласную букву') - - - diff --git a/for_dict_challenges.py b/for_dict_challenges.py index 8123ee1a..7568e93f 100644 --- a/for_dict_challenges.py +++ b/for_dict_challenges.py @@ -32,7 +32,7 @@ ] def max_name(students): - name_of_students = [students[name]['first_name'] for name in range(len(students))] + name_of_students = [student['first_name'] for student in students] names_counter = dict() for name in name_of_students: @@ -118,7 +118,6 @@ def max_name(students): school = [ {'class': '2a', 'students': [{'first_name': 'Маша'}, {'first_name': 'Оля'}]}, {'class': '3c', 'students': [{'first_name': 'Олег'}, {'first_name': 'Миша'}]}, - {'class': '4c', 'students': [{'first_name': 'Олег'}, {'first_name': 'Миша'}, {'first_name': 'Миша'}]}, ] is_male = { 'Маша': False, @@ -127,6 +126,11 @@ def max_name(students): 'Миша': True, } +max_male_class = '' +max_female_class = '' +max_male_gender = 0 +max_female_gender = 0 + for students in school: male_gender = 0 female_gender = 0 @@ -135,6 +139,15 @@ def max_name(students): male_gender += 1 else: female_gender += 1 - boys_predominate = 'Больше всего мальчиков в классе ' - girls_predominate = 'Больше всего девочек в классе ' - print(f'{boys_predominate}{students["class"]}') if male_gender > female_gender else print(f'{girls_predominate}{students["class"]}') + if male_gender > female_gender: + max_male_gender = male_gender + max_male_class = str(students["class"]) + if male_gender > max_male_gender: + max_male_gende = male_gender + else: + max_female_gender = female_gender + max_female_class = str(students["class"]) + if female_gender > max_female_gender: + max_female_gender = female_gender +print(f'Больше всего мальчиков в классе {max_male_class}') +print(f'Больше всего девочек в классе {max_female_class}') From 1a9d3bcdbe76779e4f50d51bebef7a17c7c80425 Mon Sep 17 00:00:00 2001 From: Alexey Chernykh Date: Sat, 4 Mar 2023 22:16:53 +0300 Subject: [PATCH 15/25] fixed for_challenges.py, string_challenges.py --- for_challenges.py | 2 +- string_challenges.py | 63 ++------------------------------------------ 2 files changed, 3 insertions(+), 62 deletions(-) diff --git a/for_challenges.py b/for_challenges.py index 241815e4..32d4ba09 100644 --- a/for_challenges.py +++ b/for_challenges.py @@ -63,4 +63,4 @@ def gender(male_female): ] for group, names in enumerate(groups, start=1): - print(f'Группа {group}: {", ".join(groups[names])}') \ No newline at end of file + print(f'Группа {group}: {", ".join(groups[names])}') diff --git a/string_challenges.py b/string_challenges.py index dc1adf61..3456b421 100644 --- a/string_challenges.py +++ b/string_challenges.py @@ -24,8 +24,8 @@ # Вывести первую букву каждого слова на отдельной строке sentence = 'Мы приехали в гости' -for letter in sentence.split(): - print(letter[0]) +for word in sentence.split(): + print(word[0]) # Вывести усреднённую длину слова в предложении sentence = 'Мы приехали в гости' @@ -34,62 +34,3 @@ len_word += len(word) avg_len_word = len_word / len(sentence.split()) print(avg_len_word) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - From 2c3c0603d3c686d63daf58506600c4a5395e797d Mon Sep 17 00:00:00 2001 From: Alexey Chernykh Date: Sun, 5 Mar 2023 13:49:16 +0300 Subject: [PATCH 16/25] correcting remarks code review company.py, for_dict_challenges.py --- company.py | 6 +++--- for_dict_challenges.py | 26 +++++++++++++------------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/company.py b/company.py index 75791b96..c4fa3566 100644 --- a/company.py +++ b/company.py @@ -53,13 +53,13 @@ for department in departments: for employer in department['employers']: if employer['salary_rub'] > task_salary: - print(f'Заработная плата {employer["first_name"]} превышает {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}К') + print(f'Заработная плата {employer["position"]} ниже {task_salary}') for department in departments: # task 6 department_salary = 0 @@ -98,7 +98,7 @@ for employer in department['employers']: if employer['salary_rub'] > task_salary: salary_cap.append(employer["position"]) -print(f'{", ".join(salary_cap)} получают больше {task_salary}К') +print(f'{", ".join(salary_cap)} получают больше {task_salary}') girls = ['Michelle', 'Nicole', 'Christina', 'Caitlin'] # task 11 for department in departments: diff --git a/for_dict_challenges.py b/for_dict_challenges.py index 7568e93f..e21a5965 100644 --- a/for_dict_challenges.py +++ b/for_dict_challenges.py @@ -126,28 +126,28 @@ def max_name(students): 'Миша': True, } -max_male_class = '' -max_female_class = '' +max_male_class = None +max_female_class = None max_male_gender = 0 max_female_gender = 0 -for students in school: +for class_num in school: male_gender = 0 female_gender = 0 - for name in students['students']: + for name in class_num['students']: if is_male.get(name['first_name']): male_gender += 1 else: female_gender += 1 - if male_gender > female_gender: - max_male_gender = male_gender - max_male_class = str(students["class"]) - if male_gender > max_male_gender: - max_male_gende = male_gender - else: + if male_gender > female_gender: + max_male_gender = male_gender + max_male_class = class_num["class"] + if male_gender > max_male_gender: + max_male_gende = male_gender + else: + max_female_gender = female_gender + max_female_class = class_num["class"] + if female_gender > max_female_gender: max_female_gender = female_gender - max_female_class = str(students["class"]) - if female_gender > max_female_gender: - max_female_gender = female_gender print(f'Больше всего мальчиков в классе {max_male_class}') print(f'Больше всего девочек в классе {max_female_class}') From 0563d48958605bd14513cb8a78e12b763e561e10 Mon Sep 17 00:00:00 2001 From: Alexey Chernykh Date: Mon, 6 Mar 2023 19:33:54 +0300 Subject: [PATCH 17/25] add task 13, 14 company --- company_add_tasks.py | 87 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 company_add_tasks.py diff --git a/company_add_tasks.py b/company_add_tasks.py new file mode 100644 index 00000000..03c4124d --- /dev/null +++ b/company_add_tasks.py @@ -0,0 +1,87 @@ +""" +В этот раз у нас есть компания, в ней отделы, в отделах люди. У людей есть имя, должность и зарплата. +Ваши задачи такие: + +Третий уровень: +Теперь вам пригодится ещё список taxes, в котором хранится информация о налогах на сотрудников из разных департаметов. +Если department None, значит, этот налог применяется ко всем сотрудникам компании. +Иначе он применяется только к сотрудникам департмента, название которого совпадает с тем, что записано по ключу department. +К одному сотруднику может применяться несколько налогов. + +13. Вывести список отделов с суммарным налогом на сотрудников этого отдела. +14. Вывести список всех сотредников с указанием зарплаты "на руки" и зарплаты с учётом налогов. +15. Вывести список отделов с указанием месячной налоговой нагрузки – количеством денег, которые в месяц этот отдел платит налогами. +16. Вывести список отделов, отсортированный по месячной налоговой нагрузке. +17. Вывести всех сотрудников, за которых компания платит больше 100к налогов в год. +18. Вывести имя и фамилию сотрудника, за которого компания платит меньше всего налогов. +""" + +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. Вывести список отделов с суммарным налогом на сотрудников этого отдела. + +tax_departments = {} +for department in departments: + department_salary = [] + for employer in department['employers']: + department_salary.append(employer['salary_rub']) + if department["title"] == 'IT department': + tax_sum = sum(department_salary) * (taxes[0]["value_percents"] + taxes[1]["value_percents"]) / 100 + tax_departments["department"] = department["title"] + tax_departments["tax"] = tax_sum + else: + tax_sum = sum(department_salary) * (taxes[0]["value_percents"] / 100) + tax_departments["department"] = department["title"] + tax_departments["tax"] = tax_sum + print(f'По {tax_departments["department"]} суммарный налог на сотрудников равен {tax_departments["tax"]}') + +# task 14. Вывести список всех сотрудников с указанием зарплаты "на руки" и зарплаты с учётом налогов. + +tax_departments = {} +for department in departments: + for employer in department['employers']: + if department["title"] == 'IT department': + employer_tax = employer['salary_rub'] * (taxes[0]["value_percents"] + taxes[1]["value_percents"]) / 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"]}') + else: + employer_tax = employer['salary_rub'] * taxes[0]["value_percents"] / 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. Вывести список отделов, отсортированный по месячной налоговой нагрузке. + +# task 17. Вывести всех сотрудников, за которых компания платит больше 100к налогов в год. + +# task 18. Вывести имя и фамилию сотрудника, за которого компания платит меньше всего налогов. From f4da86c5cc12fe796f3fc81d40ad58166ba61212 Mon Sep 17 00:00:00 2001 From: Alexey Chernykh Date: Thu, 9 Mar 2023 20:20:35 +0300 Subject: [PATCH 18/25] correcting task 13, add functions --- company_add_tasks.py | 59 +++++++++++++++++++++++++++++++++----------- 1 file changed, 45 insertions(+), 14 deletions(-) diff --git a/company_add_tasks.py b/company_add_tasks.py index 03c4124d..7a2b1fb1 100644 --- a/company_add_tasks.py +++ b/company_add_tasks.py @@ -45,20 +45,51 @@ # task 13. Вывести список отделов с суммарным налогом на сотрудников этого отдела. -tax_departments = {} -for department in departments: - department_salary = [] - for employer in department['employers']: - department_salary.append(employer['salary_rub']) - if department["title"] == 'IT department': - tax_sum = sum(department_salary) * (taxes[0]["value_percents"] + taxes[1]["value_percents"]) / 100 - tax_departments["department"] = department["title"] - tax_departments["tax"] = tax_sum - else: - tax_sum = sum(department_salary) * (taxes[0]["value_percents"] / 100) - tax_departments["department"] = department["title"] - tax_departments["tax"] = tax_sum - print(f'По {tax_departments["department"]} суммарный налог на сотрудников равен {tax_departments["tax"]}') +def departments_salary(departments): + departments_salary = {} + for department in departments: + salary_lst = [] + for employer in department["employers"]: + salary_lst.append(employer["salary_rub"]) + departments_salary[department["title"]] = sum(salary_lst) + return departments_salary + + +def departments_tax_rate(taxes, departments): + taxes_for_department = {} + + for tax in taxes: + taxes_for_department[tax["department"]] = tax["value_percents"] / 100 + + taxes_for_department["All"] = taxes_for_department.pop(None) + + department_taxes = {} + departments_lst = [department["title"] for department in departments] + + for department in departments_lst: + dep_tax = [] + if True: + dep_tax.append(taxes_for_department.get(department)) + dep_tax.append(taxes_for_department.get("All")) + if None in dep_tax: + dep_tax.remove(None) + department_taxes[department] = sum(dep_tax) + else: + dep_tax.append(tax_dict.get("All")) + department_taxes[department] = sum(dep_tax) + return department_taxes + + +def department_tax_burden(departments_salary, department_taxes): + for department in departments_salary: + tax_burden = departments_salary.get(department) * department_taxes.get(department) + print(f'По {department} суммарный налог на сотрудников равен {tax_burden}') + + +if __name__ == "__main__": + dep_sal = departments_salary(departments) + dep_tax = departments_tax_rate(taxes, departments) + print(department_tax_burden(dep_sal, dep_tax)) # task 14. Вывести список всех сотрудников с указанием зарплаты "на руки" и зарплаты с учётом налогов. From 9b7131cec11dc46b29bc9fd24e239e9ca5149c10 Mon Sep 17 00:00:00 2001 From: Alexey Chernykh Date: Sat, 11 Mar 2023 20:05:41 +0300 Subject: [PATCH 19/25] fixed 13, 14 tasks --- company_add_tasks.py | 80 +++++++++++++++++++++----------------------- 1 file changed, 39 insertions(+), 41 deletions(-) diff --git a/company_add_tasks.py b/company_add_tasks.py index 7a2b1fb1..90daf71d 100644 --- a/company_add_tasks.py +++ b/company_add_tasks.py @@ -15,6 +15,7 @@ 17. Вывести всех сотрудников, за которых компания платит больше 100к налогов в год. 18. Вывести имя и фамилию сотрудника, за которого компания платит меньше всего налогов. """ +import operator departments = [ { @@ -44,73 +45,70 @@ ] # task 13. Вывести список отделов с суммарным налогом на сотрудников этого отдела. - -def departments_salary(departments): +def generating_departments_salaries(departments): departments_salary = {} for department in departments: - salary_lst = [] + salary = [] for employer in department["employers"]: - salary_lst.append(employer["salary_rub"]) - departments_salary[department["title"]] = sum(salary_lst) + salary.append(employer["salary_rub"]) + departments_salary[department["title"]] = sum(salary) return departments_salary -def departments_tax_rate(taxes, departments): +def get_departments_tax_rate(taxes, departments): taxes_for_department = {} - for tax in taxes: - taxes_for_department[tax["department"]] = tax["value_percents"] / 100 - - taxes_for_department["All"] = taxes_for_department.pop(None) + if tax["department"] != None: + taxes_for_department[tax["department"]] = tax["value_percents"] / 100 + else: + tax_for_all_departments = tax["value_percents"] / 100 department_taxes = {} - departments_lst = [department["title"] for department in departments] - - for department in departments_lst: - dep_tax = [] - if True: - dep_tax.append(taxes_for_department.get(department)) - dep_tax.append(taxes_for_department.get("All")) - if None in dep_tax: - dep_tax.remove(None) - department_taxes[department] = sum(dep_tax) + 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: - dep_tax.append(tax_dict.get("All")) - department_taxes[department] = sum(dep_tax) + tax.append(tax_for_all_departments) + department_taxes[department] = sum(tax) return department_taxes -def department_tax_burden(departments_salary, 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) - print(f'По {department} суммарный налог на сотрудников равен {tax_burden}') + departments_tax_burden[department] = tax_burden + for department, tax_burden in departments_tax_burden.items(): + print(f'По {department} суммарный налог на сотрудников равен {tax_burden}') -if __name__ == "__main__": - dep_sal = departments_salary(departments) - dep_tax = departments_tax_rate(taxes, departments) - print(department_tax_burden(dep_sal, dep_tax)) # task 14. Вывести список всех сотрудников с указанием зарплаты "на руки" и зарплаты с учётом налогов. - -tax_departments = {} -for department in departments: - for employer in department['employers']: - if department["title"] == 'IT department': - employer_tax = employer['salary_rub'] * (taxes[0]["value_percents"] + taxes[1]["value_percents"]) / 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"]}') - else: - employer_tax = employer['salary_rub'] * taxes[0]["value_percents"] / 100 +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.get(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"]}') + +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 + + # task 16. Вывести список отделов, отсортированный по месячной налоговой нагрузке. # task 17. Вывести всех сотрудников, за которых компания платит больше 100к налогов в год. From 0b79ba60e766b2e5a39e84275113bffa4764f405 Mon Sep 17 00:00:00 2001 From: Alexey Chernykh Date: Sat, 18 Mar 2023 20:21:03 +0300 Subject: [PATCH 20/25] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=20=D0=B7=D0=B0=D0=BC=D0=B5=D1=87=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D1=8F,=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB=20=D1=80?= =?UTF-8?q?=D0=B5=D1=88=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=B7=D0=B0=D0=B4=D0=B0?= =?UTF-8?q?=D1=87=2016,17,18?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- company_add_tasks.py | 61 ++++++++++++++++++++++++++++++++++++-------- 1 file changed, 50 insertions(+), 11 deletions(-) diff --git a/company_add_tasks.py b/company_add_tasks.py index 90daf71d..de8ea41e 100644 --- a/company_add_tasks.py +++ b/company_add_tasks.py @@ -48,17 +48,17 @@ def generating_departments_salaries(departments): departments_salary = {} for department in departments: - salary = [] + department_salaries = [] for employer in department["employers"]: - salary.append(employer["salary_rub"]) - departments_salary[department["title"]] = sum(salary) + 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"] != None: + if tax["department"] is not None: taxes_for_department[tax["department"]] = tax["value_percents"] / 100 else: tax_for_all_departments = tax["value_percents"] / 100 @@ -94,7 +94,7 @@ 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.get(department["title"])) / 100 + 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)}') @@ -102,15 +102,54 @@ def calculate_employers_salaries(departments): f' {employer["salary_rub"]}') -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 +# 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 + sorted_departments_total_taxes = dict(sorted(departments_total_taxes.items(), key=lambda item: item[1], + reverse=True)) + departments_names_by_total_taxes = [department_name for department_name in sorted_departments_total_taxes] + for department_name in departments_names_by_total_taxes: + print(department_name) -# task 16. Вывести список отделов, отсортированный по месячной налоговой нагрузке. # 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"] + employers_taxes["last_name"] = employer["last_name"] + employers_taxes["year_tax"] = employer_year_tax + employers_taxes_list.append(employers_taxes) + + sorted_list_of_employers_tax = sorted(employers_taxes_list, key=lambda x: x["year_tax"], reverse=True) + + return sorted_list_of_employers_tax[0]["first_name"], sorted_list_of_employers_tax[0]["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 From 7598ae9642e711ddb6789a308bb6d4e4c5620a90 Mon Sep 17 00:00:00 2001 From: Alexey Chernykh Date: Sat, 18 Mar 2023 21:34:28 +0300 Subject: [PATCH 21/25] =?UTF-8?q?=D0=A0=D0=B5=D1=88=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=201=20=D0=B7=D0=B0=D0=B4=D0=B0=D1=87=D0=B8=20=D0=B2=20fo?= =?UTF-8?q?r=5Fdict=5Fchallenges=5Fbonus.py?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- for_dict_challenges_bonus.py | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/for_dict_challenges_bonus.py b/for_dict_challenges_bonus.py index c48db990..652a6bad 100644 --- a/for_dict_challenges_bonus.py +++ b/for_dict_challenges_bonus.py @@ -1,5 +1,6 @@ """ -Пожалуйста, приступайте к этой задаче после того, как вы сделали и получили ревью ко всем остальным задачам +Пожалуйста, +приступайте к этой задаче после того, как вы сделали и получили ревью ко всем остальным задачам в этом репозитории. Она значительно сложнее. @@ -55,5 +56,29 @@ def generate_chat_history(): return messages +# 1. Вывести айди пользователя, который написал больше всех сообщений. +def is_user_with_max_messages(messages): + id_list = [] + for message in messages: + id_list.append(message["sent_by"]) + uniq_id_list = list(set(id_list)) + + count_of_message_id = {} + for id_uniq in uniq_id_list: + counter = 0 + for id in id_list: + if id_uniq == id: + counter += 1 + count_of_message_id[id_uniq] = counter + + count_of_message_id_sorted = dict(sorted(count_of_message_id.items(), key=lambda item: item[1], reverse=True)) + count_of_message_id_sorted_list = [id for id in count_of_message_id_sorted] + return count_of_message_id_sorted_list[0] + + if __name__ == "__main__": - print(generate_chat_history()) + messages = generate_chat_history() + print(is_user_with_max_messages(messages)) + + + From fb5366df846767aa49a88b413d0630fe913dbd27 Mon Sep 17 00:00:00 2001 From: Alexey Chernykh Date: Sun, 19 Mar 2023 09:04:10 +0300 Subject: [PATCH 22/25] =?UTF-8?q?=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=B7=D0=B0=D0=BC=D0=B5=D1=87?= =?UTF-8?q?=D0=B0=D0=BD=D0=B8=D0=B9=20review?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- company_add_tasks.py | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/company_add_tasks.py b/company_add_tasks.py index de8ea41e..a4d2ae11 100644 --- a/company_add_tasks.py +++ b/company_add_tasks.py @@ -109,9 +109,12 @@ def output_departments_name_by_total_taxes(departments_salary, department_taxes) tax_burden = departments_salary.get(department) * department_taxes.get(department) departments_total_taxes[department] = tax_burden - sorted_departments_total_taxes = dict(sorted(departments_total_taxes.items(), key=lambda item: item[1], - reverse=True)) - departments_names_by_total_taxes = [department_name for department_name in sorted_departments_total_taxes] + departments_names_by_total_taxes = list(sorted( + departments_total_taxes, + key=departments_total_taxes.get, + reverse=True, + )) + for department_name in departments_names_by_total_taxes: print(department_name) @@ -124,7 +127,7 @@ def output_employers_over_option_tax(departments, option_sum_of_tax): 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} тысяч налогов в год') + f'{option_sum_of_tax // 1000} тысяч налогов в год') # task 18. Вывести имя и фамилию сотрудника, за которого компания платит меньше всего налогов. @@ -135,14 +138,16 @@ def get_employer_with_max_tax(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"] - employers_taxes["last_name"] = employer["last_name"] - employers_taxes["year_tax"] = employer_year_tax + employers_taxes = { + "first_name": employer["first_name"], + "last_name": employer["last_name"], + "year_tax": employer_year_tax, + } employers_taxes_list.append(employers_taxes) - sorted_list_of_employers_tax = sorted(employers_taxes_list, key=lambda x: x["year_tax"], reverse=True) + employer_with_max_tax = max(employers_taxes_list, key=lambda x: x["year_tax"]) - return sorted_list_of_employers_tax[0]["first_name"], sorted_list_of_employers_tax[0]["last_name"] + return employer_with_max_tax.get("first_name"), employer_with_max_tax.get("last_name") if __name__ == "__main__": From 191c91530e5748972dd90ee6a8a3d5f1c40a86bd Mon Sep 17 00:00:00 2001 From: Alexey Chernykh Date: Sun, 19 Mar 2023 19:45:34 +0300 Subject: [PATCH 23/25] =?UTF-8?q?=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=B7=D0=B0=D0=BC=D0=B5=D1=87?= =?UTF-8?q?=D0=B0=D0=BD=D0=B8=D0=B9,=20=D0=BD=D0=B5=D0=BC=D0=BD=D0=BE?= =?UTF-8?q?=D0=B3=D0=BE=20=D0=BF=D0=BE=D0=BC=D0=B5=D0=BD=D1=8F=D0=BB=20?= =?UTF-8?q?=D0=B0=D0=BB=D0=B3=D0=BE=D1=80=D0=B8=D1=82=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- for_dict_challenges_bonus.py | 37 +++++++++++++++++++----------------- 1 file changed, 20 insertions(+), 17 deletions(-) diff --git a/for_dict_challenges_bonus.py b/for_dict_challenges_bonus.py index 652a6bad..11f65614 100644 --- a/for_dict_challenges_bonus.py +++ b/for_dict_challenges_bonus.py @@ -58,27 +58,30 @@ def generate_chat_history(): # 1. Вывести айди пользователя, который написал больше всех сообщений. def is_user_with_max_messages(messages): - id_list = [] + # 1. Generate a list of unique id of users who have sent messages + user_id_list_who_sent_messages = [] for message in messages: - id_list.append(message["sent_by"]) - uniq_id_list = list(set(id_list)) - - count_of_message_id = {} - for id_uniq in uniq_id_list: - counter = 0 - for id in id_list: - if id_uniq == id: - counter += 1 - count_of_message_id[id_uniq] = counter + user_id_list_who_sent_messages.append(message["sent_by"]) + unique_user_id_list_who_sent_messages = list(set(user_id_list_who_sent_messages)) + + # 2. Generate a list of dictionaries with user id and sum of messages sent by them + user_id_sum_of_messages = [] + for user_id in unique_user_id_list_who_sent_messages: + user_id_sum_of_messages.append({ + "user_id": user_id_list_who_sent_messages.count(user_id), + }) - count_of_message_id_sorted = dict(sorted(count_of_message_id.items(), key=lambda item: item[1], reverse=True)) - count_of_message_id_sorted_list = [id for id in count_of_message_id_sorted] - return count_of_message_id_sorted_list[0] + # 3. Put in a variable the user with the maximum number of messages sent + user_with_max_messages = max(user_id_sum_of_messages, key=lambda x: x["user_id"]) + return user_with_max_messages -if __name__ == "__main__": - messages = generate_chat_history() - print(is_user_with_max_messages(messages)) +# 2. Вывести айди пользователя, на сообщения которого больше всего отвечали. +def is_user_with_max_reply_messages(messages): + pass +if __name__ == "__main__": + messages = generate_chat_history() + print(is_user_with_max_messages(messages)['user_id']) From 3cc58b36fb637a86e4721ad28af4c7cabb334bcd Mon Sep 17 00:00:00 2001 From: Alexey Chernykh Date: Tue, 21 Mar 2023 19:15:59 +0300 Subject: [PATCH 24/25] fixing the mistakes according to the comments --- company_add_tasks.py | 6 +++--- for_dict_challenges_bonus.py | 21 ++++++++++++++------- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/company_add_tasks.py b/company_add_tasks.py index a4d2ae11..54e18d54 100644 --- a/company_add_tasks.py +++ b/company_add_tasks.py @@ -109,11 +109,11 @@ def output_departments_name_by_total_taxes(departments_salary, department_taxes) tax_burden = departments_salary.get(department) * department_taxes.get(department) departments_total_taxes[department] = tax_burden - departments_names_by_total_taxes = list(sorted( + 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) @@ -147,7 +147,7 @@ def get_employer_with_max_tax(departments): employer_with_max_tax = max(employers_taxes_list, key=lambda x: x["year_tax"]) - return employer_with_max_tax.get("first_name"), employer_with_max_tax.get("last_name") + return employer_with_max_tax["first_name"], employer_with_max_tax["last_name"] if __name__ == "__main__": diff --git a/for_dict_challenges_bonus.py b/for_dict_challenges_bonus.py index 11f65614..ea6f8cdc 100644 --- a/for_dict_challenges_bonus.py +++ b/for_dict_challenges_bonus.py @@ -55,7 +55,6 @@ def generate_chat_history(): }) return messages - # 1. Вывести айди пользователя, который написал больше всех сообщений. def is_user_with_max_messages(messages): # 1. Generate a list of unique id of users who have sent messages @@ -64,17 +63,25 @@ def is_user_with_max_messages(messages): user_id_list_who_sent_messages.append(message["sent_by"]) unique_user_id_list_who_sent_messages = list(set(user_id_list_who_sent_messages)) - # 2. Generate a list of dictionaries with user id and sum of messages sent by them + # 2. Generate a list of dictionaries with users id and sum of messages sent by them user_id_sum_of_messages = [] for user_id in unique_user_id_list_who_sent_messages: user_id_sum_of_messages.append({ - "user_id": user_id_list_who_sent_messages.count(user_id), + "user_id": user_id, + "sum_of_messages_sent_by": user_id_list_who_sent_messages.count(user_id), }) - # 3. Put in a variable the user with the maximum number of messages sent - user_with_max_messages = max(user_id_sum_of_messages, key=lambda x: x["user_id"]) + # 3. Find the maximum number of messages sent + max_sum_of_messages_sent_by = max(user_id_sum_of_messages, key=lambda x: x['sum_of_messages_sent_by'])[ + 'sum_of_messages_sent_by'] + + # 4. Making a list of the users id with the maximum number of messages + users_id_with_max_messages = [] + for user_id in user_id_sum_of_messages: + if user_id['sum_of_messages_sent_by'] == max_sum_of_messages_sent_by: + users_id_with_max_messages.append(user_id['user_id']) - return user_with_max_messages + return users_id_with_max_messages # 2. Вывести айди пользователя, на сообщения которого больше всего отвечали. @@ -84,4 +91,4 @@ def is_user_with_max_reply_messages(messages): if __name__ == "__main__": messages = generate_chat_history() - print(is_user_with_max_messages(messages)['user_id']) + print(is_user_with_max_messages(messages)) From 3aa9ea868435393ba172e0b8c583b10f93e0a03f Mon Sep 17 00:00:00 2001 From: Alexey Chernykh Date: Mon, 27 Mar 2023 18:44:05 +0300 Subject: [PATCH 25/25] =?UTF-8?q?=D0=A0=D0=B5=D1=88=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=202=20=D0=B7=D0=B0=D0=B4=D0=B0=D1=87=D0=B8=20\for=5Fdict?= =?UTF-8?q?=5Fchallenges=5Fbonus.py?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- for_dict_challenges_bonus.py | 38 ++++++++++++++++++++++++++++++++++-- 1 file changed, 36 insertions(+), 2 deletions(-) diff --git a/for_dict_challenges_bonus.py b/for_dict_challenges_bonus.py index ea6f8cdc..909964a2 100644 --- a/for_dict_challenges_bonus.py +++ b/for_dict_challenges_bonus.py @@ -86,9 +86,43 @@ def is_user_with_max_messages(messages): # 2. Вывести айди пользователя, на сообщения которого больше всего отвечали. def is_user_with_max_reply_messages(messages): - pass - + # 1. Формируем список id сообщений на которые отвечали -> уникальные + messages_id_that_were_replied = [] + for message in messages: + if message["reply_for"] != [] and message["reply_for"] is not None: + messages_id_that_were_replied.append(message["reply_for"]) + + unique_messages_id_that_were_replied = set(messages_id_that_were_replied) + + # 2. Формируем список словарей: id сообщения, кол-во сообщений-ответов на это сообщение + messages_id_that_were_replied_with_sum_of_answers = [] + for message_id in unique_messages_id_that_were_replied: + messages_id_that_were_replied_with_sum_of_answers.append({ + "message_id": message_id, + "number_of_answers": messages_id_that_were_replied.count(message_id), + }) + print(messages_id_that_were_replied_with_sum_of_answers) + + # 3. Выводим id сообщения с максимальным количеством ответов на него + message_id_with_max_sum_of_answers = max(messages_id_that_were_replied_with_sum_of_answers, key=lambda x: x[ + "number_of_answers"]) + print(f'айди сообщения sum = {message_id_with_max_sum_of_answers}') + + # 4. Кладем в пременную id сообщения с максимальным количеством ответов на него + message_id_with_max_sum_of_answers_var = message_id_with_max_sum_of_answers['message_id'] + print(f'айди сообщения = {message_id_with_max_sum_of_answers_var}') + + # 5. Формируем словарь из id сообщений и id пользователей-отправителей этих сообщений + messages_id_and_users_id_sent_by = {} + for message in messages: + messages_id_and_users_id_sent_by[message["id"]] = message["sent_by"] + print(f'Словарь = {messages_id_and_users_id_sent_by}') + + # 6. Выводим id пользователя на сообщения которого больше всего отвечали + + return messages_id_and_users_id_sent_by[message_id_with_max_sum_of_answers_var] if __name__ == "__main__": messages = generate_chat_history() print(is_user_with_max_messages(messages)) + print(is_user_with_max_reply_messages(messages)) \ No newline at end of file