Практика 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. Будет тест!!!