# codeЗадачи (5)
Задание 61
Про модуль CSV в Python
В файле braki.stat представлена статистика браков в РФ с 1950 по 2018 годы.
- Построить график.
- Определить, в какой год были максимальные и минимальные значения показателей.
Задание 62
В файле razvodi.stat представлена статистика разводов в РФ с 1950 по 2018 годы.
Построить вторым графиком с браками.
# codeЗадание 63
Определите три наиболее популярных вида спорта в стране, исходя из количества построенных спортивных объектов для них.
Файл с данными находится по ссылке.
Поля (столбцы) файла:
- порядковый номер строки;
- наименование спортивного объект;
- полный адрес спортивного объекта;
- виды спорта, для которых предназначен спортивный объект;
- пропускная способность объекта;
- вместимость объекта;
- площадь объекта (Га).
Разделитель между полями (столбцами) в файле: '\t'.
Кодировка файла: 'cp1251'.
PS: для сбора статистики можно воспользоваться словарем, после чего провести его сортировку по значению
Подсказка:
>>> sorted("This is a test string from Andrew".split())
['Andrew', 'This', 'a', 'from', 'is', 'string', 'test']
>>> sorted("This is a test string from Andrew".split(), key=str.lower)
['a', 'Andrew', 'from', 'is', 'string', 'test', 'This']
>>> str.lower("a")
'a'
>>> str.lower('Andrew')
'andrew'
>>> d={"t1":2, "t6":5, "t9":1}
>>> d
{'t9': 1, 't6': 5, 't1': 2}
>>> sorted(d)
['t1', 't6', 't9']
>>> d.get('t1')
2
>>> sorted(d, key=d.get)
['t9', 't1', 't6']
d={"t1":2, "t6":5, "t9":1}
genexp = [(k, d[k]) for k in sorted(d, key=d.get, reverse=True)]
for k, v in genexp:
print(k, v)# codeЗадание 64 (Объектно-ориентированное проектирование)
В этом задании можно и нужно фантазировать :-)
Провести объектно-ориентированный анализ задачи и определить объекты, которые потребуется использовать:
- создается текстовая компьютерная игра, поддерживающая одновременное управление несколькими персонажами (множество объектов);
- каждый персонаж умеет бегать, стрелять и собирать предметы;
- некоторые персонажи умеют летать (использовать наследование классов);
- каждый тип действий сопровождается определенной анимацией (подсказка: изменением координат);
- собираемые предметы могут менять характеристики действий и соответствующую анимацию (например, вдвое ускорять или, наоборот, замедлять бег персонажа).

# codeЗадание 65
Напиши программу для очистки и нормализации первой главы ‘Моби Дика’, находящегося в файле moby.txt.
- Все символы должны относиться к одному регистру.
- Удалить все знаки препинания.
- Записать слова по одному на строку во второй файл с именем
moby_clean.txt
Подсказка:
> trantab = str.maketrans({'i': '1', 'e': None})
> print(trantab)
> s = "this is string example....wow!!!"
> print(s.translate(trantab))
> intab = "aeiou"
> outtab = "12345"
> trantab = str.maketrans(intab, outtab)
> print(trantab)
> s = "this is string example....wow!!!"
> print(s.translate(trantab))
> trantab = str.maketrans("", "", "sw")
> print(trantab)
> s = "this is string example....wow!!!"
> print(s.translate(trantab))# codeЗадание 66
Прочитайте содержимое файла moby_clean.txt, полученного в задании 65. Используйте словарь для подсчета вхождений каждого слова, выведите первые 5 самых частых и самых редких слов.
# codeЗадание 67
Напишите программу, выполняющую функции простейшего калькулятора. Программа получает на вход два числа и операцию (+, -, /).
Обеспечьте корректную обработку ввода, который не преобразуется в числа. Обработайте ошибки деления на ноль.
Вход: 4 5 +
Выход: 9
Вход: 5 0 /
Выход: Ошибка деления на ноль
Вход: e 4 +
Выход: Ошибка преобразования типов
# codeЗадание 68
Файл useragents.txt содержит следующие строки:
Firefox
Chrome
Safari
Edge
Вывести все строки log-файла, где useragent отличается от представленных в файле useragents.txt.
# codeЗадание 69
Напишите калькулятор, который вычисляет арифметические выражения, заданные пользователем в постфиксной записи (обратная польская запись).
Мы добавляем числа в стек. Когда мы сталкиваемся с оператором, мы извлекаем из стека столько элементов, сколько нужно в качестве операндов, мы производим операцию и помещаем результат в стек. В итоге результат оказывается на самом верху стека (и единственным его элементом). Например при вычислении
1 2 3 * + 2 -
стек, написанный горизонтально в квадратных скобках, становится
[ ], [1], [1 2], [1 2 3], [1 6], [7], [7 2], [5].
Пример вызова:
>>> calc("1 2 + 4 * 3 +")
'15'
>>> calc("1 2 3 * + 2 -")
'5'# postfix_test.py
def calc(expr):
'''
>>> calc("1 2 + 4 * 3 +")
'15'
>>> calc("1 2 3 * + 2 -")
'5'
'''
# ...
return # ...
#print(calc("1 2 3 * + 2 -"))
import doctest
doctest.testmod()**********************************************************************
File "__main__", line 4, in __main__.calc
Failed example:
calc("1 2 + 4 * 3 +")
Expected:
'15'
Got nothing
**********************************************************************
File "__main__", line 6, in __main__.calc
Failed example:
calc("1 2 3 * + 2 -")
Expected:
'5'
Got nothing
**********************************************************************
1 items had failures:
2 of 2 in __main__.calc
***Test Failed*** 2 failures.
TestResults(failed=2, attempted=2)
Задание 70
Напишите программу, которая читает последовательность символов-разграничителей, такую как ( ) { [ ] ( ) { } }, и сообщает, когда разграничители симметричны ( { } ( ) ) или когда несимметричны, например ( ( ) } или { ( ).
Используйте стек, чтобы запомнить открытые в настоящий момент символы-разграничители.
Пример вызова:
>>> check_delimiter("( ) { [ ] ( ) { } }")
True
>>> check_delimiter("( ) { [ ] }")
True
>>> check_delimiter("( ) { [ ] ( ] { } }")
False# delimiter_test.py
def check_delimiter(s):
'''
>>> check_delimiter("( ) { [ ] ( ) { } }")
True
>>> check_delimiter("( ) { [ ] }")
True
>>> check_delimiter("( ) { [ ] ( ] { } }")
False
'''
# ...
return # ...
import doctest
doctest.testmod()**********************************************************************
File "__main__", line 4, in __main__.calc
Failed example:
calc("1 2 + 4 * 3 +")
Expected:
'15'
Got nothing
**********************************************************************
File "__main__", line 6, in __main__.calc
Failed example:
calc("1 2 3 * + 2 -")
Expected:
'5'
Got nothing
**********************************************************************
File "__main__", line 4, in __main__.check_delimiter
Failed example:
check_delimiter("( ) { [ ] ( ) { } }")
Expected:
True
Got nothing
**********************************************************************
File "__main__", line 6, in __main__.check_delimiter
Failed example:
check_delimiter("( ) { [ ] }")
Expected:
True
Got nothing
**********************************************************************
File "__main__", line 8, in __main__.check_delimiter
Failed example:
check_delimiter("( ) { [ ] ( ] { } }")
Expected:
False
Got nothing
**********************************************************************
2 items had failures:
2 of 2 in __main__.calc
3 of 3 in __main__.check_delimiter
***Test Failed*** 5 failures.
TestResults(failed=5, attempted=5)
Задание 71
Напишите функцию, которая будет генерировать случайный пароль. В пароле должно быть от 7 до 10 символов, при этом каждый символ должен быть случайным образом выбран из диапазона от 33 до 126 в таблице ASCII. Ваша функция не должна принимать на вход параметры, а возвращать будет сгенерированный пароль.
PS. Используйте функцию chr.
# codeЗадание 72
Необходимо написать функцию, проверяющую введённый пароль на надежность. Определим как надежный пароль, состоящий минимум из 8 символов и включающий хотя бы по одной букве в верхнем и нижнем регистрах и как минимум одну цифру. Функция должна возвращать True, если переданный в качестве параметра пароль отвечает требованиям надежности. В противном случае возвращаемым значением должно быть False. Необходимо запросить у пользователя пароль и оповестить его о том, является ли он достаточно надежным.
# codeЗадание 73
Используйте функции из предыдущих заданий. Напишите программу, генерирующую случайный надёжный пароль и, выводящий у его на экран. Посчитайте, с какого раза удастся создать пароль, отвечающий требованиям надежности и выведите на экран количество попыток.
# codeЗадание 74
Валидатор кредитных карт - принимает номер кредитной карты от обычного поставщика кредитных карт (Visa, MasterCard, American Express, Discoverer) и проверяет его, чтобы убедиться, что это действительный номер (посмотрите, как кредитные карты используют контрольную сумму).
Подсказка: см. алгоритм Луна.
# codeЗадание 75. Разработайте систему бронирования номеров в отеле
Дополните следующий класс:
class Hotel:
def __init__(self, num_rooms):
self._rooms = [0 for _ in range(num_rooms)] # информация о статусе номеров
# метод для бронирования номера по уникальному значению в списке
def occypy(self, room_id):
self._rooms[room_id] = 1 # бронируем номер
# метод для освобождения номера по уникальному значению в списке
def free(self, room_id):
self._rooms[room_id] = 0 # освобождаем номер
hotel = Hotel(5) # в нашем отеле, например, 5 номеров
print(hotel._rooms) # смотрим номера через атрибут self.rooms
hotel.occypy(3)
print(hotel._rooms)
hotel.free(3)
print(hotel._rooms)[0, 0, 0, 0, 0]
[0, 0, 0, 1, 0]
[0, 0, 0, 0, 0]
Задачи: - допишите метод occypy, чтобы он проверял занятость номера перед бронировнием: если номер занят, то генерируется исключение RuntimeError - напишите метод __str__ для красивой печати списка номеров через вызов функции print - напишите метод, который занимает все свободные номера в отеле - напишите метод, который возвращает долю занятых номеров - напишите метод, который освобождает все занятые номера отеля - напишите метод, который возвращает выручку, исходя из занятости комнат (стоимость комнаты - 5 тыс. у.е.) - проверьте созданные методы через создание объектов и их вызов
# здесь кодДополнительные задачи: - вместо списка создайте словарь для хранения различных типов номеров (SGL, DBL и Junior Suite, Suite) и их занятости - у комнат разная стоимость (хранить ее можно в словаре) - измените методы, написанные раннее так, чтобы учесть новые особенности номеров (например, добавляется тип номера при бронировании) - проверьте созданные методы через создание объектов и их вызов
# здесь кодЗадание 76
Данные от Сбера для анализа представлены в файле opendata.csv.
Определите с помощью стандартных модулей Python среднюю пенсию в Забайкальском крае за 2018 год.
Выполните обработку ошибок в программе.
Постройте график изменения пенсии за 2018 год в Забайкальском крае.
# codeЗадание 77
Разработайте собственный класс для работы с файлами.
Интерфейс работы с классом имеет следующий вид:
file = MyFile("text.txt", "read")
text = file.read() # происходит чтение в виде str
print(text)
file = MyFile("text.txt", "write")
text = file.write("привет!") # происходит запись строки в файл
file = MyFile("text.txt", "append")
text = file.write("привет!") # происходит добавление строки в конец файла
# указали URL
file = MyFile("https://blog.dfedorov.spb.ru", "url")
# и может читать содержимое страницы по указанному URL
text = file.read_url() # происходит чтение в виде str
print(text)
# возвращает кол-во url адресов на странице, например, методом count
count = file.count_urls()
print(count)
# происходит запись содержимого страницы по URL в указанный файл
file.write_url("text.txt")Выполните обработку возможных ошибок.
# codeЗадание 78
Исследовать эмоциональную окраску новостей на английском языке (рекомендую модули
feedparserиtextblob- хорошо работает для англ. языка).Определите наиболее часто встречающиеся слова в тексте новости на русском языке за выбранный период (рекомендую модуль
pymorphy2, использовать начальную форму и убрать союзы / в качестве альтернативы можно использовать модуль nltk).Постройте график распределения слов в новости на русском языке (рекомендую модуль word_cloud)
# codeЗадание 79
Для файла, расположенного в сети Интернет, напишите программу с использованием модуля Beautiful Soup, которая извлекает данные из HTML-страницы и сохраняет их в файле формата CSV (подсказка тут).
# code