Про модуль CSV в Python.
В файле braki.stat представлена статистика браков в РФ с 1950 по 2018 годы.
# code
В файле razvodi.stat представлена статистика разводов в РФ с 1950 по 2018 годы.
Построить вторым графиком с браками.
# code
Определите три наиболее популярных вида спорта в стране, исходя из количества построенных спортивных объектов для них.
Файл с данными находится по ссылке.
Поля (столбцы) файла:
Разделитель между полями (столбцами) в файле: '\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
В этом задании можно и нужно фантазировать :-)
Провести объектно-ориентированный анализ задачи и определить объекты, которые потребуется использовать:
# code
Напиши программу для очистки и нормализации первой главы 'Моби Дика', находящегося в файле 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
Прочитайте содержимое файла moby_clean.txt
, полученного в задании 65. Используйте словарь для подсчета вхождений каждого слова, выведите первые 5
самых частых и самых редких слов.
# code
Напишите программу, выполняющую функции простейшего калькулятора. Программа получает на вход два числа и операцию (+
, -
, /
).
Обеспечьте корректную обработку ввода, который не преобразуется в числа. Обработайте ошибки деления на ноль.
Вход: 4 5 +
Выход: 9
Вход: 5 0 /
Выход: Ошибка деления на ноль
Вход: e 4 +
Выход: Ошибка преобразования типов
# code
# code
Напишите калькулятор, который вычисляет арифметические выражения, заданные пользователем в постфиксной записи (обратная польская запись).
Мы добавляем числа в стек. Когда мы сталкиваемся с оператором, мы извлекаем из стека столько элементов, сколько нужно в качестве операндов, мы производим операцию и помещаем результат в стек. В итоге результат оказывается на самом верху стека (и единственным его элементом). Например при вычислении
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()
Напишите программу, которая читает последовательность символов-разграничителей, такую как ( ) { [ ] ( ) { } }
, и сообщает, когда разграничители симметричны ( { } ( ) )
или когда несимметричны, например ( ( ) }
или { ( )
.
Используйте стек, чтобы запомнить открытые в настоящий момент символы-разграничители.
Пример вызова:
>>> 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()
Напишите функцию, которая будет генерировать случайный пароль. В пароле должно быть от 7
до 10
символов, при этом каждый символ должен быть случайным образом выбран из диапазона от 33
до 126
в таблице ASCII. Ваша функция не должна принимать на вход параметры, а возвращать будет сгенерированный пароль.
PS. Используйте функцию chr
.
# code
Необходимо написать функцию, проверяющую введённый пароль на надежность. Определим как надежный пароль, состоящий минимум из 8
символов и включающий хотя бы по одной букве в верхнем и нижнем регистрах и как минимум одну цифру. Функция должна возвращать True
, если переданный в качестве параметра пароль отвечает требованиям надежности. В противном случае возвращаемым значением должно быть False
. Необходимо запросить у пользователя пароль и оповестить его о том, является ли он достаточно надежным.
# code
Используйте функции из предыдущих заданий. Напишите программу, генерирующую случайный надёжный пароль и, выводящий у его на экран. Посчитайте, с какого раза удастся создать пароль, отвечающий требованиям надежности и выведите на экран количество попыток.
# code
Валидатор кредитных карт - принимает номер кредитной карты от обычного поставщика кредитных карт (Visa, MasterCard, American Express, Discoverer) и проверяет его, чтобы убедиться, что это действительный номер (посмотрите, как кредитные карты используют контрольную сумму).
Подсказка: см. алгоритм Луна.
# code
Дополните следующий класс:
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
# здесь код
Дополнительные задачи:
# здесь код
Данные от Сбера для анализа представлены в файле opendata.csv.
Определите с помощью стандартных модулей Python среднюю пенсию в Забайкальском крае за 2018 год.
Выполните обработку ошибок в программе.
Постройте график изменения пенсии за 2018 год в Забайкальском крае.
# code
Разработайте собственный класс для работы с файлами.
Интерфейс работы с классом имеет следующий вид:
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
1) Исследовать эмоциональную окраску новостей на английском языке (рекомендую модули feedparser
и textblob
- хорошо работает для англ. языка).
2) Определите наиболее часто встречающиеся слова в тексте новости на русском языке за выбранный период (рекомендую модуль pymorphy2
, использовать начальную форму и убрать союзы / в качестве альтернативы можно использовать модуль nltk).
3) Постройте график распределения слов в новости на русском языке (рекомендую модуль word_cloud)
# code
# code