 # Operators and expressions

### Arithmetic Operators

```cats = 3
dogs = 2

pets = cats + dogs
print ( pets )

```
```5
```

There is another operator += that can be used for addition as well. For example, you can do,

```cats += dogs

print ( cats )

```
```5
```

### Substraction

```total_distance  = 100
distance_so_far = 25

distance_remaining = total_distance - distance_so_far

print ( distance_remaining)

```
```75
```

Similar to how we have used += before, you can use the -= operator for substraction.

### Division

```distance  = 100 # miles driven
fuel      = 5   # fuel consumed in gallons

avg_consumption = distance / fuel
print ( avg_consumption )

```
```20.0
```

Similar to how we have used += before, you can use the /= operator for division.

### Multiplication

```avg  = 20 # average fuel consumption in miles/gallon
fuel = 5  # total fuel available in gallons

distance = avg * fuel
print (distance)

```
```100
```

Similar to how we have used += before, you can use the *= operator for multiplication.

### Modulo Division

This provides the remainder of the division operation.

```dividend = 21
divisor  = 10

remainder = dividend % divisor
print ( remainder )

```
```1
```

### Floor Division

```dividend = 21
divisor  = 10

quotient = dividend // divisor
print ( quotient )

```
```2
```

### Exponentiation

Also called the power function, you can do exponential multiplication of one variable with another using the ** operator.

For example, the square of a number is done in Python as

```count = 10

count ** 2

```
```100
```

### == operator

While a single = assigns a value to a variable, a == is used to check if the value on the left is equal to the value on the right.

```count = 10

# modulo division by 2 is 0. Meaning its an odd number.
count%2
```
```0
```
```# Now you can use the == operator to do a comparion of one variable to another

if count % 2 == 0 :
print ( count, " is an even number")

```
```10  is an even number
```

### != operator

If we want to compare for inequality, use the != operator.

```count = 9

if count % 2 != 0 :
print ( count, " is an odd number")
```
```9  is an odd number
```

### < or <= operator

These are used to compare one number with another. Of course, these can’t be used for characters with any meaningful effect.

```age = 16

if age < 20 :
print ( " teenager ")

```
```teenager
```

An equivalent for this would be

```if age <=19 :
print ( " teenager ")

```
```teenager
```

### > or >= operators

These work exactly opposite to the < or <= operators.

```if age > 19 :
print ( " not a teenager ")

```
```if age >= 20 :
print ( " not a teenager ")

```

### Logical operators

#### and operator

Sometimes you want to compare the result of two different comparisions and check if either of them are true or neither of them are true or both are True. For example, if the age is between 13 and 19, you can call them as a teenager, right ? How would you combine both these tests into one ?

```if age >= 13 and age <=19 :
print ( " teenager")
```
```teenager
```

How does this work ? Essentially, and compares truth values across either of the expressions. In this case, we are trying to compare if both the conditions are True.

```age >=13
```
```True
```
```age <=19
```
```True
```

### or operator

Only if both the expressions are true will the and operator result in True. The or operator on the other hand evaluates to True if either of the expressions are True

```qual = "Bachelors" # qualification
exp  = 6           # experience

if qual == "Bachelors" or exp > 5 :
print ( "Qualified for the job")

```
```Qualified for the job

```

You could even chain these operators and still get the same effect. So, in the following case, if at least one of the 3 conditions are True, the result in a True.

```if qual == "Bachelors" or qual == "Masters" or exp > 5 :
print ( "Qualified")

```
```Qualified
```

### not operator

There is another operator called the not operator. It basically negates the truth value. For example,

```x = 5

x > 4

```
```True
```
```not x > 4
```
```False
```

### Operator Precedence

What do you think is the result of the following operation ?

```weight = 85 # kilos
height = 1.8 # meters

bmi = weight / height**2

print (bmi)

```
```26.234567901234566
```

There are two ways in which this could be done

```(weight/height)**2
```
```2229.938271604938
```
```weight / (height ** 2)
```
```26.234567901234566
```

Why did Python choose the later and not the former ? The reason is Operator Precedence. In Python ( as with any other language) there is a precedence based on which operators are performed. For example,

```2 + 3 / 5
```
```2.6
```

Division is done first followed by the addition. What about multiplication vs division ?

```2 * 3 / 5

```
```1.2
```

Division is done first followed by multiplication.

There is a simple chart in Operator Predence from Python docs that gives the precedence in increasing order. We don’t need to learn these. Nobody remembers these anyway. So, usually, programmers get around knowing this by using paranthesis. For example, to do the same operation as above, instead of relying on Python’s operator precedence to take care of the calculation, you can explicitly ask Python to evaluate this a particular way.

```2 + (3 / 5)  # (division is done first followed by addition)

```
```2.6
```
```(2 + 3) / 5 # ( addition is done first followed by division)
```
```1.0
```

This way, we control which operation should be done first.