Различия между версиями 1 и 7 (по 6 версиям)
Версия 1 от 2020-09-08 16:05:34
Размер: 526
Редактор: FrBrGeorge
Комментарий:
Версия 7 от 2020-10-01 21:33:40
Размер: 7097
Редактор: FrBrGeorge
Комментарий:
Удаления помечены так. Добавления помечены так.
Строка 1: Строка 1:
= 01. Командная строка и объекты =
 * (с прошлого раза) (i) Использование `git.cs.msu.ru`/`prac`
  * [[/RepoStruct|Структура git-репозитория для практикума]]
 * (с прошлого раза) (i) Использование `XMPP:stud.cs.msu.ru`
 * (i) Регистрация на [[http://ejudge.cs.msu.ru/register?action=207&contest_id=148|Ejudge]] (148 турнир)
= 09.10 Командная строка и объекты =
 * (с прошлого раза) {i} Использование `git.cs.msu.ru`/`prac`
  * [[../RepoStruct|Структура git-репозитория для практикума]]
 * (с прошлого раза) {i} Использование `XMPP:stud.cs.msu.ru`
 * {i} Регистрация на [[http://ejudge.cs.msu.ru/register?action=207&contest_id=148|Ejudge]] (148 турнир)
Строка 7: Строка 7:
 *
'''TODO'''
 * Вывод и ввод данных в Python:
  * `print()`
  * `input()` и `eval(input())`
   * Что такое `eval()`
   * Конструкции вида `a, b, c = eval(input())`
  * {i} Простейшая программа, которая вводит и выводит
  * <!> Задача_1 на эксперименты с вводом (см. ниже раздел с задачами)
 * Самостоятельное тестирование
  * {i} Перенаправление ввода-вывода с помощью "`<`" и "`>`"
  * {i} Перенаправление ввода и вывода с помощью "`|`"
  * Понятие о `stdout` vs `stderr`
  * Понятие о сценарии ( (!) в windows — .cmd)
  * {i} Сравнение двух файлов с помощью `diff`
   * (!) если у вас windows: [[py3doc:difflib.html#a-command-line-interface-to-difflib|имеется утилита на Python]]
 * <!> Задача_2 на автоматическое тестирование, с ручным заданием тестовых данных (см. ниже раздел с задачами).
 * <!> Задача_3 на автоматическое тестирование, с автогенерацией тестовых данных (см. ниже раздел с задачами).

== Задачи ==

Задача_1 на эксперименты с вводом:
 * а) введите значения для переменных x, y, z так, чтобы x стало числом, y - строкой, z - числом
 * б) введите значения для переменных x, y так, что в стандартном вводе для х задается арифметическое выражение, а для у - строковое выражение (конкатенация константных строк)
 * в) введите значения для переменных х, у, z так, чтобы х стало числом, у - списком из трех чисел, z - числом

Задача_2 на автоматическое тестирование, с ручным заданием тестовых данных:
 * напишите программу, которая:
   * получает через стандартный вход (stdin) последовательность целых чисел в виде списка, например "[1,2,3]"
   * сортирует эти числа по возрастанию
   * выводит результат в стандартный выход (stdout) в виде списка
 * составьте вручную 3 тестовых примера, содержащих:
   * текстовый файл с входными данными
   * текстовый файл с эталонными выходными данными (соответствующими входным, в правильном формате)
 * напишите тестовый сценарий, который:
   * получает на вход (параметры командной строки) имя файла с входными данными и имя файла с эталонными выходными данными
   * запускает программу, подает ей на вход входные данные, направляет выходные данные во временный файл, и сравнивает полученные выходные данные с эталонными; в сценарии используйте перенаправление ввода и вывода
 * попробуйте, как работает сценарий с "ошибочной" программой, которая выдает на выход числа в том же порядке, в котором получила на вход. Каким должен быть тестовый пример, чтобы сценарий при этом не обнаружил ошибку?

Задача_3 на автоматическое тестирование, с автогенерацией тестовых данных:
 * напишите программу, которая ищет наибольшее из поданных на вход целых чисел и выводит его; ввод и вывод организован аналогично описанной выше программе сортировки, с тем отличием что выводится единственное целое число.
 * напишите программу, которая
   * получает через стандартный вход целое число
   * генерирует набор входных данных для программы-искателя максимума (10 случайных целых чисел от 1 до 100, кроме одного из чисел, равного полученному на вход)
   * выдает сгенерированный набор в стандартный выход в виде списка
 * напишите сценарий, который:
   * получает на вход (параметр командной строки) целое число
   * запускает программу-генератор и программу-искатель максимума в конвейере через "|", при этом программе-генератору на вход подает полученное число
   * направляет выход программы-искателя максимума во временный файл
   * сравнивает выход программы-искателя максимума с эталоном (для этого генерирует временный файл, содержащий полученное на вход число)
 * попробуйте запустить сценарий, передавая ему:
   * а) число, большее чем 100
   * б) число, меньшее чем 100
 * в каком из вариантов (а, б) сценарий может "обнаружить" ошибку в программе-искателе максимума, притом что программа правильная?

== Д/З ==
 * добиться работоспособности сценариев (для задач 2 и 3) дома

09.10 Командная строка и объекты

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

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

  • {i} Регистрация на Ejudge (148 турнир)

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

    • input() и eval(input())

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

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

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

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

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

    • {i} Перенаправление ввода и вывода с помощью "|"

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

    • Понятие о сценарии ( (!) в windows — .cmd)

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

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

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

Задачи

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

  • а) введите значения для переменных x, y, z так, чтобы x стало числом, y - строкой, z - числом
  • б) введите значения для переменных x, y так, что в стандартном вводе для х задается арифметическое выражение, а для у - строковое выражение (конкатенация константных строк)
  • в) введите значения для переменных х, у, z так, чтобы х стало числом, у - списком из трех чисел, z - числом

Задача_2 на автоматическое тестирование, с ручным заданием тестовых данных:

  • напишите программу, которая:
    • получает через стандартный вход (stdin) последовательность целых чисел в виде списка, например "[1,2,3]"
    • сортирует эти числа по возрастанию
    • выводит результат в стандартный выход (stdout) в виде списка
  • составьте вручную 3 тестовых примера, содержащих:
    • текстовый файл с входными данными
    • текстовый файл с эталонными выходными данными (соответствующими входным, в правильном формате)
  • напишите тестовый сценарий, который:
    • получает на вход (параметры командной строки) имя файла с входными данными и имя файла с эталонными выходными данными
    • запускает программу, подает ей на вход входные данные, направляет выходные данные во временный файл, и сравнивает полученные выходные данные с эталонными; в сценарии используйте перенаправление ввода и вывода
  • попробуйте, как работает сценарий с "ошибочной" программой, которая выдает на выход числа в том же порядке, в котором получила на вход. Каким должен быть тестовый пример, чтобы сценарий при этом не обнаружил ошибку?

Задача_3 на автоматическое тестирование, с автогенерацией тестовых данных:

  • напишите программу, которая ищет наибольшее из поданных на вход целых чисел и выводит его; ввод и вывод организован аналогично описанной выше программе сортировки, с тем отличием что выводится единственное целое число.
  • напишите программу, которая
    • получает через стандартный вход целое число
    • генерирует набор входных данных для программы-искателя максимума (10 случайных целых чисел от 1 до 100, кроме одного из чисел, равного полученному на вход)
    • выдает сгенерированный набор в стандартный выход в виде списка
  • напишите сценарий, который:
    • получает на вход (параметр командной строки) целое число
    • запускает программу-генератор и программу-искатель максимума в конвейере через "|", при этом программе-генератору на вход подает полученное число
    • направляет выход программы-искателя максимума во временный файл
    • сравнивает выход программы-искателя максимума с эталоном (для этого генерирует временный файл, содержащий полученное на вход число)
  • попробуйте запустить сценарий, передавая ему:
    • а) число, большее чем 100
    • б) число, меньшее чем 100
  • в каком из вариантов (а, б) сценарий может "обнаружить" ошибку в программе-искателе максимума, притом что программа правильная?

Д/З

  • добиться работоспособности сценариев (для задач 2 и 3) дома

LecturesCMC/PythonIntro2020/Prac/01_Commandline (последним исправлял пользователь FrBrGeorge 2020-10-01 21:33:40)