Рубрики
Без рубрики

Python Modulo -% оператор, math.fmod () примеры

Оператор Modulo Python (%) используется для того, чтобы получить оставшуюся часть подразделения. Операция по модулю поддерживается для целых чисел и плавающих точек.

Автор оригинала: Pankaj Kumar.

Python Modulo -% оператор, math.fmod () примеры

Оператор Modulo Python (%) используется для того, чтобы получить оставшуюся часть подразделения. Операция по модулю поддерживается для целых чисел и плавающих точек.

Синтаксис модульного оператора – % b Отказ Здесь «A» – это дивиденды и «Б» – это делитель. Выход – остаток, когда A разделен на б.

Если оба «а» и «B» являются целыми числами, то остаток также является целым числом. Если один из них плавает, результат также имеет номер с плавающей запятой.

Пример оператора модуля Python

Давайте посмотрим на несколько примеров модульного оператора.

1. Модуло с целыми числами

>>> 10 % 3 
1
>>> 2 % 2
0
>>> 

2. Модуло с поплавком

>>> 9 % 3.0
0.0
>>> 10 % 3.0
1.0
>>> 

3. Модуло с пользовательскими входами

x = input("Please enter first number:\n")
fx = float(x)

y = input("Please enter first number:\n")
fy = float(y)

print(f'{x} % {y} = {fx % fy}')
Оператор модуля Python

Когда мы получаем введенные данные, это в форме строки. Мы используем встроенную функцию float (), чтобы преобразовать их в номер с плавающей запятой. Вот почему остаток составляет 1,0, а не 1.

Рекомендуется читать : Функция ввода Python ()

4. Пример ZerodivisionError

Если делитель 0, оператор модуля бросит ZerodivisionError Отказ Мы можем использовать попробуйте за исключением блока Чтобы поймать ошибку.

a = 10.5
b = 0

try:
    print(f'{a} % {b} = {a % b}')
except ZeroDivisionError as zde:
    print("We cannot divide by 0")
Python Modulo ZerodivisionError.

5. Модуло с отрицательными числами

Оператор Modulo Python всегда возвращает остаток, имеющий тот же знак, что и делитель. Это может привести к некоторой путанице с выходом.

>>> -5 % 3
1
>>> 5 % -3
-1
>>> -10 % 3
2
>>> 
  • -5% 3 = (1 -2 * 3)%
  • 5% -3 = (-1 * -2 * -3)% 3 = -1
  • -10% 3 = (2 -4 * 3)%

6. Python Modulo Math.fmod ()

Поведение% оператора с отрицательными числами отличается от библиотеки платформы C. Если вы хотите, чтобы операция по модулю вести себя как программирование C, вы должны использовать функцию Math Module FMOD (). Это рекомендуемая функция для получения модуля с номерами плавающих точек.

>>> import math
>>> math.fmod(-5, 3)
-2.0
>>> math.fmod(5, -3)
2.0
>>> math.fmod(-10, 3)
-1.0
>>> 
  • FMOD (-5, (- 2 -1 * 3, 3) = -2,0
  • FMOD (5, (2 -1 * -3, .0
  • FMOD (-10, (- 1 -3 * 3, 3) = -1,0

Перегрузка модульного оператора

Мы можем перегружать оператор модуло, реализуя __mod __ () Функция в нашем классе определение.

class Data:

    def __init__(self, i):
        self.id = i

    def __mod__(self, other):
        print('modulo function called')
        return self.id % other.id

    def __str__(self):
        return f'Data[{self.id}]'


d1 = Data(10)
d2 = Data(3)

print(f'{d1} % {d2} = {d1%d2}')

Выход:

modulo function called
Data[10] % Data[3] = 1

Быстрое слово о арифметических проблемах с плавающей точкой

Мы используем двоичный формат для хранения значений на компьютерах. Когда дело доходит до фракций, большую часть времени мы не можем представлять их именно в качестве двоичных фракций. Например, 1/3 не может быть представлен в точном двоичном формате, и он всегда будет приблизительным значением.

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

>>> 9.6 % 3.2
3.1999999999999993

Вывод должен быть 0, потому что 3.2 * 3 – 9,6. Но значения фракции поплавка не точно представлены, и приближение вызывает эту ошибку. Это ясно из этого примера тоже.

>>> 9.6 == 3.2 * 3
False
>>> 

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

>>> round(9.6, 3) == round(3.2 * 3, 3)
True

Использованная литература: