Практика 2
Задание в классе
Тест по PEP8
Сумма цифр
Посчитать сумму цифр данного натурального числа. Например, summa(1234) == 1+2+3+4 == 10
.
def summa(num):
return -1# тут ваш код
cases = [(1234, 10), (1024, 7), (0,0)]
for case in cases:
res = summa(case[0])
print("Expected: {}. Got: {}. Input: {}. Assert: {}".format(case[1], res, case[0], res == case[1]))
Скрытые числа
Дана строка из символов. За некоторыми буквами “скрыта” цифра. За “a” скрыто 0, за “b” скрыто 1 и так далее до “j”, за которым скрыто 9. Другие символы ничего не значат. Цифры остаются как есть.
Написать программу, которая строку превращает в массив чисел. Наприме, вход: Xa,}A#5N}{xOBwYBHIlH,#W
, выход: [0,5].
Hints
- cоветую завести словарь для сопоставления сомвола - числу, а не использовать ASCII коды. Подумайте над тем, если я изменю задание и попрошу заменять случайный набор emojii 😉 на цифры, а цифры разрежу.
def hidden_numbers(s):
return []
# test cases
cases = [("abcdefghik",[0,1,2,3,4,5,6,7,8]),
("Xa,}A#5N}{xOBwYBHIlH,#W",[0,5]),
("(ABW>'yy^'M{X-K}q,",[]),
("6240488",[6,2,4,0,4,8,8])]
for case in cases:
res = hidden_numbers(case[0])
print("Expected: {}. Got: {}. Input: {}. Assert: {}".format(case[1], res, case[0], res == case[1]))
Word Count
Посчитать сколько раз каждое слово повторялось в предложении. Вывести 10 самых частых слов отсортированных по частоте. Игнорировать однобуквенные слова и пунктуацию. Слова в предложении - это наборы символов отделенные друг от друга пробельными символами.
Hints
- Используем встроенную сортировку
sort
. Как пользоваться написано тут. - Советую использовать словарь для хранения частот слов. Потом превратить его в массив кортежей (
dict.items()
) и отсортировать по частоте методомsorted
. Напоминаю, что словарь сортировать нельзя! - Разделять предложение на слова можно методом
re.split
из пакетаre
, который принимает на вход регулярное выражение для разделителя. - Проверьте работы алгоритма на большой книге, например “Война и мир”
- Для чтения из файла используйте функцию
text = open('filename.txt', encoding='utf-8').read()
Test cases
def word_count(sentence):
return [] # тут ваш код
cases = [("aa aa aa bb cc cc A B C a AA", ["aa", "cc", "bb"]), ("", [])]
for case in cases:
res = word_count(case[0])
print("Expected: {}. Got: {}. Input: {}. Assert: {}".format(case[1], res, case[0], res == case[1]))
Домашнее задание
Программирование
Написать программу, которая выводит наибольший простой палиндром в заданном диапазоне.
# encoding: utf-8
import unittest
def prime_palindrome(supremum):
# Ваш код тут
# Если нужно, то можно создать дополнительные функции,
# Но контрак этой нельзя менять(то есть имя и набор аргументов)
return -1
# Тут тесты
class TestPrimePalindrome(unittest.TestCase):
def test_small(self):
self.assertEqual(prime_palindrome(20), 11)
def test_big(self):
self.assertEqual(prime_palindrome(1000), 929)
def test_enormous(self):
self.assertEqual(prime_palindrome(100000), 98689)
if __name__ == '__main__':
unittest.main()
Чтение
- Глава 12 “Структура данных” (стр. 79 по 90) из книги A Byte of Python. Будет тест!!!