Дада. Python ч1 Лабораторная работа №1. Линейные алгоритмы, математиче. Лабораторная работа 1. Линейные алгоритмы, математические функции. Цель показать ввод, вывод данных преобразовывать типы данных
Скачать 45.4 Kb.
|
Лабораторная работа №1. Линейные алгоритмы, математические функции.Цель: показать ввод, вывод данных; преобразовывать типы данных.Задача: научиться работать с математиче-скими функциями; работа с линейными алгоритмами.2 x2 2cos(x /6 ) log(3sin(x))(3cos( /42x)) 1tg2(2x/ ) 1) y tg 1 2 ; 2) y 2 . 2 1/2 sin Теоретическое введениеПри вычислении подобных выражений необходимо анализировать область допустимых значений аргументов, которые используются в выражении. Так, например, знаменатель дроби может получить нулевое значение и программа прервётся по ошибке деления на ноль. Необходимо учитывать и допустимый диапазон аргументов используемых функций. Так, основание логарифма должно быть больше нуля и не равняться единице, а логарифмируемая функция должна быть больше нуля. Внимательно следует относиться к выражению, в котором, например, выполняется извлечение квадратного корня или, в общем случае, возведение в степень, показатель которой является не целым числом. В этом случае может быть получен результат в виде комплексного числа или возникнет ошибка, которая приведёт к прерыванию работы программы. В наших примерах знаменатели 1/ 2 sin 2 и 1 tg2(2x/) всегда неравны нулю. Кроме этого, во втором примере, основание логарифма 3 sin( x)не отрицательно и не равно единице, а логарифмируемая функция 3 cos( / 4 2x) всегда больше нуля. Для математических вычислений в Python имеются как встроенные, так и дополнительные функции и методы. Применить дополнительные математические функций можно после подключения модуля math: import math либо from math import * В первом случае функции рассматриваются как методы объекта math и должны записываться так: import math print(math.sin(math.pi/4)) print(math.sqrt(2)/2) Во втором случае вызов функции может быть сделан в более привычной для нас форме: from math import * print(sin(pi/4)) print(sqrt(2)/2) Вместе с тем, такой способ импорта может нарушить пространство имен программы, поскольку может возникнуть конфликт между именами переменных, которые использует программист и именами импортируемых функций. При импорте можно ограничиться только необходимыми функциями, например: from math import (pi, sin, cos, tan, log) В этом примере демонстрируется способ импорта необходимых функций, и способ размещения инструкции на нескольких строках. Такие функции так же можно использовать в привычной для нас манере. Набор функций и методов модуля math приводится в Таблице 1, см. Приложение 1. Больше информации о функциях модуля math можно получить из документации или в сети Интернет. В тех случаях, когда в языке программирования нужная функция отсутствует, ее можно написать, либо вычислить, используя известные формулы. Например, ctg(x) = 1/tan(x)= cos(x)/sin(x). Имена переменных следует выбирать тщательнее и использовать либо принятые в математике или физике символы, либо фразы, отражающие назначение переменной. Например, символ можно заменить на a, или alpha. Значение цвета можно хранить в переменной Color, а объема в переменной Volume или Capacity. Обращайте внимание на цветовую раскраску переменной при наборе в редакторе IDLE. Она должна быть черной. Для решения задания потребуется вводить и выводить данные. В нашем случае это числа целого или вещественного типа. Ввод данныхВвод данных можно выполнить с клавиатуры функцией input(): m = input([str]) При этом на экран будет выведена строка str, а переменная m получит значение строкового типа, введённое пользователем. Строковый тип может быть преобразован, например, к типу int или float, если введённое значение – число. Для ввода нескольких значений можно воспользоваться методом split(), который позволяет разбить строку на подстроки (split– расщеплять). Например, для ввода значений параметра и переменной x можно поступить так: a, x = input('Введите данные (a, x): ').split() a = float(a) x = float(x) Используемый разделитель указывается в качестве параметра метода split(). Если разделитель не указан, то им будет пробел. При вводе вещественного числа целая часть отделяется от десятичной дроби точкой. Если пользователь не ввел данные (просто нажал Enter) или вместо цифр и точки ввел недопустимые символы, например буквы, программа завершится аварийно на шаге приведения к типу – float(). Исключительная ситуация, которая при этом возникает, может быть обработана с помощью инструкции try. Более подробно об этом следует прочитать, например, в [1]. В следующем примере пользователь должен ввести первое число целого типа, а второе – вещественного. Если ввод будет неправильным, то возникнет исключительная ситуация ValueError и управление программой будет передано в блок except. В этом блоке можно предусмотреть возможные ситуации и принять необходимое решение, например, заставить пользователя правильно ввести данные. import sys, traceback while True: a = x = "" try: a,x= (input('Введите [a: int, x: float]:') .split()) a = int(a) x = float(x) break except ValueError: if a == "" and x == "": a = x = 0 continue print("a - int, x - float. Пример: 3 4.5") print(a, x,) В теле "вечного" цикла while True:, в блоке try, инициализируются две переменные, а затем следует инструкция для ввода данных. При ошибочном вводе числа, например, вместо целого – вещественное, или вместо цифры – буква, возникнет исключительная ситуация ValueError. Управление будет передано в модуль except, где, в условном операторе, проверяется, были ли введены данные. Если был нажат Enter, то переменные получат нулевое значение и управление будет передано инструкции, которая следует за циклом. Если ввод данных был сделан, то исключительная ситуация возникла при преобразовании типов данных. В этом случае выдается предупреждающее сообщение, и управление передается в начало цикла (ввод должен быть повторен). Замечание:Если не выполнить инициализацию переменных перед инструкцией input(), то при возникновении исключительной ситуации (при вводе нажат только Enter), управление будет передано в модуль except, где возникнет новая исключительная ситуация в условном операторе if: переменная a не определена. Вывод данныхВывод данных на экран монитора может быть выполнен функцией print(). Эта функция позволяет выполнять форматированный вывод, как с использованием Си-подобного форматирования, так и с использованием форматной строки Python. Следующие строки демонстрируют, как можно форматировать вывод. for x in range(1,11): print('%2d %3d %7.2f' % (x, x*x, x*x*x)) print("{0:.2f} {1:.2f} {2:.4f}".format(a, x, y)) Буква в формате числа определяет тип выводимого числа. Так, d – это целый тип, f – вещественное число. Число в формате означает то число позиций, которое будет использовано для вывода числа. Для вещественного числа указывается, после точки, количество выводимых десятичных знаков. Во второй строке использован Си-подобный формат, в котором формат числа начинается с процента "%". В этом формате аргументы отделяются от форматной части строки так же символом % – процент. В третьей строке используется форматная строка Python, в которой в форматной строке позиции для значений аргументов выделяются фигурными скобками. Обратите внимание на то, что сами форматные строки начинаются и завершаются одиночной или двойной кавычкой. В Python допускаются оба вида кавычек для выделения строки. Важно только что бы начало и конец были одинаковыми. Так же следует понимать, что в промежутках между символами форматирования могут находиться и другие символы или слова: print('x=%2d x^2=%3d x^3=%7.2f' % (x, x*x, x*x*x)) print("a={0:.2f} x={1:.2f} y={2:.4f}" .format(a, x, y)) Использование форматных строк делает вывод данных более внятным. За более подробной информацией обращайтесь к учебникам или Интернет. Решение заданияВернемся к нашим примерам и запишем их, используя правила языка Python. Первое выражение примет вид: 1. y = tan(x**2/2-1)**2+2*cos(x-pi/6)/(1/2+sin(a)**2) Второе выражение представим в виде двух: tmp=log(3-cos(pi/4+2*x), 3+sin(x))/(1+tan(2*x/pi)**2) y = pow(2, tmp) Описание алгоритмаДля вычислений необходимо обеспечить ввод двух переменных x и a. Поскольку по условиям задачи их тип и точность представления не заданы, выберем для них вещественный тип (float). Для оптимизации записи выражения используем промежуточную переменную tmp. Ввести значения a и x, преобразовать к типу float. Вычислить выражение 1. Вывести результат вычисления. Вычислить значение переменной tmp; Вычислить выражение 2. Вывести результат вычисления. Листинг программы# -*- coding: cp1251 -*- from math import * a = float(input('Введите параметр а: ')) x = float(input('Введите значение x: ')) y=tan(x**2/2-1)**2+(2*cos(x-pi/6))/(1/2+sin(a)**2) print("{0:.2f} {1:.2f} {2:.4f}".format(a, x, y)) tmp=log(3-cos(pi/4+2*x), 3+sin(x))/(1+tan(2*x/pi)**2) y=pow(2,tmp) print("{0:.2f} {1:.4f}".format(x, y)) Результаты тестирования программы
Примечание:Эта таблица оформлялась в текстовом редакторе вручную. Самостоятельно
Список используемой литературы : 1. Н.А. Прохоренок, В.А. Дронов, Python 3 и PyQt 5. Разработка приложений: СПб.: БХВ-Петербург, 2017 2. С.Р. Авриевич, Язык программирования Python. Курс лекций 3. Д. Мусин, Самоучитель Python. Вып. 0.2, 2016 4. С. Шапошникова, Основы программирования на Python. Вводный курс, вер. 2., http://younglinux.info, 2011 5. T.E. Oliphant, Guide to NumPy: PhD, 2006 6. NumPy, лекция 4, файл в формате pdf: Py_Lecture4_numpy.pdf 7. Wes McKinney, Python for Data Analysis: Published by O’Reilly Media, Inc., 2013 8. NumPy User Guide, Release 1.12.0, Written by the NumPy community, 2017 |