Задания в классе

Тест по структурам данных

Материалы для подготовки: Глава 12 “Структура данных” (стр. 79 по 90) из книги A Byte of Python.

Пройти тест

Compressed Sequence

Написать программу которая сжимает массив чисел. Например, "1 1 3 3 3 2 2 2 2 14 14 14 11 11 11 20" сжимается в "2 1 3 3 4 2 3 14 3 11 1 20". То есть это читается так - среди чисел две единицы, три тройки, четыре двойки.

Сохраняйте порядок в котором встречаются числа во входном наборе.

# encoding: utf-8
import unittest

def compressed_sequence(sentence):
    return ""

class TestCompressedSequence(unittest.TestCase):
    def test_empty(self):
        self.assertEqual(compressed_sequence(""), "")

    def test_small(self):
        self.assertEqual(compressed_sequence("7"), "1 7")

    def test_small2(self):
        self.assertEqual(compressed_sequence("10 10 20"), "2 10 1 20")

    def test1(self):
        self.assertEqual(compressed_sequence(
            "40 40 40 40 29 29 29 29 29 29 29 29 57 57 92 92 92 92 92 86 86 86 86 86 86 86 86 86 86"
        ), "4 40 8 29 2 57 5 92 10 86")

    def test2(self):
        self.assertEqual(compressed_sequence(
            "1 1 3 3 3 2 2 2 2 14 14 14 11 11 11 20"
        ), "2 1 3 3 4 2 3 14 3 11 1 20")

    def test3(self):
        self.assertEqual(compressed_sequence(
            "1 1 3 3 3 2 2 2 2 14 14 14 11 11 11 20"
        ), "2 1 3 3 4 2 3 14 3 11 1 20")

if __name__ == '__main__':
    unittest.main()

Отделить строки от чисел

Дана строка с числами и словами, разделенными запятой. Нужно отделить строки от чисел, но так чтобы остался порядок элементов такой, какой и был раньше. Например 8,33,21,0,16,50,37,0,melon,7,apricot,peach,pineapple,17,21 => melon,apricot,peach,pineapple|8,33,21,0,16,50,37,0,7,17,21.

Если в наборе только числа или только слова, то разделитель | не ставится.

# encoding: utf-8
import unittest

def mixed_content(sentence):
    return ""

class TestMixedContent(unittest.TestCase):
    def test_empty(self):
        self.assertEqual(mixed_content(""), "")

    def test_small(self):
        self.assertEqual(mixed_content("1,apple,2"), "apple|1,2")

    def test_only_numbers(self):
        self.assertEqual(mixed_content("1,2"), "1,2")

    def test_only_words(self):
        self.assertEqual(mixed_content("bb,aa"), "bb,aa")

    def test(self):
        self.assertEqual(
            mixed_content("8,33,21,0,16,50,37,0,melon,7,apricot,peach,pineapple,17,21"),
            "melon,apricot,peach,pineapple|8,33,21,0,16,50,37,0,7,17,21"
        )

if __name__ == '__main__':
    unittest.main()

Домашнее задание

Программирование

Написать калькулятор для обратной польской нотации.

Например, это выражение 5 1 2 + 4 * + 3 - означает 5 + ((1 + 2) * 4) - 3, что равно 14.

Hints