Python >

Разработка программных модулей

2024-2025 учебный год

Практические занятия

Практика 9 
Работа с объектами через интерфейсы 
1. Решите одну из задач практического занятия в ОС Linux, оформив Python-скрипт с помощью строки-заголовка «шебанг» (shebang):
#!/usr/bin/env python3
Установите права пользователя на запуск скрипта и протестируйте его:
chmod +x test.py
2. В заданном тексте определить частоту (в долях от общего количества букв), с которой встречаются различные буквы.
3. Дан словарь, состоящий из пар слов. Каждое слово является синонимом к парному ему слову. Все слова в словаре различны. Для одного из слов словаря определите его синоним.
4. Города и страны. В словаре countries каждый ключ — это название страны, а его значения - список из 3 крупнейших городов, которые в этой стране расположены. Ваша задача написать программу, которая на вход принимает название города и сохраняет ее в переменную city, а на выходе выдает информацию о том, в какой стране находится указанный город. Если страна успешно найдена, выведите сообщение:
"INFO: <указанный_город> is a city in <найденная_страна>". 
В противном случае:
"ERROR: Country for <указанный_город> is not found"
countries = {
    'Sweden': ['Stockholm', 'Goteborg', 'Malmo'],
    'Norway': ['Oslo', 'Bergen', 'Trondheim'],
    'England': ['London', 'Birmingham', 'Manchester'],
    'Germany': ['Berlin', 'Hamburg', 'Munich'],
    'France': ['Paris', 'Marseille', 'Toulouse']
}
city = input()
# Напишите ваш код ниже
5. Азбука Морзе. Вам дан текст на английском языке. Закодируйте его с помощью азбуки Морзе, где каждой букве соответствует последовательность точек и тире. В качестве тире используйте обычный дефис: «-», а в качестве точки — точку «.». Например, буква «g» превратится в трехсимвольную строку «--.». Ниже в переменной morze для вашего удобства хранится словарь соответствия латинских букв коду Морзе.
Входные данные
В одной строке вам дан текст, который состоит из латинских букв и пробелов. 
Других символов в тексте нет, также не может встретиться двух и более пробелов подряд.

Выходные данные
Выведите каждое слово исходного текста, закодированное азбукой Морзе, 
на отдельной строке. Количество строк в ответе должно совпадать с количеством слов 
в исходном тексте. Между закодированными буквами ставится ровно один пробел. 
Например, слово «Help» превратится в «.... . .-.. .--.». 
Обратите внимание, что строчные и заглавные буквы кодируются одинаково.
Исходный текст
Ignition sequence start
Перевод
•• ——• —• •• — •• ——— —• 
••• • ——•— ••— • —• —•—• • 
••• — •— •—• — 
morze = {'a': '•—', 'b': '—•••', 'c': '—•—•', 'd': '—••',
         'e': '•', 'f': '••—•', 'g': '——•', 'h': '••••',
         'i': '••', 'j': '•———', 'k': '—•—', 'l': '•—••',
         'm': '——', 'n': '—•', 'o': '———', 'p': '•——•',
         'q': '——•—', 'r': '•—•', 's': '•••', 't': '—',
         'u': '••—', 'v': '•••—', 'w': '•——', 'x': '—••—',
         'y': '—•——', 'z': '——••'}
# ваш код здесь
Тесты

Входные данные:
Ignition sequence start

Выходные данные:
•• ——• —• •• — •• ——— —•
••• • ——•— ••— • —• —•—• •
••• — •— •—• —

Входные данные:
Hello world

Выходные данные:
•••• • •—•• •—•• ———
•—— ——— •—• •—•• —••

Входные данные:
memento mori

Выходные данные:
—— • —— • —• — ———
—— ——— •—• ••

Входные данные:
Apple

Выходные данные:
•— •——• •——• •—•• •

Входные данные:
Divide et impera
Выходные данные:
—•• •• •••— •• —•• •
• —
•• —— •——• • •—• •—
6. Служба электронных писем в Посташтате. В некотором городе Посташтат открывается новая служба по доставке электронных писем. Нужно запустить проект как можно быстрее, а потому администрация сайта просит вас помочь им наладить систему регистрации новых пользователей. Регистрация должна работать следующим образом: если новый пользователь хочет зарегистрироваться на сайте, то он должен послать системе запрос name со своим именем. Система должна определить, существует ли уже такое имя в базе данных. Если такого имени не существует, то оно заносится в базу данных системы и пользователю возвращается ответ "ОК", подтверждающий успешную регистрацию в системе почтовых отправлений электронных писем. А если пользователь с таким именем уже существует, то система должна сформировать новое имя и выдать его пользователю в качестве подсказки, при этом сама подсказка также добавляется в базу данных. Новое имя формируется следующим образом: к name последовательно приписываются числа, начиная с 1 (name1, name2 и так далее), и среди них находят такое наименьшее i, что namei еще не содержится в системе.
Входные данные
В первой строке входных данных задано число n (1 ≤ n ≤ 100000). 
Следующие n строк содержат запросы к системе. Каждый запрос представляет 
собой непустую строку длиной не более 32 символов, состоящую только 
из строчных букв латинского алфавита.

Выходные данные
В выходных данных должно содержаться n строк — ответы системы на запросы: 
"OK" в случае успешной регистрации, или подсказка с новым именем, 
если запрашиваемое уже занято.
Код
logins = {}
n = int(input())
#ваш код ниже
Тесты

Входные данные:
4
abc
abcd
abc
acab

Выходные данные:
OK
OK
abc1
OK

Входные данные:
3
b
b
b

Выходные данные:
OK
b1
b2

Входные данные:
3
vhn
vhn
h

Выходные данные:
OK
vhn1
OK

Входные данные:
4
d
hd
d
h

Выходные данные:
OK
OK
d1
OK

Входные данные:
10
bhnqaptmp
bhnqaptmp
bhnqaptmp
bhnqaptmp
bhnqaptmp
bhnqaptmp
bhnqaptmp
bhnqaptmp
bhnqaptmp
bhnqaptmp

Выходные данные:
OK
bhnqaptmp1
bhnqaptmp2
bhnqaptmp3
bhnqaptmp4
bhnqaptmp5
bhnqaptmp6
bhnqaptmp7
bhnqaptmp8
bhnqaptmp9

Входные данные:
10
fpqhfouqdldravpjttarh
fpqhfouqdldravpjttarh
fpqhfouqdldravpjttarh
fpqhfouqdldravpjttarh
fpqhfouqdldravpjttarh
fpqhfouqdldravpjttarh
jmvlplnrmba
fpqhfouqdldravpjttarh
jmvlplnrmba
fpqhfouqdldravpjttarh

Выходные данные:
OK
fpqhfouqdldravpjttarh1
fpqhfouqdldravpjttarh2
fpqhfouqdldravpjttarh3
fpqhfouqdldravpjttarh4
fpqhfouqdldravpjttarh5
OK
fpqhfouqdldravpjttarh6
jmvlplnrmba1
fpqhfouqdldravpjttarh7
7. По примеру 5.1 из лекции создать модуль с классами Сотрудник (Employee) и Генератор отчетов (ReportGenerator). Дополните программу модулем main, который использует модуль с классами.
8. По примеру из лекции создать RAD-средствами QtDesigner оконное приложение с помощью модуля PyQt5. При нажатии на кнопку Start выводится надпись «Start». Доработать программу, добавив кнопку Stop выводящую надпись «Stop». Для установки модуля воспользуйтесь следующими командами:
pip install pyqt5
pip install pyqt5-tools
python -m pip install pyqt5
python -m pip install pyqt5-tools
pip help
pip show package_name
pip uninstall package_name
pip search
Домашнее задание
Работа с объектами через интерфейсы. 
Объявление интерфейсов. 
Объявление свойств и методов интерфейсов. 
Реализация интерфейсов в классе.