4852
Комментарий:
|
← Версия 14 от 2022-09-06 13:36:20 ⇥
6580
Случайно отредактировал прошлый год
|
Удаления помечены так. | Добавления помечены так. |
Строка 2: | Строка 2: |
* /!\ У всех уже должны быть аккаунты на GH/GL! * Заведение хранилища для практикума * На git.cs.msu.ru под названием pythonprac или на GH/GL! * Повторение git clone / hack / git add / git commit / git push |
'''FIXME''' повторение git clone / hack/ git add / git commit / git push * (с прошлого раза) {i} Использование `git.cs.msu.ru`/`prac` * [[../RepoStruct|Структура git-репозитория для практикума]] * {i} Регистрация на [[http://ejudge.cs.msu.ru/register?action=207&contest_id=164|Ejudge]] (164 турнир) для сдачи заданий по '''лекциям''' * Правила проверки Д/З в EJudge |
Строка 12: | Строка 13: |
* {i} Организовать ввод так, чтобы данная программа: {{{#!highlight py3 a, b, c = eval(input()) print(type(a), type(b), type(c)) }}} выдала следующее: {{{ <class 'int'> <class 'str'> <class 'builtin_function_or_method'> }}} |
* <!> Задача_1 на эксперименты с вводом (см. ниже раздел с задачами) |
Строка 22: | Строка 15: |
* Перенаправление ввода-вывода с помощью "`<`" и "`>`"; понятие о `stdout` vs `stderr` * Сравнение двух файлов с помощью `diff` |
* {i} Перенаправление ввода-вывода с помощью "`<`" и "`>`" * Понятие о `stdout` vs `stderr` * {i} Сравнение двух файлов с помощью `diff` |
Строка 25: | Строка 19: |
* Где она лежит?? {{{ python3 -c 'import os; print(os.path.join(os.path.dirname(os.__file__), "Tools", "scripts", "diff.py"))' }}} * А потом `python3 путь-до-diff.py ключи файл1 файл2` * {i} Сравнение двух файлов с помощью `diff`: * Создать два файла из результатов `python3 -m calendar 2022 месяц`, где месяц — это 09 и 12 * Сравнить их с ключом `-u` * Решение домашних заданий * [[../RepoStruct|Структура git-репозитория для практикума]] * <!> Задачa_1 (демо): * Написать программу, которая вводит два числа через запятую и выводит наибольшее из них * Написать три теста * Решение Задачи_1 * (клон репозитория) * Создать каталог {{{ mkdir `date "+%Y%m%d`/1 }}} * перейти туда * написать программу `prog.py` * создать каталог `mkdir tests` * создать три входных файла: `echo "число, число" > tests/1.in"` (а также `tests/2.in` и `tests/3.in`) * создать три эталонных вывода (проверить глазками, что они действительно эталонные☺): `python3 prog.py < tests/1.in > tests/1.out`) * '''Обязательный''' `commit` и `push` во время семинара * <!> Задача_2: |
* <!> Задача_2 на тестирование, с ручным заданием тестовых данных (см. ниже раздел с задачами). * <!> Задача_3 (Д/З) на тестирование, с автогенерацией тестовых данных (см. ниже раздел с задачами). 1. '''Задача_1''' на эксперименты с вводом: 1. введите с помощью `a, b, c = eval(input())` значения для переменных a, b, c так, чтобы a стало числом, b - строкой, c - числом * Пример вывода: `<class 'int'> <class 'str'> <class 'int'>` 1. введите с помощью `a, b, c = eval(input())` значения для переменных a, b так, что в стандартном вводе для a задается целочисленное арифметическое выражение, для b - строковое выражение (конкатенация константных строк), для c --- вещественное число 1. введите с помощью `a, b, c = eval(input())` значения для переменных a, b, c так, чтобы a стало числом, b - списком из трех чисел, c - числом 1. '''Задача_2''' на тестирование, с ручным заданием тестовых данных: |
Строка 52: | Строка 31: |
* получает через стандартный вход (stdin) последовательность целых чисел в виде списка, например {{{ [7,2,3] }}} |
* получает через стандартный вход (stdin) последовательность целых чисел в виде списка, например "[1,2,3]" |
Строка 57: | Строка 33: |
* выводит результат в стандартный выход (stdout) через пробел и запятую {{{ 2, 3, 7 }}} |
* выводит результат в стандартный выход (stdout) в виде списка |
Строка 68: | Строка 41: |
* '''Обязательный''' `commit` и `push` | 1.#3 '''Задача_3''' на автогенерацию тестовых примеров: * напишите программу, которая ищет наибольшее из поданных на вход целых чисел и выводит его; ввод и вывод организован аналогично описанной выше программе сортировки, с тем отличием что выводится единственное целое число. * напишите программу `gentest.py`, которая * получает через стандартный вход целое число * генерирует набор входных данных для программы-искателя максимума (9 случайных целых чисел от 1 до 100, и число, полученное на вход - оно должно быть расположено в случайной позиции с номером от 1 до 10) * выдает сгенерированный набор в стандартный выход в виде списка * сформируйте при помощи программы-генератора два тестовых примера (пример - комплект из двух файлов "входные данные" + "эталонный вывод", по аналогии с задачей_2): a. с числом, большим чем 100 a. с числом, меньшим чем 100 * протестируйте программу-искатель максимума с каждым из этих тестовых примеров * в каком из вариантов (а, б) тестирование может "обнаружить" ошибку в программе-искателе максимума, при том что программа правильная? == Д/З == Доделать Д/З |
09.16 Командная строка и объекты
FIXME повторение git clone / hack/ git add / git commit / git push
(с прошлого раза) Использование git.cs.msu.ru/prac
Регистрация на Ejudge (164 турнир) для сдачи заданий по лекциям
- Правила проверки Д/З в EJudge
- Вывод и ввод данных в Python:
print()
input() и eval(input())
Что такое eval()
Конструкции вида a, b, c = eval(input())
Простейшая программа, которая вводит и выводит
Задача_1 на эксперименты с вводом (см. ниже раздел с задачами)
- Самостоятельное тестирование
Перенаправление ввода-вывода с помощью "<" и ">"
Понятие о stdout vs stderr
Сравнение двух файлов с помощью diff
если у вас windows: имеется утилита на Python
Задача_2 на тестирование, с ручным заданием тестовых данных (см. ниже раздел с задачами).
Задача_3 (Д/З) на тестирование, с автогенерацией тестовых данных (см. ниже раздел с задачами).
Задача_1 на эксперименты с вводом:
введите с помощью a, b, c = eval(input()) значения для переменных a, b, c так, чтобы a стало числом, b - строкой, c - числом
- Пример вывода:
<class 'int'> <class 'str'> <class 'int'>
- Пример вывода:
введите с помощью a, b, c = eval(input()) значения для переменных a, b так, что в стандартном вводе для a задается целочисленное арифметическое выражение, для b - строковое выражение (конкатенация константных строк), для c --- вещественное число
введите с помощью a, b, c = eval(input()) значения для переменных a, b, c так, чтобы a стало числом, b - списком из трех чисел, c - числом
Задача_2 на тестирование, с ручным заданием тестовых данных:
- напишите программу, которая:
- получает через стандартный вход (stdin) последовательность целых чисел в виде списка, например "[1,2,3]"
- сортирует эти числа по возрастанию
- выводит результат в стандартный выход (stdout) в виде списка
- составьте вручную 3 тестовых примера, содержащих:
- текстовый файл с входными данными
- текстовый файл с эталонными выходными данными (соответствующими входным, в правильном формате)
- протестируйте программу каждом из составленных примеров:
- запустите программу с подачей входных данных из подготовленного файла и перенаправлением вывода в другой текстовый файл
- при помощи команды diff проверьте совпадение файла с выводом и файла с эталонным выводом
- напишите "ошибочную" программу, которая выдает на выход числа в том же порядке, в котором получила на вход. Протестируйте её на подготовленных входных данных. Каким должен быть тестовый пример, чтобы ошибка в программе не была обнаружена?
- напишите программу, которая:
Задача_3 на автогенерацию тестовых примеров:
- напишите программу, которая ищет наибольшее из поданных на вход целых чисел и выводит его; ввод и вывод организован аналогично описанной выше программе сортировки, с тем отличием что выводится единственное целое число.
напишите программу gentest.py, которая
- получает через стандартный вход целое число
- генерирует набор входных данных для программы-искателя максимума (9 случайных целых чисел от 1 до 100, и число, полученное на вход - оно должно быть расположено в случайной позиции с номером от 1 до 10)
- выдает сгенерированный набор в стандартный выход в виде списка
- сформируйте при помощи программы-генератора два тестовых примера (пример - комплект из двух файлов "входные данные" + "эталонный вывод", по аналогии с задачей_2):
- с числом, большим чем 100
- с числом, меньшим чем 100
- протестируйте программу-искатель максимума с каждым из этих тестовых примеров
- в каком из вариантов (а, б) тестирование может "обнаружить" ошибку в программе-искателе максимума, при том что программа правильная?
Д/З
Доделать Д/З