Урок 3.3. Нажми на кнопку.
В рамках данного урока вы научитесь использовать функцию, с помощью которой можно завершить цикл при нажатии на кнопку. Эта функция доступна в языке TI-Nspire, поэтому для программирования на Python вам придется подгружать один или несколько специальных модулей.
Вы научитесь:
- Использовать функцию get_key() для завершения цикла
- Работать со степенями чисел 2 и 1/2
- Использовать функцию sleep(n) для приостановки выполнения кода на n секунд
Так как вы уже умеете работать с циклом оператора while, давайте попробуем использовать эффективную и интересную функцию системы TI-Nspire Python — get_key(). Вам необходимо написать программу, которая будет последовательно отображать степени числа 2 (например, 2, 4, 8, 16, 32, 64. ), и этот процесс будет продолжаться до тех пор, пока пользователь не нажмет на кнопку esc.
Примечание для учителя: функция get_key() включена в модуль ti_system. Она очень часто используется при работе с программами рисования и построения графиков (мы об этом расскажем в последующих уроках) и программами для микроконтроллера TI-Innovator™ Hub (об этом устройстве в данном курсе рассказано не будет).
Выражение from ti_system import get_key позволяет использовать данную функцию в любой программе. В этом модуле есть много других функций. Для дополнительной информации можете ознакомиться с документацией на сайте.
Операторы get_key() или get_key(0) проверяют, нажата ли определенная кнопка, при этом выполнение программы не прекращается.
Функция get_key(1) приостанавливает программу и ожидает нажатия на соответствующую кнопку.
1. Сначала создайте новую программу Python и выберите ее тип — «Пустая программа» (blank program). Назовите ее powers_of_2.
2. Используйте меню: menu > More Modules > TI System, чтобы вставить следующее выражение:
from ti_system import *
Его можно найти вверху списка.
В том же самом меню выберите следующее выражение:
while get_key() != «esc»:
block
3. Теперь вставьте переменную num = 2 непосредственно перед выражением while.

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

Примечание для учителя: Для этого используются выражения num=num*2 или num*=2.
5. Вот, что должно получиться.
while get_key() != «esc»:
print(num)
num = num * 2
Запустите программу и нажмите на кнопку esc, если нужно ее остановить.

6. Вычисление будет происходить очень быстро!
Обратите внимание на две интересные особенности Python:
- Программы работают действительно быстро, и нет верхнего предела для целых чисел.
- Однако пользователь все же ограничен объемом памяти компьютера.
Ваша следующая задача — приостановить процесс вычисления, чтобы удобно было следить за числами.

7. Для этого вам понадобится функция sleep(), ее можно найти в модуле Python, который называется time.
Вверху своей программы добавьте следующее выражение:
from time import sleep
его можно найти в меню: menu > More Modules > Time, пункт time будет сверху.

8. Под выражением num = num * 2 добавьте следующий оператор:
sleep(1)
все это находится в блоке оператора while (и все три выражения в нем необходимо структурировать).
Снова запустите программу. На этот раз после того, как будет отображаться каждое число, компьютер будет останавливаться (и ждать) на одну секунду, а потом продолжит выполнять последовательность цикла. Можете изменить время паузы в выражении sleep, чтобы процесс шел немного быстрее. Снова нажмите esc, чтобы завершить выполнение программы. Попробуйте вписать и другие значения для оператора sleep(), чтобы изменять время отображения.
В конце программы напишите Done (Выполнено).

9. Замените каждую 2 в программе на 0.5.
- Что произойдет?
- Попробуйте ввести и другие цифры.
- В каких случаях числа увеличиваются, а в каких уменьшаются?
- Что вы можете сказать об отрицательных числах?
- Имеет ли смысл подставлять 0 или 1 вместо 2?
А теперь попробуйте сделать следующее: замените выражение num = num * 2 на num *= 2.
Данная операция быстрого ввода выполняет то же самое действие и доступна для работы со многими другими математическими операторами.

Примечание для учителя: Функции get_key() и sleep() являются дополнительными в программировании на языке Python, и этим они делают процесс работы разнообразнее и интереснее. Модуль time — это стандартный модуль Python, в котором содержатся и другие функции, связанные с управлением временем операций. Модуль ti_system является модулем Texas Instruments, он создан для работы только с операционной системой TI-Nspire CX II-Т.
Завершение программы в Python
Однако, там не было объяснения какой метод лучше. Какой метод является наиболее «безаварийным»? И заодно: есть ли в Python понятие Autocloseable объектов? Если я сделаю ранее завершение программы, нужно ли мне будет закрывать файлы и т.д.?
Отслеживать
7,722 13 13 золотых знаков 25 25 серебряных знаков 54 54 бронзовых знака
задан 17 окт 2015 в 16:11
1,337 4 4 золотых знака 17 17 серебряных знаков 34 34 бронзовых знака
17 окт 2015 в 16:23
Спасибо! Лучшим решением является использование sys.exit()
17 окт 2015 в 16:28
на счет второго: лучше закрывать/завершать все операции перед завершением программы
17 окт 2015 в 16:32
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
Короткий ответ:
Лучше использовать sys.exit()
Механизм завершения процесса в Python реализован через бросание исключения SystemExit , таким образом можно просто создать подобное исключение и программа завершится:
raise SystemExit # или даже передать число -- код ошибки завершения программы raise SystemExit(1)
Функция exit и аналогичная ей quit созданы для удобства работы в интерактивном режиме и их не рекомендуется использовать внутри скриптов:
They are useful for the interactive interpreter shell and should not be used in programs.
По факту они также просто поднимают исключение, и при попытке вызова без скобок напишут подсказку о правильном способе выхода из интерпретатора:
>>> quit Use quit() or Ctrl-D (i.e. EOF) to exit >>> exit Use exit() or Ctrl-D (i.e. EOF) to exit
Использовать sys.exit стоит потому, что эта функция лежит в стандартном модуле и будет всегда там доступна. Также это довольно явный способ выразить своё желание завершить программу.
Есть также дополнительный метод для немедленного завершения программы: os._exit . У него довольно специфическая область применения, и там же есть замечание:
The standard way to exit is sys.exit(n)
Т.е. здесь даётся подтверждение того, что стандартный способ завершения программы — это вызов sys.exit .
Функция os.abort , упомянутая вами, использует механизм сигналов процессу. Конкретно при вызове этой функции будет передан сигнал SIGABRT , что в linux приведёт к завершению программы и созданию дампа памяти процесса. Подобное завершение рассматривается операционной системой как аварийное, поэтому не стоит использовать его для безаварийного завершения приложения.
По второй части вопроса. В Python есть развитая система контекстных менеджеров: классов, которые умеют работать с оператором with . Самое частое использование этого механизма встречается, вероятно, с файлами.
with open('filename') as my_file: print(my_file.read())
Этот код откроет файл, напечатает его содержимое на экран и закроет файл автоматически, даже если возникнет исключение при его печати.
Для классов, которые не приспособлены для работы с with есть функция closing в библиотеке contextlib . Из документации:
with closing(.open()) as f:
is equivalent to this:
f = .open() try: finally: f.close()
Вот небольшой пример работы этой функции:
import contextlib class Closeable: def close(self): print('closed') with contextlib.closing(Closeable()): pass # печатает closed
Теперь небольшое отступление о том, почему стоит использовать конструкцию with .
Известно, что программа завершится от любого необработанного исключения, а не только от SystemExit . Таким образом, если в вашем коде используются какие-то ресурсы, которые требуется правильным образом закрывать перед завершением работы, нужно оборачивать работу с ними в блоки try . finally . .
Однако, при использовании конструкции with это оборачивание происходит автоматически, и все ресурсы закрываются корректно.
Так как выход из программы — это всего лишь брошенное исключение, то и в случае использования функции sys.exit закрытие открытых в операторе with ресурсов произойдёт корректно:
with contextlib.closing(Closeable()): sys.exit() # напечатает closed
Вы можете писать также и свои классы, предоставляющие ресурсы или классы, оборачивающие другие, которые нужно уметь закрывать автоматически. Для этого используются методы __enter__ и __exit__ .
- Похожий вопрос с англоязычного StackOverflow
- Функции, добавляемые модулем site
- Документация по конструкции with
- Документация по функции closing
- Документация по исключению SystemExit
- Документация по функции os._exit
- Документация по функции sys.exit
- Документация по функции os.abort
- Описание системного сигнала SIGABRT
Правильное завершение программы на Python 3
Функция exit создана для удобства работы в интерактивном режиме, но не рекомендуется использовать её внутри скриптов.
По факту функция просто поднимает исключение SystemExit, а при попытке вызова без скобок напишет подсказку о правильном способе выхода из интерпретатора.
Использовать sys.exit() стоит, так как этот метод есть в стандартном модуле и всегда там доступен. А ещё это довольно явный и понятный способ завершения программы.
Время чтение: 1 минуту 2022-01-20
Читайте также
- Как получить хеш строки md5 и SHA1 в Python3
- Как запустить скрипт с аргументами командной строки Python
- Как определить свободное место на диске python
- Как отправить push уведомление в Windows с помощью Python
- Как получает IP-адрес по имени домена в Python
- Как создать уникальный идентификатор в Python
- Как объединить словари в python 3.5 и python 3.9
- Как сделать именованные аргументы обязательными в python 3
Помощь проекту
Если есть возможность — поддержать нас: будем очень признательны. Денежные средства пойдут на дальнейшее развитие проекта!
Как завершить программу, если пользователь не введет значение переменной
Я не могу понять, как мне сделать так, что когда пользвоатель не захочет вводить вторую пару паролей, то есть после else, он ничего не напишет в перемнную a, программа завершит работу.
Пока что выдает так:
OK
Makefile:5: recipe for target ‘run’ failed
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Как вернуть программу к определённой точке кода, если пользователь введёт слово «Stop» в cin
Как вернуть программу к определённой точке кода, если пользователь введёт слово "Stop" в cin
Ждать, пока пользователь не введет значение (как в консоли)
здравсвуйте, как в C# можно ждать событие? что нужно, есть форма, на ней 2 кнопки и текстбокс. по.
