Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- """
- Базовые возможности Python
- 1) Напишите функцию analyze_students, которая принимает структуру следующего вида:
- {
- "student_name_1": {
- "subject_1": [mark_1, mark_2, ...],
- "subject_2": [mark_1, mark_2, ...],
- ...
- },
- "student_name_2": {
- ...
- },
- ...
- }
- С помощью генератора множеств соберите ответ следующего вида:
- {
- ("student_name_1", "subject_1", multiplication_of_marks),
- ("student_name_1", "subject_2", multiplication_of_marks),
- ...
- }
- Пояснение: множество должно содержать кортежи по три элемента - все сочетания студентов с его предметами, а третий элемент - результат перемножения всех оценок по этому предмету ¯\_(ツ)_/¯. В изначальных данных имена студентов и названия предметов должны быть строками, а лист оценок должен содержать только целые числа.
- Содержимое функции должно быть реализовано в одну строку (pep8 по длине строки не проверяется) одним генератором: return ....
- Также должны игнорироваться все результаты по предмету "1C" (C - английская).
- 2) Напишите функцию validate_data, которая принимает данные в том же формате и проверяет, что все имена студентов и названия предметов - строки, а все оценки в листе - целые числа (int). Если хоть одно условие по типам нарушено - необходимо вызвать TypeError. Если все оценки - целые числа, но среди них есть хоть одна меньше 1 или больше 10 - вызвать ValueError. Если все имена студентов и названия предметов - строки, но хоть в одном из них содержится не английская буква или цифра - также вызываем ValueError. Если все проверки прошли успешно - вернуть True.
- 3) Напишите к функциям аннотации (вложенные типы указывать не обязательно).
- P.S. В первую функцию гарантированно будут передаваться только валидные данные.
- Запрещено использование импортов (если в коде ниже они прописаны, то вы можете их использовать в таком виде, но перед загрузкой решения сами импорты нужно удалить из файла - они будут подставлены автоматически), а также операторов open, exec и eval.
- """
- def analyze_students(data: typing.Dict[str, typing.Dict]) -> typing.Set[typing.Tuple]:
- # TODO
- pass
- def validate_data(data: typing.Dict[str, typing.Dict]) -> bool:
- # TODO
- pass
- # Test data
- data_1 = {
- 'Anton': {
- 'Python': [10, 9, 10],
- 'Django': [10, 10, 10, 10],
- },
- 'Alex': {
- 'C++': [9, 9],
- 'Java': [8, 8, 10],
- 'Assembler': [7]
- },
- 'Loki': {
- '1C': [10, 10, 10, 10, 10],
- 'Ruby': [10, 10, 10, 10, 10]
- }
- }
- import os
- from unittest import TestCase
- import pep8
- from StudentsLab.private_settings import BASE_DIR
- from .answer_5058 import analyze_students, validate_data
- class TaskTest(TestCase):
- def test_1(self):
- data = {
- 'Anton': {
- 'Python': [10, 9, 10],
- 'Django': [10, 10, 10, 10],
- },
- 'Alex': {
- 'C++': [9, 9],
- 'Java': [8, 8, 10],
- 'Assembler': [7]
- },
- 'Loki': {
- '1C': [10, 10, 10, 10, 10],
- 'Ruby': [10, 10, 10, 10, 10]
- }
- }
- self.assertEqual(
- analyze_students(data),
- {
- ('Anton', 'Python', 900),
- ('Anton', 'Django', 10000),
- ('Alex', 'C++', 81),
- ('Alex', 'Java', 640),
- ('Alex', 'Assembler', 7),
- ('Loki', 'Ruby', 100000),
- }
- )
- def test_2(self):
- with open(
- os.path.join(
- BASE_DIR, 'Main', 'task_tests', 'answers', 'answer_5058.py'
- ), 'r'
- ) as hw_file:
- hw_text = hw_file.read()
- task_index = hw_text.index('def analyze_students')
- self.assertEqual(
- 1,
- hw_text[
- task_index:
- task_index + hw_text[task_index:].index('return')
- ].count('\n')
- )
- def test_3(self):
- data = {
- 'Anton': {
- 'Python': [10, 9, 10],
- 'Django': [10, 10, 10, 10],
- },
- 'Alex': {
- 'C': [9, 9],
- 'Java': [8, 8, 10],
- 'Assembler': [7]
- },
- 'Loki': {
- '1C': [10, 10, 10, 10, 10],
- 'Ruby': [10, 10, 10, 10, 10]
- }
- }
- self.assertTrue(validate_data(data))
- def test_4(self):
- data = {
- 'Anton': {
- 'Python': [10, 9, 10],
- 'Django': [10, 10, 10, 10],
- },
- 'Alex': {
- 'C': [9, 9],
- 1: [8, 8, 10],
- 'Assembler': [7]
- },
- 'Loki': {
- '1C': [10, 10, 10, 10, 10],
- 'Ruby': [10, 10, 10, 10, 10]
- }
- }
- with self.assertRaises(TypeError):
- validate_data(data)
- def test_5(self):
- data = {
- 'Anton': {
- 'Python': [10, 9, 10],
- 'Django': [10, 5.5, 10, 10],
- },
- 'Alex': {
- 'C': [9, 9],
- 'Java': [8, 8, 10],
- 'Assembler': [7]
- },
- 'Loki': {
- '1C': [10, 10, 10, 10, 10],
- 'Ruby': [10, 10, 10, 10, 10]
- }
- }
- with self.assertRaises(TypeError):
- validate_data(data)
- def test_6(self):
- data = {
- 'Anton': {
- 'Python': [10, 9, 10],
- 'Django': [10, True, 10, 10],
- },
- 'Alex': {
- 'C': [9, 9],
- 'Java': [8, 8, 10],
- 'Assembler': [7]
- },
- 'Loki': {
- '1C': [10, 10, 10, 10, 10],
- 'Ruby': [10, 10, 10, 10, 10]
- }
- }
- with self.assertRaises(TypeError):
- validate_data(data)
- def test_7(self):
- data = {
- 'Anton': {
- 'Python': [10, 9, 10],
- 'Django': [10, False, 10, 10],
- },
- 'Alex': {
- 'C': [9, 9],
- 'Java': [8, 8, 10],
- 'Assembler': [7]
- },
- 'Loki': {
- '1C': [10, 10, 10, 10, 10],
- 'Ruby': [10, 10, 10, 10, 10]
- }
- }
- with self.assertRaises(TypeError):
- validate_data(data)
- def test_8(self):
- data = {
- 'Anton': {
- 'Python': [10, 9, 10],
- 'Django': [10, 0, 10, 10],
- },
- 'Alex': {
- 'C': [9, 9],
- 'Java': [8, 8, 10],
- 'Assembler': [7]
- },
- 'Loki': {
- '1C': [10, 10, 10, 10, 10],
- 'Ruby': [10, 10, 10, 10, 10]
- }
- }
- with self.assertRaises(ValueError):
- validate_data(data)
- def test_9(self):
- data = {
- 'Anton': {
- 'Python': [10, 9, 10],
- 'Dj@ngo': [10, 10, 10, 10],
- },
- 'Alex': {
- 'C': [9, 9],
- 'Java': [8, 8, 10],
- 'Assembler': [7]
- },
- 'Loki': {
- '1C': [10, 10, 10, 10, 10],
- 'Ruby': [10, 10, 10, 10, 10]
- }
- }
- with self.assertRaises(ValueError):
- validate_data(data)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement