# numbers.py # integers >>> a = 14 >>> b = 3 >>> a + b # addition 17 >>> a - b # subtraction 11 >>> a * b # multiplication 42 >>> a / b # true division 4.666666666666667 >>> a // b # integer division 4 >>> a % b # modulo operation (reminder of division) 2 >>> a ** b # power operation 2744 >>> from math import pow >>> pow(10, 3) 1000 >>> 10 ** 3 1000 >>> pow(10, -3) 0.001 >>> 10 ** -3 0.001 >>> pow(123, 4) 228886641 >>> pow(123, 4, 100) 41 # notice: 228886641 % 100 == 41 >>> pow(37, -1, 43) # modular inverse of 37 mod 43 7 >>> 7 * 37 % 43 # proof the above is correct 1 # integer and true division >>> 7 / 4 # true division 1.75 >>> 7 // 4 # integer division, truncation returns 1 1 >>> -7 / 4 # true division again, result is opposite of previous -1.75 >>> -7 // 4 # integer div., result not the opposite of previous -2 # modulo operator >>> 10 % 3 # remainder of the division 10 // 3 1 >>> 10 % 4 # remainder of the division 10 // 4 2 # truncation towards 0 >>> int(1.75) 1 >>> int(-1.75) -1 # creating ints >>> int('10110', base=2) 22 # underscored >>> n = 1_024 >>> n 1024 >>> hex_n = 0x_4_0_0 # 0x400 == 1024 >>> hex_n 1024 # booleans >>> int(True) # True behaves like 1 1 >>> int(False) # False behaves like 0 0 >>> bool(1) # 1 evaluates to True in a boolean context True >>> bool(-42) # and so does every non-zero number True >>> bool(0) # 0 evaluates to False False >>> # quick peak at the operators (and, or, not) >>> not True False >>> not False True >>> True and True True >>> False or True True # int and bool >>> 1 + True 2 >>> False + 42 42 >>> 7 - True 6 # reals >>> pi = 3.1415926536 # how many digits of PI can you remember? >>> radius = 4.5 >>> area = pi * (radius ** 2) >>> area 63.617251235400005 # sys.float_info >>> import sys >>> sys.float_info sys.float_info( max=1.7976931348623157e+308, max_exp=1024, max_10_exp=308, min=2.2250738585072014e-308, min_exp=-1021, min_10_exp=-307, dig=15, mant_dig=53, epsilon=2.220446049250313e-16, radix=2, rounds=1 ) # approximation issue >>> 0.3 - 0.1 * 3 # this should be 0!!! -5.551115123125783e-17 # complex >>> c = 3.14 + 2.73j >>> c = complex(3.14, 2.73) # same as above >>> c.real # real part 3.14 >>> c.imag # imaginary part 2.73 >>> c.conjugate() # conjugate of A + Bj is A - Bj (3.14-2.73j) >>> c * 2 # multiplication is allowed (6.28+5.46j) >>> c ** 2 # power operation as well (2.4067000000000007+17.1444j) >>> d = 1 + 1j # addition and subtraction as well >>> c - d (2.14+1.73j) # fractions >>> from fractions import Fraction >>> Fraction(10, 6) # mad hatter? Fraction(5, 3) # notice it's been simplified >>> Fraction(1, 3) + Fraction(2, 3) # 1/3 + 2/3 == 3/3 == 1/1 Fraction(1, 1) >>> f = Fraction(10, 6) >>> f.numerator 5 >>> f.denominator 3 >>> f.as_integer_ratio() (5, 3) # decimal >>> from decimal import Decimal as D # rename for brevity >>> D(3.14) # pi, from float, so approximation issues Decimal('3.140000000000000124344978758017532527446746826171875') >>> D('3.14') # pi, from a string, so no approximation issues Decimal('3.14') >>> D(0.1) * D(3) - D(0.3) # from float, we still have the issue Decimal('2.775557561565156540423631668E-17') >>> D('0.1') * D(3) - D('0.3') # from string, all perfect Decimal('0.0') >>> D('1.4').as_integer_ratio() # 7/5 = 1.4 (isn't this cool?!) (7, 5)