Возвращаемся к нашей задаче. Мы должны вывести список фамилий в требуемом формате. Мы уже выделили три подзадачи, давайте для каждой из них напишем соответствующую функцию. Первая функция для считывания данных. Мы не можем назвать ее просто input, потому что такая уже есть, мы должны придумать свое название, пусть будет input_data. Давайте определять функцию input_data. Она никаких значений принимать не будет, она будет все спрашивать у пользователя, а возвращать будет предмет и список фамилий. Как она спросит у пользователя предмет? Просто скажем subject — это какой-то input, пусть пользователь введет. Теперь список фамилий, пусть будет names — тоже input. Пока пользователь ввел две строки, а мы хотим вернуть строку с названием предмета и список фамилий. Напишем "return", предмет так и возвращаем. Из cтроки с фамилиями нужно сделать список, сделаем names и разобьем его через split по запятой. Таким образом, список с точки зрения пользователя, превратился в список с точки зрения компьютера. По-хорошему, к этой записи нужно еще добавить пояснение (ровно то же самое, что мы с вами записали, только еще добавим пояснение) к вводу, чтобы пользователь знал, что от него требуется — пояснение к вводу. И просим ввести название предмета и список фамилий через запятую. Давайте это запустим, а теперь сможем вызвать эту функцию. Давайте потренируемся на таком списке фамилий. Присваивать результаты мы должны тоже двум переменным, потому что возвращаем два значения и потом распечатаем, что у нас получилось. Вызываем. "Введите название предмета" — пусть будет плавание. "Введите фамилии студентов (через запятую)" — вот тут интересно: вот мы введем как-то так и видим, что пользователь, на самом деле, может пробелы вокруг запятых ставить (перед словами, после слов, как угодно). Давайте вот здесь, чтобы все возможные случаи рассмотреть, рассмотрим вот такой ввод, и посмотрим, как оно разобьется на фамилии отдельные. Смотрим, получилось "предмет: плавание", а список у нас разбился так, что вот здесь, видите, есть лишние пробелы у некоторых фамилий. Но это, на самом деле, не проблема, это просто надо будет учитывать при сортировке. Зато что мы понимаем? Что задача подсчета студентов уже сама собой решилась, потому что мы просто можем найти длину этого списка, то есть обработка данных сводится только к сортировке с предварительным удалением пробелов. Давайте это сделаем. Будем определять функцию сортировки фамилий. Мы ее назовем как сортировка, на самом деле до этого еще нужно удалить все лишние пробелы. Определим функцию. Принимать она на вход будет список фамилий студентов. Не забываем поставить двоеточие. А теперь давайте, прежде чем сортировать его, удалим все лишние пробелы. Как это можно сделать? Можно, например, создать один специальный, дополнительный список, в который будем добавлять уже все фамилии без пробелов — это не единственный способ, но давайте воспользуемся таким. Для всех фамилий в нашем списке, для всех name in names мы будем добавлять к нашему списку (вот к этому) — добавлять что? — фамилию студента, у которой уже убрали по краям все лишние пробелы — name.strip и здесь мы убираем все пробелы. Или можем даже подумать, что там и какие-то другие пробельные символы будут, поэтому достаточно просто написать "name.strip" безо всяких комментариев, без дополнительных параметров внутри, без аргументов. Вернуть нам нужно отсортированный список. Давайте напишем "return", у нас есть список name.stripped и мы можем его вернуть, просто воспользовавшись функцией sorted, которая отсортирует все фамилии в нужном порядке. Посмотрим, как эта функция выглядит в готовом виде — абсолютно так же. Запустим ее и попробуем применить к нашему списку. Мы только что получали list_of_students, когда вызывали в прошлый раз функцию ввода данных, и теперь мы к ней можем применить функцию sort_names, и присвоить уже переменный sorted_list, то есть отсортированный список фамилий. Давайте сделаем это. Видим, что наши все фамилии отсортировались в алфавитном порядке. Если бы мы оставили пробелы, то все фамилии, у которых пробел спереди, оказались бы в самом начале отсортированного списка, а может быть в самом конце (проверьте, как это будет). В общем, алфавитный порядок был бы нарушен, а так мы предобработали данные и поэтому можем отсортировать их легко. Наконец, нам нужно вывести все в требуемом формате. Определим функцию, которая будет вводить данные в нужном формате. Назовем ее print_list (просто print мы, опять же, не можем использовать, такое слово уже занято). Она на вход принимает предмет и список фамилий студентов. Как мы это будем делать? Во-первых, нам потребуется торжественная фраза, которую у нас просят вначале. Сначала нужно вывести вот такую фразу, что экзамен по предмету сдают столько-то человек, print. Нам нужно чтобы вместо "предмет", у нас появилось то слово, которое нам нужно. В нашем случае предмет спрятан в переменной subject, и мы хотим, чтобы она была записана большими, заглавными буквами. Хорошо. А как нам сделать, чтобы узнать, сколько именно человек сдают этот предмет? Здесь мы можем вывести длину списка students (так, начало есть). Теперь осталось вывести всех студентов. Мы можем сначала сделать просто, сказать: для всех студентов в списке студентов нужно распечатать (двоеточие) саму фамилию, просто student. Но вспоминаем, что от нас просили? Нас просили, чтобы у нас перед фамилией, стоял ее порядковый номер: первая — такая-то фамилия, второй студент — такая-то фамилия, а пока у нас этого номера нет. Как нам добыть этот номер? Опять же, существует несколько способов, но самый простой из них — это завести счетчик, который будет выводить эти номера. Сначала счетчик равен единице, и мы будем печатать как? Сделаем опять f, и будем печатать следующим образом: номер i потом точка, а потом фамилия студента, вот так. Но пока что они у нас все выведутся под первым номером, а мы хотим, чтобы номер увеличивался. Сделаем это: напишем что i — это i плюс 1 (увеличиваем каждый раз i на единичку). Посмотрим, что получится. В готовом виде наша функция выглядела бы так — это ровно то же самое, что мы только что с вами написали. Давайте это запустим. И теперь попробуем вызвать последовательно все три функции. Сначала нам нужно считать данные, потом нам нужно отсортировать список, который получили и потом нужно вывести все в правильном порядке. Запускаем, смотрим. Запускаем, название предмета у нас, давайте мы напишем плавание как-нибудь необычно, "ПлаваНИЕ", посмотрим, что из этого получится. Вот наши студенты и все вывелось: "Экзамен по предмету плавание сдают шесть человек", и по алфавиту отсортированный список фамилий.