Консоль NVDA и математические вычисления

Дата публикации:23.04.2010
Twitter Facebook Vkontakte

Содержание

— Мне нужен калькулятор!
— Бендер, ты сам калькулятор.
— Мне нужен хороший калькулятор!
[Мультсериал "Futurama", серия "The Cyber House Rules"]

Что такое Консоль Python

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

Запустить консоль можно двумя способами:

  1. через общее меню NVDA, нажав NVDA+N и последовательно выбрав пункты "Сервис" и "Консоль Python";
  2. Посредством специальной комбинации клавиш, нажав NVDA+CTRL+Z.

Команды вводятся с клавиатуры и состоят из одной строки. При помощи вертикальных курсорных стрелок можно перемещаться по истории введённых за текущую сессию команд. Для активизации введённой команды, следует навести на неё фокус и нажать клавишу Enter. Сразу после этого, NVDA произнесёт результат операции. Для переключения между режимами ввода и чтения окна консоли служит клавиша F6. Например, если вам надо просмотреть предыдущие команды рабочей сессии, то следует нажатием F6 перевести консоль в режим чтения и, передвигаясь курсорными стрелками, изучить текст в окне, где на отдельных строках будут написаны команды, а на следующей строке результаты их выполнения.

Разумеется, следует помнить, что консоль Python - это в первую очередь всё-таки инструмент для разработчиков и отладчиков NVDA. Для получения подробной информации о её использовании именно для этих целий, обратитесь к статье в Wiki на официальном сайте NVDA - >PythonConsole, предназначенной для разработчиков. В этой же статье мы рассмотрим возможность использования консоли Python для математических расчётов в качестве обычного калькулятора, что не требует от пользователя особых знаний по программированию.

Арифметика и элементарная математика

Начнём с самого начала, то есть с азов математики. Рассмотрим принципы простейших расчётов при помощи Консоли Python, а также некоторые их особенности.

Основные арифметические действия

Для обозначения четырёх основных арифметических действия в Python используются стандартные компьютерные обозначения:

Запустим Консоль Python (NVDA+CTRL+Z) и в открывшемся окне введём выражение:
2+3-4
После этого нажмём Enter, и NVDA произнесёт ответ - 1. Для продолжения работы можно уже сразу вводить следующий пример:
2+2*2
После нажатия Enter будет произнесён ответ, относящийся уже к этому выражению - 6.

Обратите внимание, что здесь 2+2*2 = 6, а не 8, как было бы, если бы мы последовательно вводили эти команды на обычном калькуляторе. То есть Python анализирует всё выражение и соблюдает порядок действий.

Если нам понадобилось снова узнать результат нашего первого выражения, то можно отыскать его вертикальными стрелками и нажать на нём Enter. В этом случае операция его расчёта будет повторена и запишется в историю внизу списка как следующее выполненное действие. Однако можно поступить проще: нажать клавишу F6 и перейти в режим просмотра. Здесь вертикальными стрелками найти строку, содержащую интересующее выражение, и строкой ниже будет результат его расчёта. Для обратного перехода в режим ввода команд надо снова нажать клавишу F6.

Порядок действий и элементарная математика

Как уже было отмечено, Python соблюдает правильный порядок математических действий. Вот полный их список в порядке убывания приоритетности выполнения:

  1. выражение в скобках;
  2. возведение в степень;
  3. умножение / деление;
  4. сложение / вычитание.

Четыре основных арифметических действия были рассмотрены ранее, теперь обратимся к скобкам и возведению в степень.

Для заключения части выражения в скобки используется их обычный круглый вариант (Shift+9/Shift+0). А вот для задания степени в Python используется обозначение, отличное от стандартного ("^x" (крышка + показатель степени)). Чтобы возвести число в степень, следует набрать "**x" (звёздочка, звёздочка, показатель степени).

Например, для расчёта куба произведения четырёх и суммы двух и пяти, следует набрать следующее выражение:
(4*(2+5))**3
После ввода данного текста и нажатия на нём клавиши Enter, NVDA произнесёт ответ - 21952.

Проблема целочисленного деления

Как говорил лис в сказки Антуана де Сент-Экзюпери "Маленький принц": "Нет в мире совершенства". Python также не является исключением из этого правила. В нём есть некоторые нюансы, которые, при недостаточных знаниях этих особенностей языка, могут привести к ошибкам в математических расчётах. Чтобы в этом убедиться, проведём небольшой эксперимент. Для этого попробуем рассчитать выражение:
9/5

Консоль Python выдаёт нам ответ 1, хотя даже не профессиональному математику известно, что 9/5 = 1,8. От чего же так происходит?

Суть проблемы заключается в том, что во многих языках программирования, в том числе и в Python, существует два типа деления "деление с плавающей запятой" и "целочисленное деление". Деление с плавающей запятой - это именно то, чего мы ждём математически: 9/5 = 1,8. Целочисленное же деление предназначено только для работы с целыми числами, поэтому оно округляет результат каждой операции до целых в меньшую сторону, просто отбрасывая все знаки после дробной запятой или точки. То есть целочисленное деление рассматривает, сколько целых делителей может поместиться в делимом.

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

Существует несколько способов избежать подобной ошибки, но мы рассмотрим самый простой, а именно сделаем так:
9.0/5
При подобной записи выражения результат вычислений с математической точки зрения будет верным - 1,8. То есть для решения проблемы целочисленного деления в Python нам надо записывать математический пример таким образом, чтобы хотя бы один операнд (или делимое, или делитель, или оба вместе) обладал бы дробной частью, пусть и нулевой.

Обратите внимание, что в Python для отделения дробной части используется не запятая, а точка, например, 1.5**2 = 2.25.

Стандартные математические функции

В математических формулах встречаются такие функции как sin (синус), cos (косинус), tan (тангенс), log (десятичный логарифм) и другие. В серьёзных калькуляторах для них существуют специальные кнопки. Но Python ничем не хуже, в нём также встроены все эти функции и их можно использовать при расчётах.

Квадратный корень

Разумеется, извлечение корней с математической точки зрение - это то же самое, что и возведение в степень. Так что извлечь квадратный корень из числа 4 мы могли бы и так:
4**(0.5)
Но, во-первых, как говорил Уильям Каупер: "Разнообразие - та самая приправа к жизни, которая придает ей весь аромат", а во-вторых, на примере функции квадратного корня мы научимся использовать остальные математические функции Python.

В Python, функция, извлекающая квадратный корень и множество других математических функций доступны в модуле, который называется "math". Чтобы получить возможность ими пользоваться, следует импортировать этот модуль в программу, написав перед тем местом, где мы будем использовать функции, команду
import math
и нажать Enter. Теперь следует ввести непосредственно математический пример следующим образом:
math.sqrt(4)

"sqrt(x)" - это как раз и есть функция квадратного корня из числа x, а запись "math." говорит лишь о том, что последующая функция относится к одноимённому модулю.

Обратите внимание, что Консоль Python выдаёт ответ - 2.0, а не просто 2. То есть функция sqrt считает нам с учётом плавающей запятой, что не может не радовать в виду проблем, которые может повлечь за собой целочисленное деление.

Альтернативные методы импорта модулей

Как писал Антон Павлович Чехов: "Краткость - сестра таланта". С этим утверждением можно спорить или соглашаться, но несомненен тот факт, что конструкция "math.function()" довольно громостка, к тому же, если нам приходится за одну рабочую сессию использовать функции по несколько раз. Для решения данной проблемы существует два альтернативных способа указания модуля, к которому относится используемая функция.

  1. Можно ввести такую команду:
    from math import sqrt
    и нажать Enter. После этого применять функцию sqrt можно без префикса math. То есть достаточно будет писать
    sqrt(4)
    Причём, если вами планируется использовать несколько функций из модуля math, то в команде импорта можно записать их названия через запятую, например,
    from math import sqrt, sin, cos
    Также можно вообще написать
    from math import *
    В этом случае, будут импортированы вообще все функции модуля math.
  2. А можно ввести такую команду:
    import math as m
    В этом случае, мы как бы заменяем запись "math." на "m.". То есть после такого способа импорта модуля math нам надо будет писать квадратный корень следующим образом:
    m.sqrt(4)
    То есть всё-таки короче, чем
    math.sqrt(4)

Справка по модулю и функциям

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

Для того, чтобы узнать о назначении каждой функции, достаточно ввести команду "help(math.имя_функции)", например:
help(math.sqrt)
Аналогично можно просмотреть и всю информацию о модуле, например:
help(math)

Вся информация выводится на английском языке.

Заключение

Как писал Александр Сергеевич Пушкин в своей поэме "Евгений Онегин":
"…Мы все учились понемногу
Чему-нибудь и как-нибудь…".
Здесь с поэтом трудно не согласиться. Практически любой человек скажет, что в уравнении
x2 = 2
x = sqrt(2)

Чуть более продвинутый в математическом отношении индивид вспомнит, что существует и второй x, который равен -sqrt(2). Однако уравнение типа
x2 = -2
поставит большинство в тупик. Однако и такое уравнение имеет своё решение. Но не всем нужны, а главное далеко не всем полезны такие "игры разума", называемые комплексной арифметикой. Однако если кому-нибудь понравилось производить математические расчёты посредствам Консоли Python в программе экранного доступа NVDA, то это вполне реально делать и с комплексными числами. В Python также присутствует ряд комплексных функций, так что здесь нет ничего невозможного. При помощи этого инструмента NVDA можно сделать ещё много полезных вещей, однако всё это не рассказать в одной статье.

Если вы дочитали до этого места, то свою главную задачу эта статья уже выполнила, так как вы, скорее всего, поняли, что Консоль Python в NVDA - это непочатый край для людей, регулярно имеющих дело с математикой, а как говорил Иммануил Кант: "В каждой естественной науке заключено столько истины, сколько в ней есть математики".



Распространение материалов сайта означает, что распространитель принимает условия лицензионного соглашения.
Идея и реализация: © Владимир Довыденков и Анатолий Камынин,  2004-2017
Rambler's Top100