Не только код, но и попытка объяснить себе и другим нюансы заданий данной работы.
Так уж получилось что я подзапустил учебу. Теперь приходится все вспоминать что я уже делал несколько месяцев назад.
Застрял я на третьей практической работе курса python_advanced. Все откладывал «на потом», вот итог – забыл что было в предыдущей работе. И чем дольше я туплю тем мне трудней вернуться к работе, и чем дольше я не возвращаюсь к работе тем больше я забываю о том что сделано и как это сделано. Блин, какой-то замкнутый круг.
Вот по идее каждая образовательная платформа просто обязана как-то подпинывать своих студентов. Типа - «Эй братан, ты работу сдавать собираешься или нет?!» а то мы тебя атата!!! Хотя даже не знаю работает это или нет. Ну да ладно, ближе к делу!
1 Задача. Список процессов
С помощью команды ps можно посмотреть список запущенных процессов. С флагами aux эта команда выведет информацию обо всех процессах, запущенных в системе.
Напишите функцию get_summary_rss, которая на вход принимает путь до файла с результатом выполнения команды ps aux, и возвращает суммарный объём потребляемой памяти в человекочитаемом формате. Это означает, что ответ надо перевести в байты, килобайты, мегабайты и так далее.
После выполнения команды ps aux > output_file.txt у нас появляется файл с примерно таким содержимым:
Наша программа должна открыть данный файл и суммировать все числа 6-го (если считать от нуля - 5 го столбца) ну и соответственно перевести в нужный формат.
В самом листинге программы я закомментировал основные моменты работы программы:
2 Задача. Средний размер файла
Напишите функцию get_mean_size, которая на вход принимает результат выполнения команды ls -l, а возвращает средний размер файла в каталоге.
Запустив консоль, я выбрал некий каталог у себя на компьютере где есть какие-то файлы и в нем запустил команду ls –l, получился вот такой результат:
Теперь нужно написать программу которая при выполнении команды ls –l, перенаправляла вывод команды ни на экран, ни в файл а в нашу программу, которая бы обрабатывала эти данные и вывела примерно такой вывод:
Ну и собственно листинг программы с комментариями:
3. Задача. Дешифратор
Есть некие входные данные, у которых должны быть выходные данные, то есть принимаем шифровку и из нее делаем расшифровку. Шифровка-расшифровка осуществляется по таким закономерностям:
- Каждый символ строки — либо буква, либо пробел, либо точка «.», либо две точки «..».
- Если после какой-то буквы стоит точка, значит, мы оставляем букву без изменений Саму точку при этом надо удалить.
- Если после какой-то буквы стоят две точки, то предыдущий символ надо стереть. Обе точки при этом тоже нужно удалить.
- Возможна ситуация, когда сообщение после расшифровки будет пустым. В качестве результата можно вернуть просто пустую строку.
Это всё должно выглядеть примерно так:
Программа должна работать через конвейер (pipe), например:
Я данную задачу решил при помощи «регулярных выражений»:
А далее, 3м модуле, когда идет разбор домашнего задания, там задача решена другим способом:
Задача 4. Хорошего дня!
Реализуйте endpoint /hello-world/<имя>, который возвращает строку «Привет, <имя>. Хорошей пятницы!». Вместо хорошей пятницы
endpoint должен уметь желать хорошего дня недели в целом, на русском языке.
Пример запроса, сделанного в субботу:
/hello-world/Саша → Привет, Саша. Хорошей субботы!
Дополнительно нужно определить сколько памяти занимают list, tuple, dict с помощью "print.getsizeof(list or tuple or dict)".
Как показали опыты, кортеж (tuple) меньше всего занимает памяти - 96 байт, list - 120, dict 360 байт. Но словарь (dict), мне кажется, наиболее удобным. Программу я написал с использованием кортежа, было жеж условие - выбрать оптимальный способ хранения дней недели.
В следующем модуле (при написании тестов) используется другой вариант программы:
5 Задача. Максимальное число
Реализуйте endpoint, начинающийся с /max_number, в который можно передать список чисел, разделённых слешем /. Endpoint должен
вернуть текст «Максимальное переданное число {number}», где number — выделенное курсивом наибольшее из переданных чисел.
Примеры:
/max_number/10/2/9/1
Максимальное число: 10
/max_number/1/1/1/1/1/1/1/2
Максимальное число: 2
Тут сложного ничего нет. Используется конструкция <path:nunbers>, там всё что идет после endpoint /max_number/ будет восприниматься как одна строка и остается только разбить ее с помощью split('/') привести к int и найти максимальное число.
Само собой делаем обработку ошибок чтобы в строчку не затесались символы отличные от цифр.
6 Задача. Превью файла
Реализуйте endpoint, который показывает превью файла, принимая на вход два параметра: SIZE (int) и RELATIVE_PATH — и возвращая
первые SIZE символов файла по указанному в RELATIVE_PATH пути.
Endpoint должен вернуть страницу с двумя строками.
В первой строке будет содержаться информация о файле: его абсолютный путь и размер файла в символах, а во второй строке — первые SIZE символов из файла:
Пример:
docs/simple.txt:
hello world!
/preview/8/docs/simple.txt
/home/user/module_2/docs/simple.txt 8
hello wo
/preview/100/docs/simple.txt
/home/user/module_2/docs/simple.txt 12
hello world!
7 Задача. Учет финансов
Реализуйте приложение для учёта финансов, умеющее запоминать, сколько денег было потрачено за день, а также показывать затраты
за отдельный месяц и за целый год.
В программе должно быть три endpoints:
- /add/<date>/<int:number> — сохранение информации о совершённой в рублях трате за какой-то день;
- /calculate/<int:year> — получение суммарных трат за указанный год;
- /calculate/<int:year>/<int:month> — получение суммарных трат за указанные год и месяц.
Дата для /add/ передаётся в формате YYYYMMDD, где YYYY — год, MM — месяц (от 1 до 12), DD — число (от 01 до 31). Гарантируется, что
переданная дата имеет такой формат и она корректна (никаких 31 февраля).
В принципе, по коду все понятно, но если кому-то нужно какое-то пояснение, обязательно отвечу в комментариях.
На этом всё, всем всяческих благ и успехов в учебе.