2.36M
Category: programmingprogramming

Вложенные структуры данных. Модуль 1. Урок 4

1.

Модуль 1. Урок 4.
Вложенные
структуры данных
Ссылка на методичку

2.

Модуль 1. Урок 4. Вложенные структуры данных
Обсуждение:
Хакатон ProTeam

3.

Внимание, объявление!
Сегодня в ProTeam состоится хакатон по программированию.
Цель хакатона –– запрограммировать систему хранения
данных сотрудников ProTeam.
Обсуждение
рабочих задач
Коллеги, вы уже давно занимаетесь разработкой программ. У
вас есть все шансы показать себя!
Алёна,
менеджер проектов

4.

Внимание, объявление!
В то же время ProTeam нужно многоуровневое хранилище
данных. Такой проект требует знания
всех тонкостей использования структур данных.
Обсуждение
рабочих задач
Рассмотрим одну из возможных задач.
Костя,
старший разработчик

5.

Рассмотрим задачу
Задача. Запрограммировать базу сотрудников отдела веб-разработки.
База должна хранить следующий набор данных о каждом сотруднике:
должность,
стаж,
портфолио (названия проектов).
Информация об одном сотруднике
Информация обо всех сотрудниках
Обсуждение
рабочих задач
Эти данные должны быть доступны по фамилии сотрудника.

6.

Рассмотрим задачу
Задача. Запрограммировать базу сотрудников отдела веб-разработки.
База должна хранить следующий набор данных о каждом сотруднике:
должность,
стаж,
портфолио (названия проектов).
Эти данные должны быть доступны по фамилии сотрудника.
Фамилия1
Должность
Опыт
Фамилия2
Портфолио
Должность
Опыт
Портфолио
Обсуждение
рабочих задач
Отдел веб-разработки

7.

Рассмотрим задачу
Задача. Запрограммировать базу сотрудников отдела веб-разработки.
База должна хранить следующий набор данных о каждом сотруднике:
должность,
стаж,
портфолио (названия проектов).
Эти данные должны быть доступны по фамилии сотрудника.
Фамилия
'Иванов'
:{
...
Должность
'Должность'
: 'младший разработчик',
Опыт : 2,
'Опыт'
Портфолио
...
...
'портфолио':
['Сайт Долголетие',
'Сайт PlayForever']
}
}
Фамилия
staff['Иванов'
]
Получение информации по фамилии
Обсуждение
рабочих задач
staff = {

8.

Вложенные структуры
Это решение не является принципиально новым,
работа с ним требует настоящего мастерства.
но
Для развития мастерства и успешного участия
хакатоне вам нужно пройти специальный
тренинг.
в
Обсуждение
рабочих задач
Рассмотренное решение использует вложенную структуру
данных: словарь со словарями.

9.

Цель рабочего дня —
научиться программировать вложенные структуры
данных.
Это пригодится не только для хакатона, но и для развития
профессионального мастерства.
● разберёте способы использования одной
структуры данных внутри другой;
● пройдёте обучающий тренинг;
● примите участие в хакатоне ProTeam.
Обсуждение
рабочих задач
Сегодня вы:

10.

Модуль 1. Урок 4. Вложенные структуры данных
Подтверждение
квалификации

11.

Подтверждение
квалификации
Чтобы приступить к тренингу,
продемонстрируйте
уровень знаний!

12.

Подтверждение
квалификации
Какие типы данных вы знаете?

13.

Какие типы данных вы знаете?
Мы знаем пять типов данных:
Примеры
Целые числа (int)
1, -10, 100, (-5 + 4)
Десятичные дроби (float)
3.14, -164.3, 700.0, (100 * 0.95)
Логические величины (bool)
True, False, (10 >= 99),
(‘ok’ == pass and 5 != count)
Списки (list)
names = list(), results = [81.2, 67.0],
students = ['Воробьёва', 'Куликов']
Словари (dict)
data = dict(),
reader_card = {num: 421, surname: 'Игнатов'}
Подтверждение
квалификации
Типы данных

14.

Что такое неизменяемый тип данных?
Подтверждение
квалификации
Какие типы данных являются
неизменяемыми, а какие –– нет?

15.

Виды типов данных:
Типы данных
Изменяемые типы
Нельзя изменить
программно:
● целые числа,
● десятичные
дроби,
● строки
Можно изменить
программно:
списки,
словари.
Подтверждение
квалификации
Неизменяемые типы

16.

Подтверждение
квалификации
Что такое словарь?
Какие данные хранятся в словаре?

17.

Словарь — это неупорядоченный набор пар вида «ключ–
значение».
Объявление словаря:
books = dict() #пустой словарь
books = {'поэма': 'Руслан и Людмила', 'сказка': 'Волшебное
Ключ
Значение
Получение элемента по ключу:
genre = input('Введите жанр:')
print('Рекомендация:', books[genre])
Ключ
Значение
Подтверждение
квалификации
кольцо'}

18.

Подтверждение
квалификации
Какие действия вы умеете выполнять
со словарями?

19.

Какие действия вы умеете выполнять
со словарями?
Определять длину словаря
Искать ключ в словаре
Добавлять в словарь пару «ключзначение»
Удалять ключ и его значение
из словаря
Подтверждение
квалификации
Получать из словаря элемент по
ключу

20.

Определять длину словаря
?
Получать из словаря элемент по
ключу
?
Искать ключ в словаре
?
Добавлять в словарь пару «ключзначение»
?
Удалять ключ и его значение
из словаря
?
Подтверждение
квалификации
Какие команды соответствуют этим
действиям?

21.

Определять длину словаря
len(readers)
Получать из словаря элемент по
ключу
readers['Иванов']
Искать ключ в словаре
'Иванов' in readers
Добавлять в словарь пару «ключзначение»
readers['Иванов'] = 'Галкина'
Удалять ключ и его значение
из словаря
del readers['Иванов']
Подтверждение
квалификации
Какие команды соответствуют этим
действиям?

22.

Квалификация подтверждена!
Подтверждение
квалификации
Вы готовы к тренингу и совершенствованию мастерства
разработчика!

23.

Модуль 1. Урок 4. Вложенные структуры данных
Тренинг:
Вложенные
структуры данных

24.

Вложенные структуры данных
Тренинг по вложенным структурам данных будет состоять из двух
частей: теоретической и практической.
Ключевые вопросы:
«Мозговой
штурм»
● Какие структуры данных могут быть вложенными?
● Куда могут быть вложены структуры данных?
● Если ли ограничения по степени вложенности?
Костя,
старший разработчик

25.

Списки
Правило: элементом списка может быть объект любого типа.
Примеры:
staff = ['Воробьёва', 'Калинин']
staff = [
{'Воробьёва': 'программист'},
{'Калинин': 'тестировщик'}
staff = ['Воробёева', ['ProTeam', 'PlayForever']]
staff = [
{'Воробёева': ['ProTeam', 'PlayForever']},
{'Калинин': ['ProTeam']}
]
«Мозговой
штурм»
]

26.

Списки
Правило: элементом списка может быть объект любого типа.
Примеры:
staff = ['Воробьёва', 'Калинин']
{'Воробьёва': 'программист'},
{'Калинин': 'тестировщик'}
]
staff = ['Воробёева', ['ProTeam', 'PlayForever']]
staff = [
{'Воробёева': ['ProTeam', 'PlayForever']},
{'Калинин': ['ProTeam']}
]
Элементами списка могут
быть:
-
списки,
списки списков,
словари,
словари со значениямисписками
и др.
«Мозговой
штурм»
staff = [

27.

Словари
Правило:
● Ключом может быть только объект неизменяемого типа.
● Значением может быть объект любого типа.
Примеры:
staff = {
'Воробьёва': {
'Воробьёва': 'программист',
'опыт': '3',
'Калинин': 'тестировщик'
}
'должность': 'программист'
staff = {
},
'Калинин': {
'Воробьёва': ['ProTeam', 'PlayForever'],
'опыт': '2',
'Калинин': ['ProTeam']
'должность': 'менеджер'
}
}
}
«Мозговой
штурм»
staff = {

28.

Словари
Правило:
● Ключом может быть только объект неизменяемого типа.
● Значением может быть объект любого типа.
staff = {
числа,
строки.
'Воробьёва': 'программист',
-
'Калинин': 'тестировщик'
Значением словаря может быть:
}
staff = {
'Воробьёва': ['ProTeam', 'PlayForever'],
'Калинин': ['ProTeam']
}
Ключом словаря может быть:
числа,
строки,
списки,
словари,
списки списков,
списки словарей
и др.
«Мозговой
штурм»
Примеры:

29.

Рассмотрим задачу
Задача. Запрограммируйте структуру для хранения данных отдела дизайна. При
запуске программы запрашивается ввод фамилии.
Если фамилия найдена, печатается информация:
профиль,
портфолио.
«Мозговой
штурм»

30.

Рассмотрим задачу
Задача. Запрограммируйте структуру для хранения данных для отдела дизайна.
При запуске программы запрашивается ввод фамилии.
Если фамилия найдена, печатается информация:
профиль,
портфолио.
«Мозговой
штурм»
Как должна быть устроена такая структура?
Как получить профиль и портфолио по фамилии?

31.

Рассмотрим задачу
Задача. Запрограммируйте структуру для хранения данных для отдела дизайна.
При запуске программы запрашивается ввод фамилии.
Если фамилия найдена, печатается информация:
профиль,
портфолио.
designers = {
Фамилия
'Иванов'
:{
...
...
Портфолио
'портфолио':
['Сайт Долголетие',
'Сайт PlayForever']
}
}
Фамилия
designers['Иванов'
]
Получение информации по фамилии
«Мозговой
штурм»
Профиль
'Должность'
: 'младший ...
разработчик',

32.

Рассмотрим задачу
Задача. Запрограммируйте структуру для хранения данных для отдела дизайна.
При запуске программы запрашивается ввод фамилии.
Если фамилия найдена, печатается информация:
профиль,
портфолио.
designers = {
'Воробьёва': {
'портфолио': ['Танки World of Tanks']
},
'Калинин': {
'профиль': 'Моушен-дизайнер',
'портфолио': ['NFS', 'Minecraft']
}
}
Как получить профиль
конкретного дизайнера?
Портфолио?
«Мозговой
штурм»
'профиль': '3D-дизайнер',

33.

designers = {
'Воробьёва': {
'профиль': '3D-дизайнер',
'портфолио': ['Танки World of Tanks']
},
'Калинин': {
'профиль': 'Моушен-дизайнер',
'портфолио': ['NFS', 'Minecraft']
}
surname = input('Введите фамилию:')
for info in designers[surname]:
print(info, '-', designers[surname][info])
Для каждого параметра дизайнера:
напечатать: параметр — его
значение.
designers['Воробьёва']['профиль']
3D-дизайнер
designers['Калинин']['портфолио']
['NFS', 'Minecraft']
«Мозговой
штурм»
}

34.

Перед тем, как продолжить:
1. Что выведет предыдущая программа, если запросить
данные?:
designers['Калинин']['портфолио'][1],
designers['Калинин']?
2. Как улучшить программу, чтобы реакция на действия п.
2 была корректной?
«Мозговой
штурм»
1. Что выведет программа, если запросить фамилию не из
базы, например, «Воронина»?

35.

Выводы:
1. Внутрь одной структуры данных может быть вложена
другая структура. Ограничений на степень вложенности
нет.
2. Важное ограничение для словарей:
«Мозговой
штурм»
❏ Список не может использоваться внутри словаря
как ключ. Только как значение!

36.

Модуль 1. Урок 4. Вложенные структуры данных
Платформа:
Тренинг

37.

Выполните задания на платформе
«Тренинг»
Вложенные
структуры данных
learn.algoritmika.org

38.

Перерыв

39.

Модуль 1. Урок 4. Вложенные структуры данных
Обсуждение:
Хакатон ProTeam

40.

Задание хакатона
Цель –– запрограммировать систему хранения данных
сотрудников ProTeam.
Важной считается информация:
-
Фамилия.
Должность.
Коэффициент эффективности.
Названия последних трёх проектов.
-
Обсуждение
хакатона
После программирования системы добавьте туда трёх
сотрудников и настройте вывод по запросу:
Фамилии всех сотрудников.
Фамилии самого эффективного сотрудника.
Должностей всех сотрудников.
Алёна,
менеджер проектов

41.

Задание хакатона
Используйте материалы «мозгового штурма»!
workers = {
Фамилия
'Иванов'
:{
...
Инфо1
'Должность'
: 'младший разработчик',
...
Инфо2
...
'портфолио':
['Сайт Долголетие',
'Сайт PlayForever']
}
Фамилия
workers['Иванов'
]
Фамилия
Инфо1
workers['Воробьёва']['профиль']
Фамилия
Инфо2
workers['Калинин']]['портфолио']
Обсуждение
хакатона
}
Получение
информации по
фамилии
Алёна,
менеджер проектов

42.

Распределение времени
Время
Что происходит
Начало хакатона
20 минут
Выполнение задания в Лаборатории
10 минут
Публикация решения в Лаборатории,
комментирование и оценка работ других участников.
10 минут
Техническое собеседование, подведение итогов
Обсуждение
хакатона
Конец хакатона

43.

Модуль 1. Урок 4. Вложенные структуры данных
Лаборатория:
Хакатон

44.

Выполните задания
задание в
наЛаборатории
платформе
«Хакатон»
«Тренинг»
Хакатон
Вложенные
структуры данных
learn.algoritmika.org

45.

Модуль 1. Урок 4. Вложенные структуры данных
Завершение
рабочего дня

46.

Для завершения хакатона пройдите
техническое интервью:
2. Есть ли ограничения использования вложенных структур?
Чем они вызваны?
Костя,
Алёна,
старший разработчик
менеджер проектов
Подведение итогов
рабочего дня
1. Какие структуры данных вы знаете? Какую структуру можно
использовать внутри другой?

47.

Отличная работа!
Дорогие коллеги!
Поздравляем с успешным участием в хакатоне
компании ProTeam.
Подведение итогов
рабочего дня
Все ваши наработки будут переданы инженерам.

48.

«Тренинг:
доп задания»
Подведение итогов
рабочего дня
Дополнительные задания для
повышения эффективности
English     Русский Rules