Домашнее задание
Дедлайн: 29 января 23:59:59
Мета-задачка на 8 баллов
Пусть у вас есть текстовый файл с кодом на питоне.
Напишите функцию inspect_func
, которая принимает на себя название файла с кодом на питоне и название выходного файла.
В свою очередь программа должна найти в коде все функции (давайте считать, что все по pep-8, то есть после запятых есть пробелы, перед скобками нет пробела и тд, а также нет всяких слэшей, звездочек, типизации…), получить вот такой словарь
{
'fancy_function': {
'args': ['first_arg', 'second_arg'],
'kwargs': {
'third_arg': 'value3',
'fourth_arg': 'value4'
}
}
}
и записать его в формате JSON в указанный выходной файл.
Если у функции нет позиционных аргументов, то для нее будет 'args': []
, аналогично, если нет именованных, то будет 'kwargs': {}
.
В примере args – это позиционные аргументы функции, а kwargs – это именованые. Более поняный пример:
def func(a, b, c=1):
...
превратится в
{
"func": {
"args": ["a", "b"],
"kwargs": {
"c": 1
}
}
}
Значениями именованных аргументов (кваргов) могут быть только числа и строки из латинских букв/цифр.
Найдите где-нибудь (или напишите сами) код, который содержит минимум 3 различные функции (желательно, чтобы покрывало все возможные случаи с args/kwargs), обработайте файл с помощью написанной программы и положите результат в файл output.json
.
Оценка за задание будет складываться следующим образом:
- (2 балла) Решение оформлено в виде функции
inspect_func
и дает корректный результат хотя бы при наличии одной функции в файле. - (2 балла) Код корректно работает для любого количества функций в текстовом файле, в том числе 0.
- (3 балла) К домашке приложен найденных или написанный пример кода, на котором проверялось решение, также приложен ответ в файле output.json, соответствующий входному файлу.
- (1 балла) В работе учтены случаи, когда у функции нет позиционных или именованных аргументов, либо того и другого.
Задача еще на 2 балла
WARNING!!! Задачу надо решать через рекурсию. Без рекурсии приниматься не будет.
Представьте, что у вас есть последовательность команд.
В примере ниже с долларом в начале указаны команды, а без доллара – их вывод.
Вы уже немножечко знаете, как работать с консолькой, но напомним, что
cd x
– позволяет перейти в директорию x. Если написаноcd /
, то это означает “перейти в корень”, еслиcd ..
, то вернуться на папку назадls
– выводит, что находится в текущей директории
$ cd /
$ ls
dir a
14848514 b.txt
8504156 c.dat
dir d
$ cd a
$ ls
dir e
29116 f
2557 g
62596 h.lst
$ cd e
$ ls
584 i
$ cd ..
$ cd ..
$ cd d
$ ls
4060174 j
8033020 d.log
5626152 d.ext
7214296 k
Для упрощения будем считать, что если пользователь вводит команду ls
, то ему выводится список папкок и файлов. Если это папка, то она будет указана в формате dir a
, если файл, то в формате 12345 x
, где x
– название, а 12345 – размер (в байтах).
Пример выше для удобства можно представить в виде дерева.
- / (dir)
- a (dir)
- e (dir)
- i (file, size=584)
- f (file, size=29116)
- g (file, size=2557)
- h.lst (file, size=62596)
- b.txt (file, size=14848514)
- c.dat (file, size=8504156)
- d (dir)
- j (file, size=4060174)
- d.log (file, size=8033020)
- d.ext (file, size=5626152)
- k (file, size=7214296)
Итак, вам нужно найти все директории, размер которых не больше 100000 и получить их сумму. В примере выше, это директории a
и e
. Получится 94853 + 584 = 95437.
Ссылка на файл, на который надо получить ответ: тык. Ответ можете написать комментарием в коде, либо отдельным файлом.
Важно
Задачи как обычно сдавайте на гитлаб в отдельную папку.