From cac1a2f478dc1a2f8e78618080040e23a6a8dead Mon Sep 17 00:00:00 2001 From: Hugo Date: Mon, 13 Sep 2021 16:21:55 +0300 Subject: [PATCH 1/7] work with exersises --- .gitignore | 4 ++ for_challenges.py | 15 ++++-- for_dict_challenges.py | 108 ++++++++++++++++++++++++++++++----------- setup.cfg | 34 +++++++++++++ string_challenges.py | 27 +++++++---- 5 files changed, 147 insertions(+), 41 deletions(-) create mode 100644 .gitignore create mode 100644 setup.cfg diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..8b37c5d7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +env +.env +.vscode +.DS_Store \ No newline at end of file diff --git a/for_challenges.py b/for_challenges.py index 997754da..b43a3e0f 100644 --- a/for_challenges.py +++ b/for_challenges.py @@ -2,7 +2,8 @@ # Необходимо вывести имена всех учеников из списка с новой строки names = ['Оля', 'Петя', 'Вася', 'Маша'] -# ??? +for name in names: + print(name) # Задание 2 @@ -12,7 +13,8 @@ # Петя: 4 names = ['Оля', 'Петя', 'Вася', 'Маша'] -# ??? +for name in names: + print(f'{name}: {len(name)}') # Задание 3 @@ -25,7 +27,8 @@ 'Маша': False, } names = ['Оля', 'Петя', 'Вася', 'Маша'] -# ??? +for name in names: + print(f"{name}: {'мужской' if is_male[name] else 'женский'}") # Задание 4 @@ -40,7 +43,8 @@ ['Вася', 'Маша', 'Саша', 'Женя'], ['Оля', 'Петя', 'Гриша'], ] -# ??? +for (index, group) in enumerate(groups): + print(f'Группа {index + 1}: {len(group)} ученика') # Задание 5 @@ -54,4 +58,5 @@ ['Оля', 'Петя', 'Гриша'], ['Вася', 'Маша', 'Саша', 'Женя'], ] -# ??? \ No newline at end of file +for (index, group) in enumerate(groups): + print(f'Группа {index + 1}: ' + ', '.join(group)) diff --git a/for_dict_challenges.py b/for_dict_challenges.py index 96062ebc..85730d2e 100644 --- a/for_dict_challenges.py +++ b/for_dict_challenges.py @@ -1,3 +1,28 @@ +from typing import Any, Dict, List + + +def generate_name_list(input_lst: List[Any]) -> list: + return [student['first_name'] for student in input_lst if 'first_name' in student] + + +def get_max_count_name(input_lst: List[Any]) -> str: + names = generate_name_list(input_lst) + count_names: Dict[str, Any] = {name: names.count(name) for name in set(names)} + return max(count_names, key=count_names.get()) + + +def get_gender_count(input_lst: list) -> dict: + names = generate_name_list(input_lst) + gender_dict = {'male': 0, 'female': 0} + for name in names: + if not (name in is_male.keys()): + continue + if is_male[name]: + gender_dict['male'] += 1 + else: + gender_dict['female'] += 1 + return gender_dict + # Задание 1 # Дан список учеников, нужно посчитать количество повторений каждого имени ученика # Пример вывода: @@ -5,6 +30,7 @@ # Маша: 2 # Петя: 2 + students = [ {'first_name': 'Вася'}, {'first_name': 'Петя'}, @@ -12,7 +38,12 @@ {'first_name': 'Маша'}, {'first_name': 'Петя'}, ] -# ??? + +names = generate_name_list(students) + + +for name in set(names): + print(f'{name}: {names.count(name)}') # Задание 2 @@ -26,7 +57,8 @@ {'first_name': 'Маша'}, {'first_name': 'Оля'}, ] -# ??? +max_count_name = generate_name_list(students) +print(f'Самое частое имя среди учеников {max_count_name}') # Задание 3 @@ -44,26 +76,30 @@ {'first_name': 'Маша'}, {'first_name': 'Маша'}, {'first_name': 'Оля'}, - ],[ # это – третий класс + ], + [ # это – третий класс {'first_name': 'Женя'}, {'first_name': 'Петя'}, {'first_name': 'Женя'}, {'first_name': 'Саша'}, ], ] -# ??? +for (index, students) in enumerate(school_students): + max_count_name = get_max_count_name(students) + print(f'Самое частое имя в классе {index + 1}: {max_count_name}') -# Задание 4 -# Для каждого класса нужно вывести количество девочек и мальчиков в нём. -# Пример вывода: -# Класс 2a: девочки 2, мальчики 0 -# Класс 2б: девочки 0, мальчики 2 + +# # Задание 4 +# # Для каждого класса нужно вывести количество девочек и мальчиков в нём. +# # Пример вывода: +# # Класс 2a: девочки 2, мальчики 0 +# # Класс 2б: девочки 0, мальчики 2 school = [ {'class': '2a', 'students': [{'first_name': 'Маша'}, {'first_name': 'Оля'}]}, {'class': '2б', 'students': [{'first_name': 'Олег'}, {'first_name': 'Миша'}]}, - {'class': '2б', 'students': [{'first_name': 'Даша'}, {'first_name': 'Олег'}, {'first_name': 'Маша'}]}, + {'class': '2в', 'students': [{'first_name': 'Даша'}, {'first_name': 'Олег'}, {'first_name': 'Маша'}]}, ] is_male = { 'Олег': True, @@ -72,24 +108,42 @@ 'Миша': True, 'Даша': False, } -# ??? +for cls in school: + if not ('students' in cls.keys()): + continue + gender_dict = get_gender_count(cls['students']) + print(f"Класс {cls['class']}: девочки {gender_dict['female']}, мальчики {gender_dict['male']}") -# Задание 5 -# По информации о учениках разных классов нужно найти класс, в котором больше всего девочек и больше всего мальчиков -# Пример вывода: -# Больше всего мальчиков в классе 3c -# Больше всего девочек в классе 2a -school = [ - {'class': '2a', 'students': [{'first_name': 'Маша'}, {'first_name': 'Оля'}]}, - {'class': '3c', 'students': [{'first_name': 'Олег'}, {'first_name': 'Миша'}]}, -] -is_male = { - 'Маша': False, - 'Оля': False, - 'Олег': True, - 'Миша': True, -} -# ??? +# # Задание 5 +# # По информации о учениках разных классов нужно найти класс, в котором больше всего девочек и больше всего мальчиков +# # Пример вывода: +# # Больше всего мальчиков в классе 3c +# # Больше всего девочек в классе 2a + +# school = [ +# {'class': '2a', 'students': [{'first_name': 'Маша'}, {'first_name': 'Оля'}]}, +# {'class': '3c', 'students': [{'first_name': 'Олег'}, {'first_name': 'Миша'}]}, +# ] +# is_male = { +# 'Маша': False, +# 'Оля': False, +# 'Олег': True, +# 'Миша': True, +# } + + +# count_array = [] +# for cls in school: +# if not 'students' in cls.keys(): +# continue +# gender_dict = get_gender_count(cls['students']) +# gender_dict['class'] = cls['class'] +# count_array.append(gender_dict) + +# maxMaleElem = max(count_array, key=lambda x:x['male']) +# maxFemaleElem = max(count_array, key=lambda x:x['female']) +# print(f"Больше всего мальчиков в классе {maxMaleElem['class']}") +# print(f"Больше всего девочек в классе {maxFemaleElem['class']}") diff --git a/setup.cfg b/setup.cfg new file mode 100644 index 00000000..4e17b2bc --- /dev/null +++ b/setup.cfg @@ -0,0 +1,34 @@ +[flake8] +exclude = .git, __pychache__,env,vevn +max_line_length = 120 +max-complexity = 8 + +[mypy] +python_version = 3.9 +disallow_untyped_defs = True +ignore_missing_imports = True +exclude = env.*|venv.*|.venv.* + +#ignore = E722 | игнорирова правила + +#установка доп библиотек +#pip install flake8-bugbear | доп к линтеру +#pip install flake8-builtins | подсвечивает системные переменные +#pip install pep8-naming | проверка по названию и по типу имен +#pip install flake8-commas | проверка на запятые +#pip install flake8-variables-names | проверяет имена переменных +#pip install flake8-import-order | не корректное расставление импортов + + +# в папке .vscose создаем settings.json +# { +# "python.linting.pylintEnabled": false, +# "python.linting.mypyEnabled": false, +# "python.linting.flake8Enabled": true, +# "python.linting.enabled": true +# } + + +#для аннотации типов +#https://www.youtube.com/watch?v=8MGoop99np8 +#pip install mypy \ No newline at end of file diff --git a/string_challenges.py b/string_challenges.py index 856add2d..57126c2e 100644 --- a/string_challenges.py +++ b/string_challenges.py @@ -1,28 +1,37 @@ # Вывести последнюю букву в слове word = 'Архангельск' -# ??? +print(word[-1]) # Вывести количество букв "а" в слове word = 'Архангельск' -# ??? +print(word.lower().count('а')) # Вывести количество гласных букв в слове +vowels = 'ауоыиэяюёе' +counter = 0 word = 'Архангельск' -# ??? - +for elem in word.lower(): + if elem in vowels: + counter += 1 +print(counter) # Вывести количество слов в предложении sentence = 'Мы приехали в гости' -# ??? - +print(len(sentence.split())) # Вывести первую букву каждого слова на отдельной строке sentence = 'Мы приехали в гости' -# ??? - +for elem in sentence.split(): + if len(elem) == 0: + continue + print(elem[0]) # Вывести усреднённую длину слова в предложении sentence = 'Мы приехали в гости' -# ??? \ No newline at end of file +counter = 0 +lst_words = sentence.split() +for word in lst_words: + counter += len(word) +print(counter // len(lst_words)) From 17f653c4c9294b93dc8119d82af6b990711dec56 Mon Sep 17 00:00:00 2001 From: Hugo Date: Mon, 13 Sep 2021 16:36:05 +0300 Subject: [PATCH 2/7] a little fix --- for_dict_challenges.py | 60 +++++++++++++++++++++--------------------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/for_dict_challenges.py b/for_dict_challenges.py index 85730d2e..8844b958 100644 --- a/for_dict_challenges.py +++ b/for_dict_challenges.py @@ -1,14 +1,14 @@ -from typing import Any, Dict, List +from typing import Any, List def generate_name_list(input_lst: List[Any]) -> list: return [student['first_name'] for student in input_lst if 'first_name' in student] -def get_max_count_name(input_lst: List[Any]) -> str: +def get_max_count_name(input_lst: List[Any]) -> int: names = generate_name_list(input_lst) - count_names: Dict[str, Any] = {name: names.count(name) for name in set(names)} - return max(count_names, key=count_names.get()) + count_names: dict = {name: names.count(name) for name in set(names)} + return max(count_names, key=count_names.get) def get_gender_count(input_lst: list) -> dict: @@ -47,7 +47,7 @@ def get_gender_count(input_lst: list) -> dict: # Задание 2 -# Дан список учеников, нужно вывести самое часто повторящееся имя +# Дан список учеников, нужно вывести самое часто повторяющееся имя # Пример вывода: # Самое частое имя среди учеников: Маша students = [ @@ -122,28 +122,28 @@ def get_gender_count(input_lst: list) -> dict: # # Больше всего мальчиков в классе 3c # # Больше всего девочек в классе 2a -# school = [ -# {'class': '2a', 'students': [{'first_name': 'Маша'}, {'first_name': 'Оля'}]}, -# {'class': '3c', 'students': [{'first_name': 'Олег'}, {'first_name': 'Миша'}]}, -# ] -# is_male = { -# 'Маша': False, -# 'Оля': False, -# 'Олег': True, -# 'Миша': True, -# } - - -# count_array = [] -# for cls in school: -# if not 'students' in cls.keys(): -# continue -# gender_dict = get_gender_count(cls['students']) -# gender_dict['class'] = cls['class'] -# count_array.append(gender_dict) - -# maxMaleElem = max(count_array, key=lambda x:x['male']) -# maxFemaleElem = max(count_array, key=lambda x:x['female']) - -# print(f"Больше всего мальчиков в классе {maxMaleElem['class']}") -# print(f"Больше всего девочек в классе {maxFemaleElem['class']}") +school = [ + {'class': '2a', 'students': [{'first_name': 'Маша'}, {'first_name': 'Оля'}]}, + {'class': '3c', 'students': [{'first_name': 'Олег'}, {'first_name': 'Миша'}]}, +] + +is_male = { + 'Маша': False, + 'Оля': False, + 'Олег': True, + 'Миша': True, +} + +count_array = [] +for cls in school: + if not ('students' in cls.keys()): + continue + gender_dict = get_gender_count(cls['students']) + gender_dict['class'] = cls['class'] + count_array.append(gender_dict) + + max_male_elem = max(count_array, key=lambda x: x['male']) + max_female_elem = max(count_array, key=lambda x: x['female']) + + print(f"Больше всего мальчиков в классе {max_male_elem['class']}") + print(f"Больше всего девочек в классе {max_female_elem['class']}") From 405bd7e70f738df12cb1ea07e240898f45f8e4a1 Mon Sep 17 00:00:00 2001 From: Hugo Date: Tue, 14 Sep 2021 08:39:44 +0300 Subject: [PATCH 3/7] update project --- for_challenges.py | 15 ++---- for_dict_challenges.py | 102 ++++++++++------------------------------- string_challenges.py | 27 ++++------- 3 files changed, 38 insertions(+), 106 deletions(-) diff --git a/for_challenges.py b/for_challenges.py index b43a3e0f..997754da 100644 --- a/for_challenges.py +++ b/for_challenges.py @@ -2,8 +2,7 @@ # Необходимо вывести имена всех учеников из списка с новой строки names = ['Оля', 'Петя', 'Вася', 'Маша'] -for name in names: - print(name) +# ??? # Задание 2 @@ -13,8 +12,7 @@ # Петя: 4 names = ['Оля', 'Петя', 'Вася', 'Маша'] -for name in names: - print(f'{name}: {len(name)}') +# ??? # Задание 3 @@ -27,8 +25,7 @@ 'Маша': False, } names = ['Оля', 'Петя', 'Вася', 'Маша'] -for name in names: - print(f"{name}: {'мужской' if is_male[name] else 'женский'}") +# ??? # Задание 4 @@ -43,8 +40,7 @@ ['Вася', 'Маша', 'Саша', 'Женя'], ['Оля', 'Петя', 'Гриша'], ] -for (index, group) in enumerate(groups): - print(f'Группа {index + 1}: {len(group)} ученика') +# ??? # Задание 5 @@ -58,5 +54,4 @@ ['Оля', 'Петя', 'Гриша'], ['Вася', 'Маша', 'Саша', 'Женя'], ] -for (index, group) in enumerate(groups): - print(f'Группа {index + 1}: ' + ', '.join(group)) +# ??? \ No newline at end of file diff --git a/for_dict_challenges.py b/for_dict_challenges.py index 8844b958..96062ebc 100644 --- a/for_dict_challenges.py +++ b/for_dict_challenges.py @@ -1,28 +1,3 @@ -from typing import Any, List - - -def generate_name_list(input_lst: List[Any]) -> list: - return [student['first_name'] for student in input_lst if 'first_name' in student] - - -def get_max_count_name(input_lst: List[Any]) -> int: - names = generate_name_list(input_lst) - count_names: dict = {name: names.count(name) for name in set(names)} - return max(count_names, key=count_names.get) - - -def get_gender_count(input_lst: list) -> dict: - names = generate_name_list(input_lst) - gender_dict = {'male': 0, 'female': 0} - for name in names: - if not (name in is_male.keys()): - continue - if is_male[name]: - gender_dict['male'] += 1 - else: - gender_dict['female'] += 1 - return gender_dict - # Задание 1 # Дан список учеников, нужно посчитать количество повторений каждого имени ученика # Пример вывода: @@ -30,7 +5,6 @@ def get_gender_count(input_lst: list) -> dict: # Маша: 2 # Петя: 2 - students = [ {'first_name': 'Вася'}, {'first_name': 'Петя'}, @@ -38,16 +12,11 @@ def get_gender_count(input_lst: list) -> dict: {'first_name': 'Маша'}, {'first_name': 'Петя'}, ] - -names = generate_name_list(students) - - -for name in set(names): - print(f'{name}: {names.count(name)}') +# ??? # Задание 2 -# Дан список учеников, нужно вывести самое часто повторяющееся имя +# Дан список учеников, нужно вывести самое часто повторящееся имя # Пример вывода: # Самое частое имя среди учеников: Маша students = [ @@ -57,8 +26,7 @@ def get_gender_count(input_lst: list) -> dict: {'first_name': 'Маша'}, {'first_name': 'Оля'}, ] -max_count_name = generate_name_list(students) -print(f'Самое частое имя среди учеников {max_count_name}') +# ??? # Задание 3 @@ -76,30 +44,26 @@ def get_gender_count(input_lst: list) -> dict: {'first_name': 'Маша'}, {'first_name': 'Маша'}, {'first_name': 'Оля'}, - ], - [ # это – третий класс + ],[ # это – третий класс {'first_name': 'Женя'}, {'first_name': 'Петя'}, {'first_name': 'Женя'}, {'first_name': 'Саша'}, ], ] +# ??? -for (index, students) in enumerate(school_students): - max_count_name = get_max_count_name(students) - print(f'Самое частое имя в классе {index + 1}: {max_count_name}') - -# # Задание 4 -# # Для каждого класса нужно вывести количество девочек и мальчиков в нём. -# # Пример вывода: -# # Класс 2a: девочки 2, мальчики 0 -# # Класс 2б: девочки 0, мальчики 2 +# Задание 4 +# Для каждого класса нужно вывести количество девочек и мальчиков в нём. +# Пример вывода: +# Класс 2a: девочки 2, мальчики 0 +# Класс 2б: девочки 0, мальчики 2 school = [ {'class': '2a', 'students': [{'first_name': 'Маша'}, {'first_name': 'Оля'}]}, {'class': '2б', 'students': [{'first_name': 'Олег'}, {'first_name': 'Миша'}]}, - {'class': '2в', 'students': [{'first_name': 'Даша'}, {'first_name': 'Олег'}, {'first_name': 'Маша'}]}, + {'class': '2б', 'students': [{'first_name': 'Даша'}, {'first_name': 'Олег'}, {'first_name': 'Маша'}]}, ] is_male = { 'Олег': True, @@ -108,42 +72,24 @@ def get_gender_count(input_lst: list) -> dict: 'Миша': True, 'Даша': False, } - -for cls in school: - if not ('students' in cls.keys()): - continue - gender_dict = get_gender_count(cls['students']) - print(f"Класс {cls['class']}: девочки {gender_dict['female']}, мальчики {gender_dict['male']}") +# ??? -# # Задание 5 -# # По информации о учениках разных классов нужно найти класс, в котором больше всего девочек и больше всего мальчиков -# # Пример вывода: -# # Больше всего мальчиков в классе 3c -# # Больше всего девочек в классе 2a +# Задание 5 +# По информации о учениках разных классов нужно найти класс, в котором больше всего девочек и больше всего мальчиков +# Пример вывода: +# Больше всего мальчиков в классе 3c +# Больше всего девочек в классе 2a school = [ - {'class': '2a', 'students': [{'first_name': 'Маша'}, {'first_name': 'Оля'}]}, - {'class': '3c', 'students': [{'first_name': 'Олег'}, {'first_name': 'Миша'}]}, + {'class': '2a', 'students': [{'first_name': 'Маша'}, {'first_name': 'Оля'}]}, + {'class': '3c', 'students': [{'first_name': 'Олег'}, {'first_name': 'Миша'}]}, ] - is_male = { - 'Маша': False, - 'Оля': False, - 'Олег': True, - 'Миша': True, + 'Маша': False, + 'Оля': False, + 'Олег': True, + 'Миша': True, } +# ??? -count_array = [] -for cls in school: - if not ('students' in cls.keys()): - continue - gender_dict = get_gender_count(cls['students']) - gender_dict['class'] = cls['class'] - count_array.append(gender_dict) - - max_male_elem = max(count_array, key=lambda x: x['male']) - max_female_elem = max(count_array, key=lambda x: x['female']) - - print(f"Больше всего мальчиков в классе {max_male_elem['class']}") - print(f"Больше всего девочек в классе {max_female_elem['class']}") diff --git a/string_challenges.py b/string_challenges.py index 57126c2e..856add2d 100644 --- a/string_challenges.py +++ b/string_challenges.py @@ -1,37 +1,28 @@ # Вывести последнюю букву в слове word = 'Архангельск' -print(word[-1]) +# ??? # Вывести количество букв "а" в слове word = 'Архангельск' -print(word.lower().count('а')) +# ??? # Вывести количество гласных букв в слове -vowels = 'ауоыиэяюёе' -counter = 0 word = 'Архангельск' -for elem in word.lower(): - if elem in vowels: - counter += 1 -print(counter) +# ??? + # Вывести количество слов в предложении sentence = 'Мы приехали в гости' -print(len(sentence.split())) +# ??? + # Вывести первую букву каждого слова на отдельной строке sentence = 'Мы приехали в гости' -for elem in sentence.split(): - if len(elem) == 0: - continue - print(elem[0]) +# ??? + # Вывести усреднённую длину слова в предложении sentence = 'Мы приехали в гости' -counter = 0 -lst_words = sentence.split() -for word in lst_words: - counter += len(word) -print(counter // len(lst_words)) +# ??? \ No newline at end of file From 754aee8ee9979aa9eaf12d5a7d92937536612121 Mon Sep 17 00:00:00 2001 From: Hugo Date: Tue, 14 Sep 2021 08:42:21 +0300 Subject: [PATCH 4/7] finished loops chalange --- for_challenges.py | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/for_challenges.py b/for_challenges.py index 997754da..b43a3e0f 100644 --- a/for_challenges.py +++ b/for_challenges.py @@ -2,7 +2,8 @@ # Необходимо вывести имена всех учеников из списка с новой строки names = ['Оля', 'Петя', 'Вася', 'Маша'] -# ??? +for name in names: + print(name) # Задание 2 @@ -12,7 +13,8 @@ # Петя: 4 names = ['Оля', 'Петя', 'Вася', 'Маша'] -# ??? +for name in names: + print(f'{name}: {len(name)}') # Задание 3 @@ -25,7 +27,8 @@ 'Маша': False, } names = ['Оля', 'Петя', 'Вася', 'Маша'] -# ??? +for name in names: + print(f"{name}: {'мужской' if is_male[name] else 'женский'}") # Задание 4 @@ -40,7 +43,8 @@ ['Вася', 'Маша', 'Саша', 'Женя'], ['Оля', 'Петя', 'Гриша'], ] -# ??? +for (index, group) in enumerate(groups): + print(f'Группа {index + 1}: {len(group)} ученика') # Задание 5 @@ -54,4 +58,5 @@ ['Оля', 'Петя', 'Гриша'], ['Вася', 'Маша', 'Саша', 'Женя'], ] -# ??? \ No newline at end of file +for (index, group) in enumerate(groups): + print(f'Группа {index + 1}: ' + ', '.join(group)) From 28f878c395caa3e6c42b614809e3d0fc7ac2608c Mon Sep 17 00:00:00 2001 From: Hugo Date: Tue, 14 Sep 2021 08:43:11 +0300 Subject: [PATCH 5/7] finished dict chalenge --- for_dict_challenges.py | 102 +++++++++++++++++++++++++++++++---------- 1 file changed, 78 insertions(+), 24 deletions(-) diff --git a/for_dict_challenges.py b/for_dict_challenges.py index 96062ebc..8844b958 100644 --- a/for_dict_challenges.py +++ b/for_dict_challenges.py @@ -1,3 +1,28 @@ +from typing import Any, List + + +def generate_name_list(input_lst: List[Any]) -> list: + return [student['first_name'] for student in input_lst if 'first_name' in student] + + +def get_max_count_name(input_lst: List[Any]) -> int: + names = generate_name_list(input_lst) + count_names: dict = {name: names.count(name) for name in set(names)} + return max(count_names, key=count_names.get) + + +def get_gender_count(input_lst: list) -> dict: + names = generate_name_list(input_lst) + gender_dict = {'male': 0, 'female': 0} + for name in names: + if not (name in is_male.keys()): + continue + if is_male[name]: + gender_dict['male'] += 1 + else: + gender_dict['female'] += 1 + return gender_dict + # Задание 1 # Дан список учеников, нужно посчитать количество повторений каждого имени ученика # Пример вывода: @@ -5,6 +30,7 @@ # Маша: 2 # Петя: 2 + students = [ {'first_name': 'Вася'}, {'first_name': 'Петя'}, @@ -12,11 +38,16 @@ {'first_name': 'Маша'}, {'first_name': 'Петя'}, ] -# ??? + +names = generate_name_list(students) + + +for name in set(names): + print(f'{name}: {names.count(name)}') # Задание 2 -# Дан список учеников, нужно вывести самое часто повторящееся имя +# Дан список учеников, нужно вывести самое часто повторяющееся имя # Пример вывода: # Самое частое имя среди учеников: Маша students = [ @@ -26,7 +57,8 @@ {'first_name': 'Маша'}, {'first_name': 'Оля'}, ] -# ??? +max_count_name = generate_name_list(students) +print(f'Самое частое имя среди учеников {max_count_name}') # Задание 3 @@ -44,26 +76,30 @@ {'first_name': 'Маша'}, {'first_name': 'Маша'}, {'first_name': 'Оля'}, - ],[ # это – третий класс + ], + [ # это – третий класс {'first_name': 'Женя'}, {'first_name': 'Петя'}, {'first_name': 'Женя'}, {'first_name': 'Саша'}, ], ] -# ??? +for (index, students) in enumerate(school_students): + max_count_name = get_max_count_name(students) + print(f'Самое частое имя в классе {index + 1}: {max_count_name}') -# Задание 4 -# Для каждого класса нужно вывести количество девочек и мальчиков в нём. -# Пример вывода: -# Класс 2a: девочки 2, мальчики 0 -# Класс 2б: девочки 0, мальчики 2 + +# # Задание 4 +# # Для каждого класса нужно вывести количество девочек и мальчиков в нём. +# # Пример вывода: +# # Класс 2a: девочки 2, мальчики 0 +# # Класс 2б: девочки 0, мальчики 2 school = [ {'class': '2a', 'students': [{'first_name': 'Маша'}, {'first_name': 'Оля'}]}, {'class': '2б', 'students': [{'first_name': 'Олег'}, {'first_name': 'Миша'}]}, - {'class': '2б', 'students': [{'first_name': 'Даша'}, {'first_name': 'Олег'}, {'first_name': 'Маша'}]}, + {'class': '2в', 'students': [{'first_name': 'Даша'}, {'first_name': 'Олег'}, {'first_name': 'Маша'}]}, ] is_male = { 'Олег': True, @@ -72,24 +108,42 @@ 'Миша': True, 'Даша': False, } -# ??? +for cls in school: + if not ('students' in cls.keys()): + continue + gender_dict = get_gender_count(cls['students']) + print(f"Класс {cls['class']}: девочки {gender_dict['female']}, мальчики {gender_dict['male']}") -# Задание 5 -# По информации о учениках разных классов нужно найти класс, в котором больше всего девочек и больше всего мальчиков -# Пример вывода: -# Больше всего мальчиков в классе 3c -# Больше всего девочек в классе 2a + +# # Задание 5 +# # По информации о учениках разных классов нужно найти класс, в котором больше всего девочек и больше всего мальчиков +# # Пример вывода: +# # Больше всего мальчиков в классе 3c +# # Больше всего девочек в классе 2a school = [ - {'class': '2a', 'students': [{'first_name': 'Маша'}, {'first_name': 'Оля'}]}, - {'class': '3c', 'students': [{'first_name': 'Олег'}, {'first_name': 'Миша'}]}, + {'class': '2a', 'students': [{'first_name': 'Маша'}, {'first_name': 'Оля'}]}, + {'class': '3c', 'students': [{'first_name': 'Олег'}, {'first_name': 'Миша'}]}, ] + is_male = { - 'Маша': False, - 'Оля': False, - 'Олег': True, - 'Миша': True, + 'Маша': False, + 'Оля': False, + 'Олег': True, + 'Миша': True, } -# ??? +count_array = [] +for cls in school: + if not ('students' in cls.keys()): + continue + gender_dict = get_gender_count(cls['students']) + gender_dict['class'] = cls['class'] + count_array.append(gender_dict) + + max_male_elem = max(count_array, key=lambda x: x['male']) + max_female_elem = max(count_array, key=lambda x: x['female']) + + print(f"Больше всего мальчиков в классе {max_male_elem['class']}") + print(f"Больше всего девочек в классе {max_female_elem['class']}") From 28e32f61f227d1d9640278d038ac05d1300d48f2 Mon Sep 17 00:00:00 2001 From: Hugo Date: Tue, 14 Sep 2021 08:43:46 +0300 Subject: [PATCH 6/7] finished string chalenge --- string_challenges.py | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/string_challenges.py b/string_challenges.py index 856add2d..57126c2e 100644 --- a/string_challenges.py +++ b/string_challenges.py @@ -1,28 +1,37 @@ # Вывести последнюю букву в слове word = 'Архангельск' -# ??? +print(word[-1]) # Вывести количество букв "а" в слове word = 'Архангельск' -# ??? +print(word.lower().count('а')) # Вывести количество гласных букв в слове +vowels = 'ауоыиэяюёе' +counter = 0 word = 'Архангельск' -# ??? - +for elem in word.lower(): + if elem in vowels: + counter += 1 +print(counter) # Вывести количество слов в предложении sentence = 'Мы приехали в гости' -# ??? - +print(len(sentence.split())) # Вывести первую букву каждого слова на отдельной строке sentence = 'Мы приехали в гости' -# ??? - +for elem in sentence.split(): + if len(elem) == 0: + continue + print(elem[0]) # Вывести усреднённую длину слова в предложении sentence = 'Мы приехали в гости' -# ??? \ No newline at end of file +counter = 0 +lst_words = sentence.split() +for word in lst_words: + counter += len(word) +print(counter // len(lst_words)) From 35db276968f811b6bd1a3da937ec3ed766297cf2 Mon Sep 17 00:00:00 2001 From: Hugo Date: Thu, 16 Sep 2021 13:33:17 +0300 Subject: [PATCH 7/7] fix code --- for_challenges.py | 4 +- for_dict_challenges.py | 124 +++++++++++++++++------------------------ string_challenges.py | 2 +- 3 files changed, 53 insertions(+), 77 deletions(-) diff --git a/for_challenges.py b/for_challenges.py index b43a3e0f..1fa40898 100644 --- a/for_challenges.py +++ b/for_challenges.py @@ -43,7 +43,7 @@ ['Вася', 'Маша', 'Саша', 'Женя'], ['Оля', 'Петя', 'Гриша'], ] -for (index, group) in enumerate(groups): +for index, group in enumerate(groups): print(f'Группа {index + 1}: {len(group)} ученика') @@ -58,5 +58,5 @@ ['Оля', 'Петя', 'Гриша'], ['Вася', 'Маша', 'Саша', 'Женя'], ] -for (index, group) in enumerate(groups): +for index, group in enumerate(groups): print(f'Группа {index + 1}: ' + ', '.join(group)) diff --git a/for_dict_challenges.py b/for_dict_challenges.py index 8844b958..52969263 100644 --- a/for_dict_challenges.py +++ b/for_dict_challenges.py @@ -1,27 +1,24 @@ -from typing import Any, List +from collections import Counter -def generate_name_list(input_lst: List[Any]) -> list: - return [student['first_name'] for student in input_lst if 'first_name' in student] +IS_MALE = { + 'Олег': True, + 'Маша': False, + 'Оля': False, + 'Миша': True, + 'Даша': False, +} -def get_max_count_name(input_lst: List[Any]) -> int: - names = generate_name_list(input_lst) - count_names: dict = {name: names.count(name) for name in set(names)} - return max(count_names, key=count_names.get) +def get_max_count_name(input_lst: list) -> str: + names = Counter([student['first_name'] for student in input_lst]) + return max(names, key=names.get) -def get_gender_count(input_lst: list) -> dict: - names = generate_name_list(input_lst) - gender_dict = {'male': 0, 'female': 0} - for name in names: - if not (name in is_male.keys()): - continue - if is_male[name]: - gender_dict['male'] += 1 - else: - gender_dict['female'] += 1 - return gender_dict +def get_gender_counter(input_lst: list) -> Counter: + lst_genders = ['male' if IS_MALE[elem['first_name']] else 'female' for elem in input_lst] + return Counter(lst_genders) + # Задание 1 # Дан список учеников, нужно посчитать количество повторений каждого имени ученика @@ -39,17 +36,15 @@ def get_gender_count(input_lst: list) -> dict: {'first_name': 'Петя'}, ] -names = generate_name_list(students) - - -for name in set(names): - print(f'{name}: {names.count(name)}') +names = Counter([student['first_name'] for student in students]) +for name, counter in names.items(): + print(f'{name}: {counter}') -# Задание 2 -# Дан список учеников, нужно вывести самое часто повторяющееся имя -# Пример вывода: -# Самое частое имя среди учеников: Маша +# # Задание 2 +# # Дан список учеников, нужно вывести самое часто повторяющееся имя +# # Пример вывода: +# # Самое частое имя среди учеников: Маша students = [ {'first_name': 'Вася'}, {'first_name': 'Петя'}, @@ -57,15 +52,15 @@ def get_gender_count(input_lst: list) -> dict: {'first_name': 'Маша'}, {'first_name': 'Оля'}, ] -max_count_name = generate_name_list(students) -print(f'Самое частое имя среди учеников {max_count_name}') +max_count_name = get_max_count_name(students) +print(f'Самое частое имя среди учеников: {max_count_name}') -# Задание 3 -# Есть список учеников в нескольких классах, нужно вывести самое частое имя в каждом классе. -# Пример вывода: -# Самое частое имя в классе 1: Вася -# Самое частое имя в классе 2: Маша +# # Задание 3 +# # Есть список учеников в нескольких классах, нужно вывести самое частое имя в каждом классе. +# # Пример вывода: +# # Самое частое имя в классе 1: Вася +# # Самое частое имя в классе 2: Маша school_students = [ [ # это – первый класс @@ -85,65 +80,46 @@ def get_gender_count(input_lst: list) -> dict: ], ] -for (index, students) in enumerate(school_students): +for index, students in enumerate(school_students): max_count_name = get_max_count_name(students) print(f'Самое частое имя в классе {index + 1}: {max_count_name}') -# # Задание 4 -# # Для каждого класса нужно вывести количество девочек и мальчиков в нём. -# # Пример вывода: -# # Класс 2a: девочки 2, мальчики 0 -# # Класс 2б: девочки 0, мальчики 2 +# # # Задание 4 +# # # Для каждого класса нужно вывести количество девочек и мальчиков в нём. +# # # Пример вывода: +# # # Класс 2a: девочки 2, мальчики 0 +# # # Класс 2б: девочки 0, мальчики 2 school = [ {'class': '2a', 'students': [{'first_name': 'Маша'}, {'first_name': 'Оля'}]}, {'class': '2б', 'students': [{'first_name': 'Олег'}, {'first_name': 'Миша'}]}, {'class': '2в', 'students': [{'first_name': 'Даша'}, {'first_name': 'Олег'}, {'first_name': 'Маша'}]}, ] -is_male = { - 'Олег': True, - 'Маша': False, - 'Оля': False, - 'Миша': True, - 'Даша': False, -} for cls in school: - if not ('students' in cls.keys()): - continue - gender_dict = get_gender_count(cls['students']) - print(f"Класс {cls['class']}: девочки {gender_dict['female']}, мальчики {gender_dict['male']}") - + counter_genders = get_gender_counter(cls['students']) + print(f"Класс {cls['class']}: девочки {counter_genders.get('female', 0)}, " + + f"мальчики {counter_genders.get('male', 0)}") -# # Задание 5 -# # По информации о учениках разных классов нужно найти класс, в котором больше всего девочек и больше всего мальчиков -# # Пример вывода: -# # Больше всего мальчиков в классе 3c -# # Больше всего девочек в классе 2a +# # # Задание 5 +# # # По информации о учениках разных классов нужно найти класс, в котором больше всего девочек и больше всего мальчиков +# # # Пример вывода: +# # # Больше всего мальчиков в классе 3c +# # # Больше всего девочек в классе 2a school = [ {'class': '2a', 'students': [{'first_name': 'Маша'}, {'first_name': 'Оля'}]}, {'class': '3c', 'students': [{'first_name': 'Олег'}, {'first_name': 'Миша'}]}, ] -is_male = { - 'Маша': False, - 'Оля': False, - 'Олег': True, - 'Миша': True, -} - -count_array = [] +count_lst = [] for cls in school: - if not ('students' in cls.keys()): - continue - gender_dict = get_gender_count(cls['students']) - gender_dict['class'] = cls['class'] - count_array.append(gender_dict) + counter_genders = get_gender_counter(cls['students']) + count_lst.append({'class': cls['class'], 'genders': counter_genders}) - max_male_elem = max(count_array, key=lambda x: x['male']) - max_female_elem = max(count_array, key=lambda x: x['female']) +max_male_elem = max(count_lst, key=lambda x: x['genders']['male']) +max_female_elem = max(count_lst, key=lambda x: x['genders']['female']) - print(f"Больше всего мальчиков в классе {max_male_elem['class']}") - print(f"Больше всего девочек в классе {max_female_elem['class']}") +print(f"Больше всего мальчиков в классе {max_male_elem['class']}") +print(f"Больше всего девочек в классе {max_female_elem['class']}") diff --git a/string_challenges.py b/string_challenges.py index 57126c2e..b18350f1 100644 --- a/string_challenges.py +++ b/string_challenges.py @@ -24,7 +24,7 @@ # Вывести первую букву каждого слова на отдельной строке sentence = 'Мы приехали в гости' for elem in sentence.split(): - if len(elem) == 0: + if not elem: continue print(elem[0])