Занятие № 1. Числовые типы данных. Математические вычисления

Цель: научиться применять операторы ввода и вывода; выполнять вычисления с применением числового типа данных; научиться применять модуль math.

Теория

Повторите необходимые теоретические сведения и ответьте на вопросы.

Литералы и типы данных

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

Таблица 1: Базовые типы данных
Тип данных Примеры литералов
Целые числа -2, -1, 0, 1, 2, 3, 4, 5
Вещественные числа -1.25, -1.0, -0.5, 0.0, 0.5, 1.0, 1.25
Строки 'a', 'aa', 'aaa', "Привет!", """11 котов"""

Строковые литералы в Python располагаются внутри одиночных, двойных или тройных кавычек.

С помощью функции print можно вывести данные на экран. В круглых скобках через запятую можно указать несколько выводимых значений.

>>> print('Привет, мир!')
Привет, мир!
>>> print('Привет, мир!', 2024)
Привет, мир! 2024

Например, чтобы вывести на экран число 2024, нужно записать x ? .

С помощью следующих функций можно преобразовать значения одного типа в другой.

Таблица 2: Функции для преобразования типов
Функция Итоговый тип
int() Целое число (int)
float() Вещественное число (float)
str() Строка (str)

Запустите следующий код, и посмотрите на результат работы этих функций:

print(3.14, int(3.14))
print(3.9999, int(3.9999))
print(3.0, int(3.0))
print(-3.999, int(-3.999))

print("2345", int("2345"))
print(17, int(17))
print(int("23"))

      
print(3.14, int(3.14))
print(3.9999, int(3.9999))
print(3.0, int(3.0))
print(-3.999, int(-3.999))

print("2345", int("2345"))
print(17, int(17))
print(int("23"))

К примеру, после выполнения инструкции print(int(53.785)) на экран будет выведено число x .

Операторы и операнды

Для выполнения действий над значениями понадобятся операторы - символы, обозначающие определённую операцию. Оператор совершает действия над операндами.

В таблице показан приоритет выполнения действий:

Таблица 3: Приоритет выполнения действий
Оператор Приоритет Описание Пример
( ) 5 Скобки 3 * (4 - 1) = 9
функция() 4 Вызов функции abs(-4) = 4
** 3 Возведение в степень 2 ** 3 = 8
% 2 Остаток от деления 22 % 8 = 6
// 2 Целочисленное деление 22 // 8 = 2
/ 2 Деление 22 / 8 = 2.75
* 2 Умножение 3 * 3 = 9
- 1 Вычитание 5 - 2 = 3
+ 1 Сложение 2 + 2 = 4

Оператор // работает как для целых, так и для вещественных чисел. В случае с вещественными числами, дробная часть результата будет равна 0. Так, значение выражения 7.0 // 3.0 равно x ? , а результатом вычисления выражения 9 // 2 будет число x ? .

Переменные

Переменная - это имя, которое ссылается на значение.

Имя переменной должно подчиняться следующим правилам:

  1. Может состоять из одного слова (без пробелов).
  2. Может состоять только из букв, цифр и символа подчёркивания _.
  3. Не может начинаться с цифры.

Это значит, что имя переменной x sum num будет некорректным, а имя переменной x _name записано правильно.

Чтобы присвоить переменной значение используется инструкция присваивания:

message = "Как дела?"   # переменная строка
n = 17                  # переменная с целым числом
pi = 3.14159            # переменная с вещественным числом

Оператор присваивания = связывает имя переменной с её значением. В Python не нужно заранее указывать тип переменной. Значения обладают типом, имена переменных - нет.

Переменная ссылается на объект (Рисунок 1 (a)). Если мы присваиваем переменной другое значение, ссылка на предыдущее значение (объект) исчезает, и создаётся новая ссылка (Рисунок 1 (b)). На один объект могут ссылаться множество переменных (Рисунок 1 (c)).

flowchart LR
    message[message]-->B("Как дела?")
    n[n] --> val(17)
    pi[pi] --> val2(3.14159)
(a)
flowchart LR
    n[n] --> val(19)
    m[sum] --> val
(c)
Рисунок 1

Инструкции и выражения

Инструкция - это минимальный набор действий, которые может выполнить интерпретатор. Иными словами, после выполнения инструкции есть эффект её выполнения, но нет конкретного значения, которое можно назвать результатом выполнения инструкции. К инструкциям относится присваивание, алгоритмические конструкции if, while, for, импорт модулей import.

Выражение - это комбинация литералов, имён переменных, операторов и вызовов функций. Как только интерпретатор встречает выражение, то начинается вычисление его значения. Результатом вычисления выражения является значение.

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

print(16 - 2 * 5 // 3 + 1)

В результате на экране выведется число x ? .

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

import math

Модуль math содержит следующие функции и константы:

Таблица 4: Модуль math
В Python В математике Описание
math.pi \(\pi\) Приблизительное значение числа Пи
math.sqrt(x) \(\sqrt{x}\) Корень квадратный из x
math.sin(x) \(\sin ⁡x\) Синус x
math.cos(x) \(\cos⁡ x\) Косинус x

К примеру, чтобы посчитать \(\sin \frac{\pi}{2}\) запишем math.sin(math.pi / 2), а чтобы посчитать \(\sqrt{16}\) - запишем x . Модуль math содержит и другие функции, о которых будет рассказано на последующих занятиях.

Ввод значений

Чтобы ввести значение с клавиатуры, используется функция input(). Введённое значение имеет строковый тип str:

n = input("Введите своё имя: ")

В примере выше в переменная n будет ссылаться на введённую строку.

Чтобы сразу преобразовать вводимое значение в нужный тип, используют вложенный вызов преобразования типов:

age = int(input("Введите ваш возраст: "))

При вызове функции input() можно указать строку с текстом запроса, который увидит пользователь перед вводом значения.

Работа и интерпретатором Python

Запустите редактор IDLE. Он откроется в режиме интерпретатора - мы можем вводить выражения и сразу же получать результат их вычисления.

Например, чтобы посчитать значение следующего выражения \[ \frac{4.2 \cdot 3}{10.5} + 1.5^3 \] введите следующий код в интерпретатор: 4.2 * 3 / 10.5 + 1.5 ** 3. Нажмите клавишу Enter, чтобы получить ответ. Интерпретатор выведет на экран число x ? .


Самостоятельно с помощью интерпретатора посчитайте значение выражения для вашего варианта:

\[ \frac{12 + 3 \cdot 4}{8} - 2^2 \]

Ответ: x

\[ 5.5 \cdot 2 + \frac{18}{1.5^2} \]

Ответ: x

\[ (7 - 2.2)^2 + \frac{5}{4} \]

Ответ: x

\[ \frac{3^3 - 10}{2.5} + 1.2 \cdot 5 \]

Ответ: x

\[ 15 - 4^2 + \frac{6.3 \cdot 2}{1.4} \]

Ответ: x

\[ 2.5^3 - \frac{4 \cdot (8 + 2)}{5} \]

Ответ: x

\[ \frac{100}{2^3} + 3.7 \cdot (4 - 1) \]

Ответ: x

\[ (12.6 / 3) + 5^2 - 4 \cdot 3.1 \]

Ответ: x

\[ 8 \cdot 1.75 - \frac{3^2}{0.6} \]

Ответ: x

\[ \frac{2.4 + 5.6}{4} \cdot 3^2 - 7 \]

Ответ: x

\[ 13 - 2.2^2 + \frac{9}{1.8} \]

Ответ: x

\[ (6.5 \cdot 2) / 1.3^2 + 4 \]

Ответ: x

\[ 20 / 5 + 3.5^2 - 2 \cdot 4.1 \]

Ответ: x

\[ \frac{15 - 2^3}{0.7} + 5 \cdot 1.2 \]

Ответ: x

Используйте Таблицу 3, если вам нужна подсказка.

Примеры

В окне интерпретатора IDLE выберите меню File - New File (Файл - Новый файл). Открывшееся окно - текстовый редактор в котором будем набирать код следующих программ на Python.

Пример № 1 (ex01.py)

Вычислим среднее арифметическое двух чисел, введённых с клавиатуры. Запишите следующий код в редактор:

# ввод первого числа
num1 = input("Введите первое число ")
# ввод второго числа
num2 = input("Введите второе число ")

# сумма введённых чисел
s = num1 + num2
print(s)

Запустите скрипт (меню Run - Run Module) и введите для проверки числа 4 и 2 - каждое с новой строки. На экран выведется значение равное x .


Сумма должна быть равна 6. Ошибка связана с тем, что функция input() возвращает строковое значение. В переменной num1 сохранится строка "4", а в переменной num2 - строка "2". При сложении строк они объединяются в одну строку.

Чтобы преобразовать строку в вещественное число используем функцию float(). Исправьте существующий код:

# ввод первого числа
num1 = float(input("Введите первое число "))
# ввод второго числа
num2 = float(input("Введите второе число "))

s = num1 + num2
print(s)

Запустите скрипт и введите для проверки числа 4 и 2. На экран выведется значение равное x ? .


Дополните код расчётом среднего значения:

'''
Вычисление среднего арифметического.
Чтобы сложение выполнилось раньше деления
слагаемые помещены в скобки
'''
average = (num1 + num2) / 2

print("Ответ: ", average)

Запустите скрипт и введите для проверки числа 9.4 и 7.3. На экран выведется среднее значение равное x .


Подведём итог. Функция input() возвращает x строку. Функция float() используется чтобы преобразовать введённые значения в x вещественное число.

Пример № 2 (ex02.py)

Напишем программу для вычисления корней квадратного уравнения по заданным коэффициентам a, b и c.

Для нахождения корней уравнения используем формулу:

\[ x=\frac{-b\pm\sqrt{D}}{2a} \]

где \(D=b^2-4ac\).

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

import math

Модуль math содержит множество функции и констант. Некоторые из них показаны в Таблице 4.

Создайте новый скрипт и запишите следующий фрагмент кода:

#загрузка модуля содержащего математические функции
import math

print("Вычисление корней квадратного уравнения")
#ввод коэффициентов квадратного уравнения
a = float(input("введите коэффициент a "))
b = float(input("введите коэффициент b "))
c = float(input("введите коэффициент c "))

D = b ** 2 - 4 * a * c
print("D = ", D)

Запустите скрипт и введите следующие значения для проверки: 2, -7, 4. На экран выведется значение равное x .


Убедившись в правильной работе первой части решения, переходим к вычислению корней уравнения. Дополните решение следующим кодом:

'''
для вычисления корня квадратного 
используется функция sqrt модуля math
'''
#вычисление первого корня уравнения
root1 = (-b + math.sqrt(D)) / (2 * a)
#вычисление второго корня
root2 = (-b - math.sqrt(D)) / (2 * a)

#вывод ответа на экран
print("Корни уравнения: ", root1, root2)

Запустите скрипт и введите коэффициенты 2, -6, 4. На экране появятся результаты вычислений: root1 = x , а root2 = x .


Подведём итоги. Оператор ** используется для x возведения коэффициента b в квадрат. Функция sqrt модуля math применяется для x извлечения квадратного корня.

Задания для самостоятельной работы

Решите следующие задачи самостоятельно.

Задание № 1 (sam01.py)

Дана длина ребра куба a. Найти площадь боковой поверхности куба S. Длина ребра вводится с клавиатуры.

Составьте код решения из следующих инструкций. Среди строк есть лишние:

a = float(input("длина ребра куба: "))
S = a ** 2 * 6
print("Площадь боковой поверхности", S)
print("Площадь боковой поверхности", S)
a = input("длина ребра куба: ")
S = a ** 2 * 6
a = float(input("длина ребра куба: "))
print("Площадь боковой поверхности", "S")
S = a ^ 2 * 6

Наберите код программы и проверьте её работу.

Пример работы программы:

Длина ребра куба: 4.5 ++enter++
Площадь боковой поверхности: 121.5
УведомлениеУсловное обозначение

Изображение клавиши ↵Enter в примерах работы программ находится после данных которые вводятся с клавиатуры. Нажатие этой клавиши подтверждает ввод значения.

Задание № 2 (sam02.py)

Напишите программу вычисляющую объём и площадь поверхности сферы. Радиус сферы вводится с клавиатуры. Для вычислений используйте следующие формулы:

\[ V=\frac{4}{3}\pi r^3 \]

\[ S=4\pi r^2 \]

где r – радиус сферы.

Пример работы программы:

Радиус сферы: 6.4 ++enter++
Объём сферы: 1098.0662194435238
Площадь поверхности: 514.7185403641517

Значение \(\pi\) можно взять из модуля math, записав math.pi.

Для возведения в степень используйте оператор **.

Задание № 3 (sam03.py)

Общая стоимость пиццы определяется произведением её площади на стоимость \(1\,м^2\) пиццы. Рассчитайте общую стоимость пиццы по заданному радиусу и стоимости \(1\,м^2\). Радиус и стоимость вводятся с клавиатуры.

Пример работы программы:

Радиус пиццы (см): 36 ++enter++
Стоимость 1 см² пиццы (руб): 0.0062 ++enter++
Общая стоимость пиццы: 25.243325290124705 руб

Задание № 4 (sam04.py)

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

Пример работы программы:

Время (с): 6 ++enter++
Расстояние до грозы: 1986.0 м

Задание № 5 (sam05.py)

Магазин продаёт кофе по цене 100 рублей за килограмм плюс стоимость доставки. Доставка одного килограмма кофе стоит 0,85 рубля за килограмм. Напишите программу, вычисляющую общую стоимость заказа исходя из веса кофе. Вес в килограммах вводится с клавиатуры.

Пример работы программы:

Вес кофе (кг): 4 ++enter++
Стоимость заказа: 403.4 руб

Задание № 6 (sam06.py)

Расстояние между двумя точками A и B координатной плоскости с соответствующими координатами (x1, y1) и (x2, y2) рассчитывается по следующей формуле:

\[ L=\sqrt{(x_2-x_1)^2+(y_2-y_1)^2} \]

Напишите программу вычисляющую расстояние между двумя точками. Координаты точек вводятся с клавиатуры.


Понадобится импортировать модуль math чтобы использовать функцию извлечения квадратного корня sqrt.

Задание № 7 (sam07.py)

Напишите программу для вычисления площади треугольника по введённым с клавиатуры длинам сторон a, b и c.


Для вычислений используйте формулу Герона.

Задание № 8 (sam08.py)

К стене прислонили лестницу. Угол (в градусах) между лестницей и полом равен alpha. Какой длины L должна быть лестница, чтобы достать до высоты h ?


Понадобится импортировать модуль math чтобы использовать функцию sin. В Python тригонометрические функцию ожидают угол в радианах. Значит перед вычислением ответа, нужно перевести угол alpha из градусов в радианы.