Programming Taskbook


E-mail:

Пароль:

Регистрация пользователя   Восстановление пароля

English

ЮФУ

Электронный задачник по программированию

©  М. Э. Абрамян (Южный федеральный университет), 1998–2023

 

Решения | Python | Простое задание

PrevNext


Пример выполнения простого задания: Begin3

На данной странице приводится пошаговое описание процесса решения на языке Python следующего простого задания из группы Begin.

Begin3°. Даны стороны прямоугольника a и b. Найти его площадь S = ab и периметр P = 2(a + b).

Описание ориентировано на версию задачника 4.22, в которой для языка Python можно использовать среды IDLE, PyCharm, WingIDE и VS Code.

Создание программы-заготовки и знакомство с заданием

Для создания проекта, содержащего заготовку для требуемого задания, следует воспользоваться программным модулем PT4Load. Для этого достаточно перейти в рабочий каталог задачника и с помощью ярлыка Load.lnk запустить программу PT4Load.exe (начиная с версии 4.22, для быстрого запуска любых модулей задачника можно использовать программу PT4Panel, ярлык которой располагается на рабочем столе и в любом рабочем каталоге). В результате на экране появится окно модуля PT4Load, в котором следует указать имя нужного задания. Отметим, что в заголовке этого окна указывается имя той программной среды, для которой будет создана заготовка; например, в версии задачника 4.22 при использовании среды IDLE для языка Python в заголовке будет содержаться текст [IDLE (Python)] (в предыдущих версиях задачника текст имеет незначительные отличия).

Проект-заготовка, созданный для языка Python, состоит из двух файлов: файла pt4.py, содержащего вспомогательный модуль pt4, и файла, в котором требуется ввести решение задачи. Этот файл имеет имя, совпадающее с именем задания, и расширение pyw (в нашем случае — Begin3.pyw). Именно этот файл и будет автоматически загружен в интегрированную среду IDLE (а также в редактор сред PyCharm, Wing IDE или VS Code при их использовании для выполнения задания на языке Python). Приведем вид окна данной среды после загрузки файла с заготовкой (такой вид имеет заготовка для программ на Python, начиная с версии 4.22; в предыдущих версиях задачника вид заготовки несколько отличается от приведенного):

Текст программы состоит всего из четырех непустых строк. В первой строке к программе подключаются все функции, определенные в модуле pt4. Вторая строка является заголовком функции solve, в которой необходимо запрограммировать решение задачи, а в третьей строке (которая пока является единственным оператором функции solve) вызывается функция task, которая определена в модуле pt4 и инициализирует задание с указанным именем. В завершающей, четвертой непустой строке вызывается служебная функция start из модуля pt4, которая обеспечивает вызов функции solve для проверки правильности предложенного решения.

Данную программу уже можно запустить на выполнение. Для этого в среде IDLE достаточно нажать клавишу [F5] (или выполнить команду «Run | Run Module»). Заметим, что эту же клавишу [F5] можно использовать для запуска программ на языке Python в средах Wing IDE и VS Code (в среде PyCharm для запуска программ предназначена комбинация [Shift]+[F10]).

Примечание. При первом запуске в среде PyCharm программы, использующей задачник, может появиться диалоговое окно Edit configuration. Это происходит в ситуации, когда исполняющая система (интерпретатор) Python еще не связана с созданным проектом. В этом случае надо выполнить действия, описанные в разделе «Настройка интегрированных сред для языка Python» (подраздел «Среда PyCharm», пункт 5).

После запуска программы из среды IDLE на экране появятся два окна: окно отладчика Python Shell, в котором указываются развернутые сообщения об ошибках и информации о результатах всех запусков программ, и окно задачника, содержащее формулировку задания и пример исходных данных (при использовании сред Wing IDE, VS Code и PyCharm для языка Python появится только окно задачника, поскольку раздел Python Shell выводится в нижней части их окна).

Начиная с версии 4.11, окно задачника может отображаться в двух режимах: с динамической компоновкой, при которой каждый раздел «подстраивается» под свое содержимое, и с фиксированной компоновкой, при которой каждый раздел имеет фиксированные размеры. В предыдущих версиях задачника был доступен только режим с фиксированной компоновкой. Режим с динамической компоновкой особенно удобен для заданий с большими формулировками и большими наборами данных. Ниже приведены оба режима окна для данного задания; вначале указан режим с динамической компоновкой (для переключения режимов предназначена клавиша [F4]).




Запуск нашей программы был признан ознакомительным (и поэтому правильность решения не анализировалась), так как в ходе ее выполнения не было совершено ни одной операции ввода-вывода. Для завершения программы достаточно закрыть окно задачника, нажав кнопку «Выход (Esc)», клавишу [Esc] или клавишу [F5] (для среды IDLE, Wing IDE и VS Code) или [F10] (для среды PyCharm). Заметим, что после закрытия окна задачника в окне Python Shell будет выведено описание результатов данного запуска программы (аналогичная информация будет выведена и в разделе Python Shell в окнах других сред):

В среде IDLE для перехода к окну с текстом программы достаточно щелкнуть мышью на этом окне или использовать клавиатурную комбинацию [Alt]+[Tab] (в других средах после завершения программы происходит автоматический возврат в раздел с текстом программы).

Примечание. В версии 4.21 поддержка режима с фиксированной компоновкой была прекращена. Начиная с этой версии, команда Режим (F4), ранее применявшаяся для переключения между режимами с фиксированной и динамической компоновкой, обеспечивает отображение текста текущего задания в режиме html-документа. В дальнейшем в качестве иллюстраций будут использоваться только окна с динамической компоновкой.

Ввод исходных данных

Приступая к решению задачи, надо прежде всего организовать ввод в программу исходных данных. В нашем случае исходными данными являются вещественные числа a и b, определяющие стороны прямоугольника (в области исходных данных в окне задачника эти числа выделены желтым цветом и снабжены комментариями).

Для ввода исходных данных в нашем случае мы можем использовать функцию get_float, обеспечивающую ввод вещественных чисел, или «универсальную» функцию get, позволяющую ввести данные любого типа. Использование «универсальной» функции get не позволяет задачнику распознать ряд ошибок, связанных с вводом, поэтому при начальном изучении программирования целесообразнее использовать «специализированные» функции, каждая из которых предназначена для ввода данных определенного типа. Поэтому организуем ввод данных с помощью функции get_float (здесь и далее мы будем приводить только текст функции solve, поскольку строки, предшествующие данной функции и следующие за ней, изменять не требуется):

def solve():
    task("Begin3")
    a = get_float()
    b = get_float()

Обратите внимание на использование одинаковых отступов для всех операторов, входящих в данную функцию.

Повторно запустив программу, мы увидим, что исходные данные изменились. При каждом запуске генерируется новый набор исходных данных, поэтому для успешного решения задания необходимо запрограммировать алгоритм, правильно обрабатывающий любой допустимый набор исходных данных.

Ввод данных выполнен правильно. Однако наша программа не выводит результатов. Начиная с версии 4.15, в данной ситуации выводится сообщение на светло-синем фоне: «Запуск с правильным вводом данных: все требуемые исходные данные введены, результаты не выведены». Светло-синяя индикация означает, что успешно пройден первый этап решения: ввод исходных данных. Заметим, что в предыдущих версиях задачника в аналогичной ситуации выводилось сообщение об ошибке на оранжевом фоне «Выведены не все результирующие данные. Количество выведенных данных: 0 (из 2)».

Примечание. При запуске нового варианта программы среда IDLE может вывести запрос о необходимости сохранения измененного содержимого файла Begin3.pyw. Чтобы такие запросы не выводились при каждом запуске (если перед запуском мы забудем повторно сохранить текст программы), можно установить соответствующую настройку среды IDLE. Для этого надо выполнить команду «Options | Configure IDLE...», в появившемся диалоговом окне «idle» перейти на вкладку «General» и в разделе «At Start of Run (F5)» выбрать радиокнопку «No Prompt». Для закрытия диалогового окна надо нажать кнопку «OK». Заметим также, что для быстрого сохранения измененного текста программы достаточно нажать комбинацию клавиш [Ctrl]+[S]. В других средах сохранение текста программы перед ее запуском выполняется автоматически.

Вычисления и вывод полученных данных

Выполним необходимые вычисления и выведем результаты, используя метод put:

def solve():
    task("Begin3")
    a = get_float()
    b = get_float()
    p = 2 * (a + b)
    s = a * b
    put(P, S)

При запуске этого варианта программы в информационной панели окна задачника будет выведен текст (на красном фоне) «Error NameError: name 'P' is not defined». После закрытия окна задачника более развернутое описание ошибки будет выведено в окне Python Shell:

В этом окне дополнительно указывается оператор, в котором произошла ошибка, и его местонахождение в тексте программы. Заметим, что в среде IDLE предусмотрена возможность быстрого перехода к строке программы, в которой произошла ошибка. Для этого достаточно щелкнуть правой кнопкой мыши либо на строке, в которой указан номер ошибочной строки программы (File "C:\PT4Work\Begin3.pyw", line 8, in solve), либо на строке, в которой приведен сам ошибочный оператор (put(P, S)), и в появившемся меню выбрать пункт «Go to file/line» (в других средах строка с ошибочным оператором выделяется автоматически, а в средах VS Code и PyCharm ошибки дополнительно подчеркиваются красной волнистой линией).

Наша ошибка объясняется тем обстоятельством, что в программах на языке Python учитывается регистр символов, и поэтому переменные p и P считаются различными. Так как ранее переменной P ничего не было присвоено, она считается неопределенной, о чем и выводится сообщение. Для исправления программы достаточно изменить ее последний оператор:

  put(p, s)

Исправленная программа не содержит ошибок, препятствующих ее выполнению. После ее запуска мы можем убедиться, что найденные значения выведены в разделе результирующих данных. Но из-за того, что вначале мы вывели значение периметра p, а затем — значение площади s, решение признано неверным, а сообщение об ошибке имеет вид «Ошибочное решение». Подобное сообщение означает, что все исходные данные были введены, все результирующие данные выведены, но значения полученных результатов не совпадают с контрольными:


Следует обратить внимание на индикаторы, появившиеся в окне задачника (индикаторы были добавлены в окно задачника в версии 4.11). В окне с динамической компоновкой для индикаторов отводится специальная панель, которая располагается под информационной панелью; в качестве индикаторов используются цветные горизонтальные полосы, а также цветные квадратные маркеры.

Полосы серого цвета показывают, какая часть исходных данных была введена в ходе выполнения задания и какая часть результатов была выведена. Полосы и маркеры различных оттенков красного цвета определяют характер обнаруженной ошибки.

В нашем случае индикаторы показывают, что были введены и выведены все требуемые данные. Обратившись к примеру верного решения, приведенному в окне задачника, мы видим, что площадь и периметр найдены верно и нарушен только порядок их вывода. В окне с динамической компоновкой пример верного решения выводится ниже раздела результатов.

Таким образом, важно не только найти правильные значения результирующих данных, но и вывести их в нужном порядке. Для того чтобы указать этот порядок, в разделе результатов используется поясняющий текст (см. приведенный выше рисунок окна задачника). Заметим, что исходные данные тоже важно вводить именно в том порядке, в котором они указаны в окне задачника. Общее правило здесь следующее: ввод и вывод данных производится по строкам (слева направо), а строки просматриваются сверху вниз. Иными словами, данные, отображаемые в окне задачника, вводятся и выводятся в том порядке, в котором читается обычный текст на русском языке.

Правильное решение и его тестирование

Исправим допущенную ошибку:

    put(s, p)

После запуска исправленной программы на экране появится окно прогресса тестирования:

Данное окно отображается на экране, если программа успешно обработала хотя бы один набор исходных данных. Полоса прогресса показывает, сколько тестов было успешно пройдено к текущему моменту, а текст над полосой дублирует эту информацию и позволяет определить количество тестов, которое должна успешно пройти программа, чтобы задание считалось выполненным. Тестирование программы завершается в двух случаях: когда будет успешно пройдено требуемое число тестов или когда при прохождении очередного теста будет выявлена ошибка.

В нашем случае решение не содержит ошибок, поэтому после прохождения трех успешных тестов на экране появится окно задачника с сообщением «Задание выполнено!». Выполнение задания Begin3 завершено:


Возможность автоматического тестирования программы на нескольких наборах исходных данных была реализована в версии 4.13 задачника. В предыдущих версиях для тестирования на различных наборах данных программу требовалось запускать несколько раз; при этом на информационной панели выводилась информация о количестве успешно пройденных тестов. Возможность подобного «пошагового» тестирования сохранена и в последующих версиях; для этого надо дополнить имя задания в функции task символом «!» (восклицательный знак).

С помощью модуля PT4Results можно просмотреть информацию о ходе выполнения задания (начиная с версии 4.11, этот модуль можно вызывать непосредственно из окна задачника; для этого достаточно нажать клавишу [F2] или щелкнуть мышью на метке с описанием этой клавиши, размещенной в правом верхнем углу окна задачника):

Begin3      y04/02 14:57 Ознакомительный запуск.
Begin3      y04/02 15:07 Запуск с правильным вводом данных.
Begin3      y04/02 15:09 Error NameError.
Begin3      y04/02 15:12 Ошибочное решение.
Begin3      y04/02 15:15 Задание выполнено!

Буква «y», указанная перед датой, означает, что задание выполнялось на языке Python.

Полученную программу, сохраненную в файле Begin3.pyw, можно запускать на выполнение и непосредственно из операционной системы. Для этого достаточно выполнить на значке файла двойной щелчок мышью. Учитывая расширение pyw, система запустит интерпретатор Python, сразу передав ему на обработку программу, содержащуюся в указанном файле. Благодаря последней букве расширения «w» будет запущен вариант интерпретатора pythonw.exe, отличающийся от «обычного» интерпретатора python.exe тем, что он не использует консольное окно для ввода-вывода данных (в нашем случае нет необходимости в отображении консольного окна, так как основная информация о результатах работы программы выводится в графическом окне электронного задачника).

Примечание 1. В использовании вспомогательных переменных p и s при выполнении задания нет необходимости, поскольку при выводе результатов можно указать не только переменные, но и выражения. Учитывая это, можно получить более короткий вариант решения задания Begin3. Можно еще более сократить текст программы, если вместо функции get_float использовать «универсальную» функцию ввода get и организовать присваивание исходных данных двум переменным в одном операторе:

def solve():
    task("Begin3")
    a, b = get(), get()
    put(a * b, 2 * (a + b))

Текст программы можно еще немного сократить, если использовать для ввода функцию get2, которая сразу вводит два элемента исходных данных и возвращает их в виде кортежа (эта функция, наряду с другими дополнительными функциями ввода, появилась в версии задачника 4.19):

def solve():
    task("Begin3")
    a, b = get2()
    put(a * b, 2 * (a + b))

Примечание 2. При работе в редакторе VS Code можно переключаться на другие задачи, если для них уже созданы заготовки. Для этого достаточно перейти в режим проводника (нажав [Ctrl]+[Shift]+[E]) и выполнить двойной щелчок мышью на требуемом файле с расширением pyw. Можно также переключаться между уже загруженными в редактор файлами и запускать любой из них на выполнение. Кроме того, можно создавать новые заготовки с помощью программы PT4Load, не закрывая окно редактора VS Code; при этом новая заготовка будет добавлена к уже загруженным в редактор файлам.

В среду Wing IDE также можно загружать файлы для различных заданий, а также, не закрывая эту среду, вызывать программу PT4Load для создания новых заготовок. Любой из загруженных файлов можно запускать на выполнение.

Среда PyCharm требует создания более сложных проектов, поэтому для перехода к новому заданию необходимо всегда использовать программу PT4Load. При этом среду PyCharm закрывать необязательно, однако после загрузки обновленного проекта можно будет запускать только файл, связанный с этим проектом (даже если переключиться на ранее загруженные файлы с решениями других задач).


PrevNext

 

Рейтинг@Mail.ru

Разработка сайта:
М. Э. Абрамян, В. Н. Брагилевский

Последнее обновление:
01.01.2023