Арифметические операции | Python | CodeBasics
На базовом уровне компьютеры оперируют только числами. Даже в прикладных программах на высокоуровневых языках внутри много чисел и операций над ними. Но для старта достаточно знать обычную арифметику — с нее и начнем.
Например, для сложения двух чисел в математике мы пишем: 3 + 4
. В программировании — то же самое. Вот программа, которая складывает два числа:
3 + 4
Арифметика в программировании практически не отличается от школьной арифметики.
Строчка кода 3 + 4
заставит интерпретатор сложить числа и узнать результат. Эта программа будет работать, но в ней нет смысла. По сути, мы не даем команду интерпретатору, мы просто говорим ему: «смотри, сумма трех и четырех». В реальной работе недостаточно сообщать интерпретатору о математическом выражении.
Например, если создавать интернет-магазин, недостаточно просить интерпретатор посчитать стоимость товаров в корзине. Нужно просить посчитать стоимость И показать цену покупателю.
Нам нужно попросить интерпретатор сложить 3 + 4
И дать команду сделать что-то с результатом. Например, вывести его на экран:
# Сначала вычисляется сумма, # затем она передается в функцию печати print(3 + 4)
После запуска на экране появится результат:
7
Кроме сложения доступны следующие операции:
-
— вычитание*
— умножение**
— возведение в степень/
— деление//
— целочисленное деление%
— остаток от деления
Теперь выведем на экран результат деления, а потом результат возведения в степень:
print(8 / 2) # => 4.0 (При делении двух чисел получается тип данных float) print(3 ** 2) # => 9
Иногда для удобства мы будем показывать в комментариях результат запуска строчек кода вот так: => РЕЗУЛЬТАТ
. Например, # => 4
.
Первая инструкция выведет на экран 4
(потому что 8 / 2 равно 4), а вторая инструкция выведет на экран 9 (потому что 32 равно 9).
Задание
Выведите на экран результат деления числа 81
9
.Упражнение не проходит проверку — что делать? 😶Если вы зашли в тупик, то самое время задать вопрос в «Обсуждениях». Как правильно задать вопрос:
- Обязательно приложите вывод тестов, без него практически невозможно понять что не так, даже если вы покажете свой код. Программисты плохо исполняют код в голове, но по полученной ошибке почти всегда понятно, куда смотреть.
Тесты устроены таким образом, что они проверяют решение разными способами и на разных данных. Часто решение работает с одними входными данными, но не работает с другими. Чтобы разобраться с этим моментом, изучите вкладку «Тесты» и внимательно посмотрите на вывод ошибок, в котором есть подсказки.
Это нормально 🙆, в программировании одну задачу можно выполнить множеством способов. Если ваш код прошел проверку, то он соответствует условиям задачи.
В редких случаях бывает, что решение подогнано под тесты, но это видно сразу.
Прочитал урок — ничего не понятно 🙄Создавать обучающие материалы, понятные для всех без исключения, довольно сложно. Мы очень стараемся, но всегда есть что улучшать. Если вы встретили материал, который вам непонятен, опишите проблему в «Обсуждениях». Идеально, если вы сформулируете непонятные моменты в виде вопросов. Обычно нам нужно несколько дней для внесения правок.
Кстати, вы тоже можете участвовать в улучшении курсов: внизу есть ссылка на исходный код уроков, который можно править прямо из браузера.
Полезное
Всегда отбивайте арифметические операторы пробелами от самих чисел (операндов) – это хороший стиль программирования. Поэтому в наших примерах
print(3 + 4)
, а неprint(3+4)
.Деление на ноль — порождает ошибку.
Деление с остатком
Определения
←Предыдущий
Следующий→Нашли ошибку? Есть что добавить? Пулреквесты приветствуются https://github.com/hexlet-basics
Числа и арифметические операторы Python
Числа очень часто применяются в программирование для ведения счета в играх, представления данных в визуализации, хранение информации и т.д.
Содержание страницы: |
---|
1. Типы чисел |
2. Арифметические операторы |
2.1. Сложение и вычитание |
2.2. Умножение |
2.3. Возведение в степень |
2.4. Деление |
2.5. Деление с округлением |
2.6. Оператор вычисления остатка от деления |
3. |
1. Типы чисел в Python.
В Python числа делятся на несколько категорий в соответствии со способом их использования. Основные это целые числа (int) и вещественные (float) или числа с плавающей точкой. Чтобы узнать к какому типу относится число или переменная, можно воспользоваться встроенной функцией type(). Запустите командную строку и активируйте Python. В скобках введите число или переменную, чтобы узнать ее тип.
>>> type(5)
>>> type(12.5)
<class ‘float’>
>>> x = 10
>>> type(x)
<class ‘int’>
Значение 12,5 является числом с плавающей точкой, поэтому Python выводит строку float. Переменная x содержит целое число 10, поэтому Python выводит тип int (сокращение от integer).
2. Арифметические операторы Python.
В таблице перечислены арифметические операторы, среди которых встречаются некоторые знаки, не используемые в алгебре.
Операции Python | Арифметический оператор | Алгебраическое выражение | Выражение Python |
---|---|---|---|
Сложение | + | a + b | a + b |
Вычитание | — | a — b | a — b |
Умножение | * | a · b | a * b |
Возведение в степень | ** | xy | a ** b |
Деление | / | x / y | x / y |
Целочисленное деление | // | [ x / y ] | x // y |
Остаток от деления | % | r mod s | r % s |
2.
1. Сложение и вычитание в Python.Сложение и вычитание
>>> 5 + 2
7
>>> 5 — 2
3
2.2. Умножение в Python( * )
В Python в качестве оператора умножения используется знак * (звездочка)
>>> 5 * 5
25
2.3. Возведение в степень в Python(
** )В Python для возведения в степень используются два знака **.
>>> 5 ** 6
15625
>>> 81 **(1/2)
9.0
Для вычисления квадратного корня можно воспользоваться показателем степени 1/2. Корень 81 = 9.
2.4. Деление в Python (
/ )Оператор деления
>>> 10 / 2
5. 0
>>> 10 / 8
1.25
♦ Важно, при делении двух любых чисел — даже если это целые числа, частным от деления которых является целое число, вы всегда получаете вещественное число.
2.5. Деление с округлением в Python(
// )Операция целочисленное деление ( // ) делит числитель на знаменатель, в результате получается наибольшее целое число, не превышающее результат. В Python дробная часть отсекается.
>>> 10 // 8
1
>>> 20 // 8
2
>>> — 17 // 4
-5
При обычном деление 10 на 8, получается результат 1,25. Python отсекает дробную часть и в итоге получаем 1.
2.6. Оператор вычисления остатка от деления (
% )Для вычисления остатка от деления в Python используется оператор вычисления остатка от деления %
>>> 21 % 5
1
>>> 18 % 4
2
>>> 9. 5 % 4.5
0.5
В данных примерах при делении 21 на 5, получается частное 4 и остаток 1. Во втором случае при делении 18 на 4, получается 4 и остаток 2. Этот оператор чаще работает с целыми числами, но также может использоваться и с другими типами.
3. Исключения и трассировка.
В Python также как и в алгебре деление на 0 запрещено. При попытке выполнения такой операции происходит исключение. Сообщая об исключение, Python выдает трассировку стека. В трассировке указано, что произошло исключение типа ZeroDivisionError, большая часть исключений заканчивается суффиксом Error. Ошибка division by zero — деление на ноль.
>>> 5 / 0
Traceback (most recent call last):
File «<stdin>», line 1, in <module>
ZeroDivisionError: division by zero
Далее: Строки и функция print в Python
Назад: Запуск программ Python в командной строке
>>> 5 -?
Что означает // в Python?
Что делает оператор Python //
?
Чем он отличается от оператора /
?
Оператор
/
Оператор /
является оператором деления в Python.
Когда /
используется между двумя числами, вы всегда получите точный (настолько точный, насколько Python может управлять) результат обратно:
>>> 5 / 2 2,5
В отличие от некоторых языков программирования, /
в Python не действует иначе при использовании между целыми числами; в Python 3 то есть.
В Python 2 деление на два целых числа приведет к уменьшению до ближайшего целого числа:
>>> 5 / 2 # Python 2 2
Но в Python 3 деление двух целых чисел всегда возвращает число с плавающей запятой с точным результатом:
>>> 4 / 2 2.0
Оператор
//
между целыми числами // 9Оператор 0004 — это оператор деления пола в Python. Когда
//
используется между двумя целыми числами, вы всегда получите целое число:
>>> 5 // 2 2
Оператор //
обеспечивает деление при округлении результата до ближайшего целого числа.
Это часто называют целочисленным делением или делением пола .
При использовании //
с числом с плавающей запятой вы получите обратно число с плавающей запятой:
>>> 5.0 // 2 2.0
Но, как и в случае с целыми числами, это число с плавающей запятой будет , а будет округленным в меньшую сторону до ближайшего целого числа .
Когда следует использовать
//
в Python?Если вы когда-нибудь видели такой код:
>>> n = 5 >>> целое(n / 2) 2
Тогда вы, вероятно, видели возможность использовать оператор //
.
Если вы делите, а затем сразу же конвертируете результат в целое число, вы, вероятно, могли бы использовать 9Вместо оператора 0003 // .
В этой функции split_in_half
мы используем функцию int
, чтобы убедиться, что значение mid_point
является целым числом:
def split_in_half(sequence): """Вернуть две половины заданной последовательности (список, строка и т.д.)""" mid_point = int (len (последовательность) / 2) возвращаемая последовательность[:mid_point], последовательность[mid_point:]
Оба числа, которые мы делим, являются целыми числами, поэтому мы могли бы использовать //
, чтобы получить целочисленный результат:
по определению split_in_half (последовательность): """Вернуть две половины заданной последовательности (список, строка и т.д.)""" mid_point = len(последовательность) // 2 возвращаемая последовательность[:mid_point], последовательность[mid_point:]
Это немного эффективнее, чем деление для получения точного числа с плавающей запятой, а затем деление этого числа с плавающей запятой, чтобы вернуться к целому числу.
Обратите внимание, что
//
всегда округляется в меньшую сторону Прежде чем вы замените все варианты использования int(a / b)
в вашем коде с a // b
, вы должны заметить, что эти два действия действуют по-разному, когда результатом деления является отрицательное число:
Допустим, мы делим и получаем результат -2,5
:
>> > а = -5 >>> б = 2 >>> а/2 -2,5
При использовании /
и int
мы получим -2
, но при делении на //
мы получим -3
вместо:
>>> int(a / 2 ) -2 >>> а // 2 -3
Оператор //
всегда округляет в меньшую сторону.
Он действует не столько как встроенная функция int
, сколько как math.floor
:
>>> from math import floor >>> этаж(а/2) -3 >>> а // 2 -3
Также помните, что a // b
возвращает число с плавающей запятой, когда либо a
, либо b
являются числами с плавающей запятой.
>>> а = 52,0 >>> б = 4 >>> а // б 13,0
Таким образом, вы, скорее всего, захотите использовать //
только для деления между положительными целыми числами .
Использование
divmod
вместо Что делать, если вам нужно целочисленное деление (с //
) и остаток от этого деления (с %
):
>>> duration = 500 >>> минуты = продолжительность // 60 >>> секунды = продолжительность % 60 >>> print(f"{минуты}:{секунды}") 8:20
Вместо //
и %
отдельно, вы можете использовать функцию divmod
, чтобы получить оба результата одновременно:
>>> duration = 500 >>> минуты, секунды = divmod(длительность, 60) >>> print(f"{минуты}:{секунды}") 8:20
Теоретически это можно оптимизировать для одновременного выполнения обеих операций, но на практике CPython не выполняет эту оптимизацию, поэтому в первую очередь касается читабельности .
Иногда divmod
может сделать код значительно более читаемым.
Например, здесь мы используем //
и %
, чтобы получить часы, минуты и секунды:
>>> duration = 9907 >>> часы = продолжительность // (60 * 60) >>> минуты = (длительность // 60) % 60 >>> секунды = продолжительность % 60 >>> print(f"{часы}:{минуты:02d}:{секунды:02d}") 2:46:07
Но вместо этого мы могли бы дважды использовать divmod
:
>>> duration = 9907 >>> минуты, секунды = divmod(длительность, 60) >>> часы, минуты = divmod(минуты, 60) >>> print(f"{часы}:{минуты:02d}:{секунды:02d}") 2:46:07
Я считаю, что подход divmod
намного понятнее, чем альтернативное использование //
и %
.
Если вам нужно как частное (если использовать математический термин), так и остаток от деления, рассмотрите возможность использования divmod
.
Примечание : если вам интересно, :02d 9Синтаксис 0004 выше, см. заполнение нулями в f-строках.
Используйте
//
для целочисленного деления Для большинства применений деления в Python вы, вероятно, будете использовать /
, потому что часто желательны точные ответы:
>>> amount = 67 >>> групп = 9 >>> per_partion = количество/группы >>> per_partion 7.444444444444445
Но в редких случаях, когда вам нужно деление пола (также известное как целочисленное деление ), вам понадобится //
оператор.
>>> сумма = 67 >>> групп = 9 >>> Minimum_per_group = количество // групп >>> минимум_на_группу 7
Если вам нужен остаток %
и целочисленное деление //
, также помните о функции Python divmod
.
>>> продолжительность = 784 >>> минуты, секунды = divmod(длительность, 60) >>> print(f"{минуты}м{секунды}с") 13м4с
Разница между '/' и '//' в Python, раздел
По Танишка Дондж / 12 февраля 2023 г.
Давайте попробуем понять разницу между операторами «/» и «//», используемыми для деления в Python. Прежде чем перейти к этому, давайте кратко рассмотрим, для чего нужен оператор деления.
Что такое оператор деления в Python?
Язык программирования Python предоставляет различные арифметические операторы. Арифметические операторы — это операторы, помогающие выполнять арифметические операции между двумя операндами (числами). Одной из таких арифметических операций является операция деления.
Выводит частное двух входных операндов. Число перед оператором считается делимым, а число после оператора считается делителем.
Разница между операторами деления «/» и «//» в Python
В Python есть два способа выполнить деление с небольшой разницей в выводе. Давайте рассмотрим их обоих подробно.
1. Выполнение деления с помощью оператора «/»
Этот метод деления считается «классическим делением». Одинарная косая черта «/» выполняет деление с плавающей запятой. Результатом этого оператора всегда является частное с типом данных float. Выход остается с плавающей запятой, даже если входные числа являются целыми значениями. Даже знак входных операндов не имеет значения для вывода.
Примеры
# целочисленный ввод х1 = 15 у1 = 6 печать (x1/y1)
Вывод
Целое Разделение ввода с использованием ‘/’#ввод с плавающей запятой х2 = 15,0 у2 = 3,0 печать (x2/y2)
Выходные данные
Ввод с плавающей запятой Деление с помощью «/»Обратите внимание, что в обоих вышеприведенных случаях выходные данные одинаковы, даже если типы входных данных различны.
# отрицательный ввод х3 = -15 у3 = 2 печать (x3/y3)Отрицательное деление ввода с использованием «/»
2. Выполнение деления с использованием оператора «//»
Этот метод деления считается «истинным делением». Двойная косая черта «//» выполняет целочисленное деление, также известное как деление на пол. Результатом этого оператора будет частное, округленное до ближайшего целого числа. Например, 15, разделенное на 6, на самом деле равно 2,5, но оно округляется до 2,9.0007
Тип выходных данных, в этом случае, является целым числом для целочисленного ввода и плавающим числом для ввода с плавающей запятой. В случае отрицательного входного числа выход округляется в большую сторону. Например, деление -15 на 6 равно -2,5, поскольку частному присвоен отрицательный знак, результат деления пола будет округлен до -3 (помните, что не -2).
Работа этого оператора такова. то же, что и функция math.floor
Примеры
# целочисленный ввод х1 = 15 у1 = 6 печать (x1//y1)
Вывод
Int Ввод Деление с использованием ‘//’#ввод с плавающей запятой х2 = 15,0 у2 = 6 печать (x2//y2)
Вывод
Ввод с плавающей запятой Деление с использованием ‘//’# отрицательный ввод х2 = 15,0 у2 = 6 печать (x2//y2)
Выходные данные
Отрицательное деление ввода с использованием символа «//»Обратите внимание, что когда в качестве входных данных передается отрицательное значение, при делении на пол в выходных данных оказывается большее целое число.
Зачем два оператора для деления?
- Классическим оператором деления в Python считается одинарная косая черта. Хотя он выполняет правильное деление, проблема заключается в том, что он возвращает плавающий вывод даже для целых и длинных входных значений, и в некоторых ситуациях это может вызвать ошибку. Многие функции, например range(), ожидают целое число в качестве типа выходных данных, и передача целочисленных значений с помощью оператора «/» будет синтаксически корректной, но наверняка вызовет ошибку TypeError, поскольку выходные данные не будут иметь приемлемого типа данных.
- С другой стороны, оператор двойной косой черты «//» всегда округляет частное входного значения. Это может привести к математическим ошибкам в ситуации, когда ожидаются точные значения и не требуется приближение. Очень удобной альтернативой для этого является использование функции round() или floor() и передача классического деления, так как это даст те же результаты.