09.12 Командная строка и объекты
У всех уже должны быть аккаунты на GH/GL!
- а также ssh-ключи для доступа в репозитории на GH/GL
- Заведение хранилища для практикума
- На git.cs.msu.ru под названием pythonprac или на GH/GL!
Повторение git clone / hack / git add / git commit / git push
- Вывод и ввод данных в Python:
print()
input() и eval(input())
Что такое eval()
Конструкции вида a, b, c = eval(input())
Простейшая программа, которая вводит и выводит
Организовать ввод так, чтобы данная программа:
- выдала следующее:
<class 'int'> <class 'str'> <class 'builtin_function_or_method'>
- выдала следующее:
- Самостоятельное тестирование
Перенаправление ввода-вывода с помощью "<" и ">"; понятие о stdout vs stderr
Сравнение двух файлов с помощью diff
если у вас windows и нет утилиты diff: имеется утилита на Python
- Где она лежит?? В windows скорее всего тут:
python3 -c 'import os; print(os.path.join(os.path.dirname(os.__file__), "Tools", "scripts", "diff.py"))'
В ALT начиная с Python 3.11 — /usr/share/python3.11/Tools/scripts/diff.py
А потом python3 путь-до-diff.py ключи файл1 файл2
Сравнение двух файлов с помощью diff:
Создать два файла из результатов python3 -m calendar 2023 месяц, где месяц — это 09 и 12
Сравнить их с ключом -u
- Решение заданий
Задачa_0 (демо):
- Написать программу, которая вводит два числа через запятую и выводит наибольшее из них
- Написать три теста
- Решение Задачи_0
- (клон репозитория)
- Создать каталог
mkdir `date "+%Y%m%d"`/0
- перейти туда
написать программу prog.py
создать каталог mkdir check
создать три входных файла: echo "число, число" > check/1.in" (а также check/2.in и check/3.in)
создать три эталонных вывода (проверить глазками, что они действительно эталонные☺): python3 prog.py < check/1.in > check/1.out)
NB!: Обязательный commit и push во время семинара
Д/З
TODO способ регистрации
Задача_1:
- напишите программу, которая:
получает через стандартный вход (stdin) последовательность целых чисел в виде списка, например
[7,2,3]
- сортирует эти числа по возрастанию
выводит результат в стандартный выход (stdout) через пробел и запятую
2, 3, 7
составьте вручную 3 тестовых примера (check/*.{in,out}), содержащих:
- текстовый файл с входными данными
- текстовый файл с эталонными выходными данными (соответствующими входным, в правильном формате)
- протестируйте программу каждом из составленных примеров:
- запустите программу с подачей входных данных из подготовленного файла и перенаправлением вывода в другой текстовый файл
- при помощи команды diff проверьте совпадение файла с выводом и файла с эталонным выводом
- напишите "ошибочную" программу, которая выдает на выход числа в том же порядке, в котором получила на вход. Протестируйте её на подготовленных входных данных. Каким должен быть тестовый пример, чтобы ошибка в программе не была обнаружена?
Обязательный commit и push
- напишите программу, которая: