Show how python does //, %, and divmod.


In [1]:
def show_math(numerator, divisor):
    quotient = numerator // divisor
    remainder = numerator % divisor
    assert (quotient, remainder) == divmod(numerator, divisor)
    print(numerator, divisor, quotient, remainder)

In [2]:
# just integers

divisor = 3
for numerator in range(-2*divisor-1, 2*divisor + 1):
    show_math(numerator, divisor)


-7 3 -3 2
-6 3 -2 0
-5 3 -2 1
-4 3 -2 2
-3 3 -1 0
-2 3 -1 1
-1 3 -1 2
0 3 0 0
1 3 0 1
2 3 0 2
3 3 1 0
4 3 1 1
5 3 1 2
6 3 2 0

In [3]:
# floats and integers

divisor = 3
numerators = map(
    float,
    '-3.1 -3 -2.9 -2.1 -2 -1.9 -1.1 -1 -0.9 -0.1 0 .1 .9 1 1.1 1.9 2 2.9 3 3.1'.split())
for numerator in numerators:
    show_math(numerator, divisor)


-3.1 3 -2.0 2.9
-3.0 3 -1.0 0.0
-2.9 3 -1.0 0.10000000000000009
-2.1 3 -1.0 0.8999999999999999
-2.0 3 -1.0 1.0
-1.9 3 -1.0 1.1
-1.1 3 -1.0 1.9
-1.0 3 -1.0 2.0
-0.9 3 -1.0 2.1
-0.1 3 -1.0 2.9
0.0 3 0.0 0.0
0.1 3 0.0 0.1
0.9 3 0.0 0.9
1.0 3 0.0 1.0
1.1 3 0.0 1.1
1.9 3 0.0 1.9
2.0 3 0.0 2.0
2.9 3 0.0 2.9
3.0 3 1.0 0.0
3.1 3 1.0 0.10000000000000009

In [4]:
# just floats

from math import e

divisor = e
for numerator in (x/2 for x in range(-6, 6+1)):
    show_math(numerator, divisor)


-3.0 2.718281828459045 -2.0 2.43656365691809
-2.5 2.718281828459045 -1.0 0.2182818284590451
-2.0 2.718281828459045 -1.0 0.7182818284590451
-1.5 2.718281828459045 -1.0 1.218281828459045
-1.0 2.718281828459045 -1.0 1.718281828459045
-0.5 2.718281828459045 -1.0 2.218281828459045
0.0 2.718281828459045 0.0 0.0
0.5 2.718281828459045 0.0 0.5
1.0 2.718281828459045 0.0 1.0
1.5 2.718281828459045 0.0 1.5
2.0 2.718281828459045 0.0 2.0
2.5 2.718281828459045 0.0 2.5
3.0 2.718281828459045 1.0 0.2817181715409549