Kodomo

Пользователь

Задание

Предупреждение

Программа, которая выглядит правильно, но не работает (не запускается или всегда валится с ошибкой), всегда заслуживает ровно 0 баллов.

Программа, которая работает, но не выполняет задание в точности, как правило, не стоит полной цены задания. Однако, она может быть хорошей почвой для вопросов! В этом случае лучше всего задавать вопрос вида: "я считаю, что здесь у него то-то так-то, но программа ведёт себя так-то, значит у него здесь что-то ещё?" (Самое сложное в ответе на вопросы – понять, какая модель поведения/устройства питона сложилась у вас в голове).

Отладка функций

Если вы написали функцию в файле (и ничего, кроме функций и импортов), то вы можете сделать вот что:

  • в IDLE нажать Run module.
  • при этом ничего не произойдёт (если нет синтаксических ошибок), и IDLE в шелле нарисует вам приглашение командной строки: ">>>"

  • теперь вы можете в командной строке запускать вашу функцию с разными аргументами и смотреть, что она возвращает, и работает ли она
  1. (0.3 балла) Напишите программу, которая выводит на экран песенку про бутылки с использованием format.

  2. (0.3 балла) Напишите функцию token_type(token), которая получает на вход токен, и возвращает слово, описывающее его тип. Одно из:

    • "lower" – все буквы, в нижнем регистре

    • "title" – все буквы, только первая в верхнем регистре

    • "upper" – все буквы, в вернем регистре

    • "mixed" – все буквы, разные регистры

    • "alnum" – буквы и цифры

    • "other" – все остальные Вы можете использовать другую классификацию, если она вам кажется более лингвистически-обоснованной, но при этом нужно её описать в вашем ответе. Я буду проверять соответствие классификации её описанию.

  3. (0.3 балла) Напишите программу, которая открывает файл words.txt, и выдаёт в файл tokens.csv таблицу из: номера токена, самого токена, его типа. (Разумеется, можно и настоятельно рекомендуется пользоваться функциями token_type из задачи 2 и tokenize из конспекта)

  4. * (1 балл) Напишите программу, которая открывает файл words.txt, и выдаёт в файл tokens.csv таблицу из: начальной позиции токена, самого токена, его типа. Начальной позицией токена является номером символа, с которого токен начинается1. Символы в файле нумеруются с нуля (учитываться должны _все_ символы в файле, включая невидимые)2. Дополнительное ограничение: в программе не должно быть функции длиннее 10 строк, и вне функций должно быть не больше 10 строк кода. (Это правильное ограничение и для всех остальных программ, которые вы будете когда-либо писать на питоне – кроме, может быть, отдельных функций).

  5. (0.1 балла) Напишите функцию lengths(words), которая получает на вход список питонских строк, и возвращает список их длин в том же порядке. Т.е. lengths(["a", "aaa", "aaa!!!"]) == [1, 3, 6]

  6. (0.1 балла) Напишите функцию average(numbers), которая получает на вход список чисел, и возвращает среднее арифметическое (без округлений). Т.е. average([1, 2, 3, 4]) == 2.5

  7. (0.1 балла) Напишите функцию stringify(list), которая получает на вход списко чего угодно, и возвращает список строк, полученных из каждого элемента в том же порядке. Т.е. stringify(["a", 1, 2]) == ["a", "1", "2"]

  8. (0.1 балла) Напишите функцию token_types(tokens), которая получает на вход список токенов, и возвращает список их типов в том же порядке. (Разумеется, можно и лучше пользоваться уже готовой функцией token_type). Т.е. token_types([u"Пушкин", u"это", u"что-то"]) == ["title", "lower", "other"]

  1. Для зануд -- в десятичной системе исчисления. (1)

  2. Другая формулировка: если у нас token из text начинается в позиции pos, то text[pos:].startswith(token) (2)