3 курс 1 семестр / Z9411_TP_LR4_Kafka
.docxМИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ
федеральное государственное автономное образовательное учреждение высшего образования
«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ АЭРОКОСМИЧЕСКОГО ПРИБОРОСТРОЕНИЯ»
ИНСТИТУТ НЕПРЕРЫВНОГО И ДИСТАНЦИОННОГО ОБРАЗОВАНИЯ
КАФЕДРА 41
|
ОЦЕНКА
ПРЕПОДАВАТЕЛЬ
канд. тех. наук, доцент |
|
|
|
Аграновский А. В. |
должность, уч. степень, звание |
|
подпись, дата |
|
инициалы, фамилия |
ЛАБОРАТОРНАЯ РАБОТА №4
|
Смешанные алгоритмы
|
по дисциплине: Технологии программирования |
РАБОТУ ВЫПОЛНИЛ
СТУДЕНТ ГР. № |
Z9411 |
|
|
|
Кафка Р. С. |
|
номер группы |
|
подпись, дата |
|
инициалы, фамилия |
Студенческий билет № |
2019/3603 |
|
|
|
Шифр ИНДО |
|
Санкт-Петербург 2022
Постановка задачи
Вариант №7. Дан текст. Вывести в алфавитном порядке все буквы, которые входят в этот текст по одному разу.
Ограничений на входные данные нет.
Математическая модель
Разбиваем строку на символы. В процессе чтения символов строки записываем в новый список все символы, которые не встречались до этого. По окончании чтения строки сортируем новый список. Потом удаляем все символы, которые не являются буквами из нового списка и выводим его.
Описание разработанной программы
Список входных данных представлен в таблице №1.
Таблица №1 - список входных данных
Имя переменной |
Тип переменной |
Назначение |
text |
String |
Хранит в себе текст |
Список выходных данных представлен в таблице №2.
Таблица №2 - список выходных данных
Тип |
Назначение |
List (Кортеж/Список) |
Содержит в себе все буквы в алфавитном порядке, которые входили в изначальный текст. |
Программе даётся текст. После этого текст разделяется на отдельные символы и добавляются в список. Создаётся новый пустой список. Программа начинает проверять каждый символ в первом списке и сравнивать с символами во втором новом списке. Если такой символ ещё не встречается – заносит его туда. Во избежание проблем дублирования заглавных и строчных символов используется метод string lower(), которая изменяет любую букву на строчную. Остальные символы не будут являться ошибкой, в методе это предусмотрено.
После того, как программа перебрала все символы в первом списке и добавила все возможные символы во второй список, второй список сортируется методом list sort(), чтобы все буквы были в алфавитном порядке. Затем, чтобы следовать техническому заданию, из списка убираются все символы, которые не являются буквами. Чтобы избежать проблем, которые могут возникнуть при перебирании списка в теле цикла, программа работает с копией списка с помощью срезов.
В конце выводится обработанный список.
Если в процессе обработки программы будут даны некорректные данные или произойдёт ошибка на одном из этапов – программа выведет сообщение об ошибке.
Блок-схема разработанной программы представлена на рисунке 1.
Рисунок 1 – Блок-схема основной функции
Листинг основного программного кода:
def LAB4_VAR_7(text): """ Выводит в алфавитном порядке все буквы, которые входят в данный текст по одному разу. """ try: text.split() #Разбивает строку на одиночные символы letters = [] #Создаём пустой список #Цикл по каждой букве в разбитой строке for i in text: if i.lower() not in letters: #Если буквы всё ещё нет в контейнере, то добавляет её туда letters.append(i.lower()) #Буква добавляется строчной чтобы избежать дублирования с заглавными letters.sort() #Цикл убирает из списка все символы, которые не являются буквами for i in letters[:]: #Работаем с копией списка при помощи среза чтобы избежать проблем if not i.isalpha(): letters.remove(i) return letters
except AttributeError: print("ОШИБКА. Был введён не текст, а число.") text = str(input("Введите текст: ")) return LAB4_VAR_7(text)
|
Листинг кода для тестов:
def TEST1_LAB4_VAR_7(): expected_result = ["a", "e", "g", "h", "i", "o", "r", "s", "t", "v", "w"] res = LAB4_VAR_7("the weather is hot, we go to the river")
if expected_result == res: print("Тест 1 - ОК") else: print("Тест 1 - FAIL")
def TEST2_LAB4_VAR_7(): expected_result = ["a", "d", "e", "i", "m", "n", "s", "t", "u", "y", "z"] res = LAB4_VAR_7("My name is Zenya. I'm a student.")
if expected_result == res: print("Тест 2 - ОК") else: print("Тест 2 - FAIL")
def TEST3_LAB4_VAR_7(): expected_result = ["а", "в", "г", "д", "е", "и", "л", "н", "о", "с", "т", "у", "ц", "ю", "я"] res = LAB4_VAR_7("на улице светит солнце, люди гуляют")
if expected_result == res: print("Тест 3 - ОК") else: print("Тест 3 - FAIL")
def TEST4_LAB4_VAR_7(): expected_result = ["а", "в", "д", "е", "з", "и", "к", "л", "н", "о", "п", "с", "т", "ц"] res = LAB4_VAR_7("На востоке солнце встает. А на западе виден закат.")
if expected_result == res: print("Тест 4 - ОК") else: print("Тест 4 - FAIL")
def TEST5_LAB4_VAR_7(): expected_result = ["а", "в", "д", "е", "ж", "и", "й", "л", "м", "н", "о", "п", "р", "с", "т", "у", "ч", "ь",] res = LAB4_VAR_7(3101998)
if expected_result == res: print("Тест 5 - ОК") else: print("Тест 5 - FAIL") |
Описание тестового набора
Тестирование будет производится на следующих данных, представленных в таблице №3.
Таблица №3 – тестовый набор
Описание тестового случая |
Входные данные |
Ожидаемый результат |
Результат теста |
Предложение на английском со строчными буквами |
'the weather is hot, we go to the river' |
['a', 'e', 'g', 'h', 'i', 'o', 'r', 's', 't', 'v', 'w'] |
Пройден |
Предложение на английском |
'My name is Zenya. I’m a student.' |
['a', 'd', 'e', 'i', 'm', 'n', 's', 't', 'u', 'y', 'z'] |
Пройден |
Предложение на русском со строчными буквами |
'на улице светит солнце, люди гуляют' |
['а', 'в', 'г', 'д', 'е', 'и', 'л', 'н', 'о', 'с', 'т', 'у', 'ц', 'ю', 'я'] |
Пройден |
Предложение на русском |
'На востоке солнце встает. А на западе виден закат.' |
['а', 'в', 'д', 'е', 'з', 'и', 'к', 'л', 'н', 'о', 'п', 'с', 'т', 'ц'] |
Пройден |
Ошибочные данные |
3101998 Затем «Андрей Владимирович, поставьте, пожалуйста, мне 5!» |
Сообщение об ошибке Затем ["а", "в", "д", "е", "ж", "и", "й", "л", "м", "н", "о", "п", "р", "с", "т", "у", "ч", "ь",] |
Пройден |
Примеры работы программы
На рисунке 2 представлен пример работы программы.
Рисунок 2 – Пример работы программы
Выводы
Основная программа разработана верно: она выполняет поставленную задачу и успешно проходит все тестовые случаи, возвращает ожидаемые результаты.
В ходе выполнения лабораторной работы была реализована программа, которая выводит в алфавитном порядке все буквы, которые встречаются в заданном тексте. Были получены практические навыки написание расчётных программ на языке программирования Python.