# Python informer

## Numbers

#
# Types of numbers
#

5           # -> 5 (integer)
type(5)     # -> <class 'int'>
# integer type
2.5         # -> 2.5 (float)
type(2.5)   # -> <class 'float'>
# floating point type

10**100     # -> 10000000000000000000000000000...000
# eg 10 to the power 100 is 1 followed by 100 zeros
# integers can have any number of digits,

1/3         # -> 0.3333333333333333
# Floats have around 16 significant figures

2+3j        # -> (2+3j) (complex number, j represents
#            imaginary number)
type(2+3j)  # -> <class 'complex'>
# complex number type



## Maths

#
# Operators
#

2 + 4        # -> 6 (addition)
7 - 3        # -> 4 (subtraction)
6 * 2        # -> 12 (multiplication)
5 / 2        # -> 2.5 (division)
2**3         # -> 8 (raise to the power, 2 to the power 3)
(4 + 3) * 2  # -> 24 (brackets change priority)

5 // 2       # -> 2 (integer division always rounds down)
-5 // 2      # -> -3
5 % 2        # -> 1 (modulo or remainder)

5.7 // 2.1   # -> 2.0 ( // works with floats,
#          always a whole number)
5.7 % 2.1    # -> 1.5
# % also works with floats, result is:
# x % y = x - y * (x // y)

#
# int or float result?
#

2.0 + 3      # -> 5.0 (if any input is a float,
#         the result will be a float)
2 + 3        # -> 5 (if all inputs are ints the
#       result will be an int)
# EXCEPT:
6 / 3        # -> 2.0 (division always gives a float
#         even if the result is a whole number)
2**-2        # -> 0.25 (raising to a negative power
#          always gives a float)



## Variables

a = 3       # variables don't need to be declared
b = 1.2     # they are created when first assigned

type(a)     # -> <class 'int'>
# variables don's have a type, but data does
a = 2.5     # the same variable can be assigned different data types
type(a)     # -> <class 'float'>
a = 'abc'   # -> <class 'str'> see below
type(a)     # -> <class 'str'> see below

xyz = 0     # variable names must start with a letter or
my_val3 =1  # underscore, and may also contain numbers (but
_a30 = 30   # not as the first character)

alpha = 2   # by convention they only use lower case letters
PI = 3.14   # or uppercase letters to indicate that they are
# intended to be constant (Python doesn't actually
# prevent these values from being altered)



## String type

'abc'       # -> 'abc' (a text string)
"abc"       # -> 'abc' (double or single quotes are allowed)


## Conversions

int(3.7)        # -> 3 (converts a float to an int)
int(-3.7)       # -> -3 (fractional part is truncated)
int('12')       # -> 12 (converts strings too)

float(3)        # -> 3.0 (converts an int to a float)
float('1.5')    # -> 1.5 (converts strings too)

complex(1, 2)       # -> (1+2j) (2 numbers to a complex number)
complex('1+2j')     # -> (1+2j) (converts strings too)
complex('1 + 2j')   # -> ERROR (spaces not allowed)

str(3)          # -> '3' (converts to string)
str(1.5)        # -> '1.5' (converts to string)
str(1+2j)       # -> '(1+2j)' (converts to string)