Различия между версиями 13 и 14
Версия 13 от 2022-09-06 13:32:00
Размер: 4852
Редактор: FrBrGeorge
Комментарий:
Версия 14 от 2022-09-06 13:36:20
Размер: 6580
Редактор: FrBrGeorge
Комментарий: Случайно отредактировал прошлый год
Удаления помечены так. Добавления помечены так.
Строка 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

  • (с прошлого раза) {i} Использование git.cs.msu.ru/prac

  • {i} Регистрация на Ejudge (164 турнир) для сдачи заданий по лекциям

    • Правила проверки Д/З в EJudge
  • Вывод и ввод данных в Python:
    • print()

    • input() и eval(input())

      • Что такое eval()

      • Конструкции вида a, b, c = eval(input())

    • {i} Простейшая программа, которая вводит и выводит

    • <!> Задача_1 на эксперименты с вводом (см. ниже раздел с задачами)

  • Самостоятельное тестирование
    • {i} Перенаправление ввода-вывода с помощью "<" и ">"

    • Понятие о stdout vs stderr

    • {i} Сравнение двух файлов с помощью diff

  • <!> Задача_2 на тестирование, с ручным заданием тестовых данных (см. ниже раздел с задачами).

  • <!> Задача_3 (Д/З) на тестирование, с автогенерацией тестовых данных (см. ниже раздел с задачами).

  • Задача_1 на эксперименты с вводом:

    1. введите с помощью a, b, c = eval(input()) значения для переменных a, b, c так, чтобы a стало числом, b - строкой, c - числом

      • Пример вывода:
        • <class 'int'> <class 'str'> <class 'int'>

    2. введите с помощью a, b, c = eval(input()) значения для переменных a, b так, что в стандартном вводе для a задается целочисленное арифметическое выражение, для b - строковое выражение (конкатенация константных строк), для c --- вещественное число

    3. введите с помощью 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):
      1. с числом, большим чем 100
      2. с числом, меньшим чем 100
    • протестируйте программу-искатель максимума с каждым из этих тестовых примеров
    • в каком из вариантов (а, б) тестирование может "обнаружить" ошибку в программе-искателе максимума, при том что программа правильная?

Д/З

Доделать Д/З

LecturesCMC/PythonIntro2021/Prac/01_Commandline (последним исправлял пользователь FrBrGeorge 2022-09-06 13:36:20)