1
00:00:00,670 --> 00:00:05,670
In the previous lesson we saw how we could use the plus sign either to

2
00:00:05,770 --> 00:00:10,770
concatenate strings together or as a mathematical operation where we add two

3
00:00:11,710 --> 00:00:15,370
integers or two floats, basically two numbers together.

4
00:00:16,390 --> 00:00:20,230
In this lesson I want to show you some of the other mathematical operators that

5
00:00:20,230 --> 00:00:21,220
you have access to

6
00:00:21,670 --> 00:00:25,810
in addition to adding. The next obvious one is subtraction.

7
00:00:25,840 --> 00:00:29,080
So 7 - 3 , you would just use the minus sign,

8
00:00:29,590 --> 00:00:33,130
but then when you get to multiplication it's a little bit weird. Um,

9
00:00:33,160 --> 00:00:37,060
instead of using the x or some sort of time symbol,

10
00:00:37,390 --> 00:00:38,950
you actually use the asterix.

11
00:00:39,070 --> 00:00:43,630
So you would say something like 3 * 2 and that would be 3

12
00:00:43,630 --> 00:00:44,470
times 2.

13
00:00:45,160 --> 00:00:50,160
Now the final one is division and that's done using the forward-slash, so 6

14
00:00:50,800 --> 00:00:54,820
/ 3 and when that prints out,

15
00:00:54,850 --> 00:00:56,020
it'll give you 2.

16
00:00:56,830 --> 00:01:00,550
Now one thing to notice here is that whenever you're dividing things,

17
00:01:01,030 --> 00:01:04,360
you actually always end up with a floating point number.

18
00:01:04,450 --> 00:01:07,420
So you can see even though six divides into three cleanly,

19
00:01:07,630 --> 00:01:12,630
we're still getting 2.0. And in fact if I put a type check around this division,

20
00:01:14,890 --> 00:01:18,520
you'll see that it will print float instead of integer.

21
00:01:19,210 --> 00:01:21,880
And this is just something that happens with division in Python.

22
00:01:22,420 --> 00:01:26,200
But at the end of the day, you get the result that you need and it doesn't really

23
00:01:26,200 --> 00:01:29,350
matter whether if it's a float or if it's a integer.

24
00:01:30,220 --> 00:01:35,220
Now the last one that's really useful is two asterisk signs and this gives you

25
00:01:35,500 --> 00:01:39,760
access to the exponents or when you want to raise the number to a power.

26
00:01:40,210 --> 00:01:40,930
So for example,

27
00:01:40,930 --> 00:01:45,930
if you wanted to get a hold of 2 to the power of 2, then you would write it

28
00:01:46,270 --> 00:01:51,270
like this and 2 to the power of 2 is of course basically just 2 times 2 

29
00:01:52,210 --> 00:01:54,040
which is going to be equal to 4.

30
00:01:55,600 --> 00:01:58,660
Now if I change this to 2 to the power of 3,

31
00:01:58,660 --> 00:02:03,660
then that's going to be 2 times 2 times 2. So that should be 8 and so

32
00:02:04,360 --> 00:02:05,260
on and so forth.

33
00:02:05,890 --> 00:02:09,610
Having the exponent being built into the language is one of the reasons why

34
00:02:09,610 --> 00:02:14,610
Python is really loved by a lot of data scientists and mathematicians because

35
00:02:14,800 --> 00:02:19,300
it's really optimized towards manipulating and handling numbers. Now,

36
00:02:19,300 --> 00:02:22,510
one of the things that you have to be careful about when you are doing these

37
00:02:22,510 --> 00:02:27,280
mathematical operations is when you have more than one operation on the same

38
00:02:27,280 --> 00:02:32,020
line of code, then there's a certain level of priority.

39
00:02:32,710 --> 00:02:37,710
So some of these operations like division or multiplication are going to be

40
00:02:37,900 --> 00:02:38,740
first class,

41
00:02:38,770 --> 00:02:42,460
whereas other ones are going to be more economy like the plus and minus.

42
00:02:42,940 --> 00:02:47,140
And the rule that you might've remember from high school is something called 

43
00:02:47,170 --> 00:02:48,003
PEMDAS.

44
00:02:48,250 --> 00:02:52,750
It basically states the order of priority is parentheses,

45
00:02:52,780 --> 00:02:56,290
exponents, multiplication, division, addition and subtraction.

46
00:02:56,800 --> 00:03:01,180
So the things that happen first are the things inside brackets, then it's our exponents,

47
00:03:01,630 --> 00:03:05,320
then it's our multiplication and division.

48
00:03:05,680 --> 00:03:10,680
And finally, the lowest priority is our addition and subtraction.

49
00:03:11,530 --> 00:03:14,740
Now it's a little bit deceiving because of this order.

50
00:03:14,830 --> 00:03:18,400
It makes it seem like as if multiplication happens before division,

51
00:03:18,850 --> 00:03:21,580
but actually they are equally important.

52
00:03:22,150 --> 00:03:24,640
And when it actually comes to your calculations,

53
00:03:24,850 --> 00:03:28,360
the calculation that's most to the left is the one that will be prioritized

54
00:03:28,390 --> 00:03:30,280
between multiplication and division.

55
00:03:30,850 --> 00:03:34,120
So let me give you a real-life example to make this more clear.

56
00:03:34,540 --> 00:03:39,540
Let's say we had a line of code where we wanted to multiply 3 * 3 +

57
00:03:39,940 --> 00:03:43,150
3 / 3 - 3.

58
00:03:44,500 --> 00:03:49,500
If I was to execute this entire line of code and print it out into the console,

59
00:03:50,170 --> 00:03:54,670
here's the time where you play computer again and guess using what you've

60
00:03:54,670 --> 00:03:56,350
learned here, um,

61
00:03:56,470 --> 00:04:00,190
what exactly will be printed because you will get a number printed,

62
00:04:00,190 --> 00:04:04,990
it will calculate this entire line of code for you. But the order matters.

63
00:04:05,260 --> 00:04:10,260
Is it going to first add 3 to 3 then multiply the result by 3 or is

64
00:04:11,710 --> 00:04:15,610
it first going to divide through by 3 and then add 3 to it?

65
00:04:15,910 --> 00:04:17,050
What is the order?

66
00:04:17,260 --> 00:04:21,760
And I want you to really pause the video and have a little play with it on pen

67
00:04:21,760 --> 00:04:25,450
and paper before you come back and we'll show you the result.

68
00:04:28,660 --> 00:04:30,400
Using our rule, PEMDAS,

69
00:04:30,430 --> 00:04:34,210
we can see the first thing that happens is what's in the parentheses,

70
00:04:34,270 --> 00:04:37,480
so that doesn't matter. The next thing, our exponents,

71
00:04:37,510 --> 00:04:39,040
we don't actually have an exponent here.

72
00:04:39,040 --> 00:04:42,790
We don't have 2 to the power of 3 or something to the power of anything.

73
00:04:42,880 --> 00:04:44,140
So we can ignore that as well.

74
00:04:44,740 --> 00:04:48,700
So the next level is the multiplication and division.

75
00:04:48,940 --> 00:04:52,120
And as I mentioned, they are all equal importance.

76
00:04:52,450 --> 00:04:57,450
So this 3 * 3 and 3 / 3 are both equally important,

77
00:04:58,120 --> 00:05:01,540
but the calculation goes from left to right.

78
00:05:01,720 --> 00:05:06,220
So the first thing we see is actually the multiplication. So if it helps you,

79
00:05:06,310 --> 00:05:10,690
you might want to add LR to the end of this mnemonic.

80
00:05:10,780 --> 00:05:15,130
So it becomes PEMDASLR, or at least that's the way I would think about it.

81
00:05:15,730 --> 00:05:20,080
So even if this was division and this was multiplication,

82
00:05:20,500 --> 00:05:23,320
this calculation will always get executed first.

83
00:05:24,190 --> 00:05:28,420
Coming back to the question I asked you, what do you think this number would be?

84
00:05:28,900 --> 00:05:33,900
Let's go ahead and comment out all the other code and run this line of code and

85
00:05:34,840 --> 00:05:38,890
it will give us 7.0. Now if math is not your strong point, don't worry,

86
00:05:38,890 --> 00:05:42,130
it's not mine either and you're the sort of person who would prefer to see it

87
00:05:42,130 --> 00:05:46,180
visualize. Then I recommend again putting this line of code in Thonny,

88
00:05:46,660 --> 00:05:51,220
and then go ahead and clicking on the debugging symbol and then just step into,

89
00:05:51,220 --> 00:05:56,220
so press F7 or this button multiple times and you'll see it evaluate

90
00:05:56,290 --> 00:05:57,680
this line of code step-by-step.

91
00:05:57,830 --> 00:06:01,520
So first it looks at the entire thing and then it goes from left to right.

92
00:06:02,120 --> 00:06:07,120
And the first calculation is 3 * 3 and that is the one that's going

93
00:06:07,130 --> 00:06:09,260
to execute first and it becomes 9.

94
00:06:09,950 --> 00:06:13,670
Next it's going to look along this line of code and see that the next most

95
00:06:13,670 --> 00:06:17,120
important thing is this division here, 3 divided by 3.

96
00:06:17,660 --> 00:06:20,690
So it's going to carry out that next and that becomes 1.

97
00:06:21,200 --> 00:06:26,200
So now 9 + 1 is going to be the next thing because it's the most to the

98
00:06:26,330 --> 00:06:31,330
left and then it becomes 10 - 3 and we finally get the result of 7.

99
00:06:32,630 --> 00:06:34,700
So now here's another challenge for you.

100
00:06:35,240 --> 00:06:39,980
How can you change this code so that instead of getting 7,

101
00:06:40,340 --> 00:06:41,570
we get 3?

102
00:06:41,990 --> 00:06:46,170
How can you change this line of code given what you know about PEMDASLR?

103
00:06:46,170 --> 00:06:49,520
See if you can figure it out. Pause the video now.

104
00:06:54,110 --> 00:06:57,290
Alright, so this will involve a little bit of trial and error.

105
00:06:57,890 --> 00:07:02,890
And the most important tool we have access to is the parentheses or the

106
00:07:04,400 --> 00:07:08,600
brackets. This means that we can actually isolate bits of our code,

107
00:07:08,630 --> 00:07:12,800
which normally have very low priority and turn them into higher priority

108
00:07:12,800 --> 00:07:15,020
operations. So in this case,

109
00:07:15,050 --> 00:07:17,810
we know that 3 * 3 is going to happen first,

110
00:07:18,170 --> 00:07:20,930
and then the multiplication, and then the addition on the left,

111
00:07:20,990 --> 00:07:22,310
and then the subtraction.

112
00:07:22,940 --> 00:07:27,940
But if we added a set of parentheses around our 3 + 3,

113
00:07:29,450 --> 00:07:31,760
then out of all of these calculations,

114
00:07:32,180 --> 00:07:36,440
this particular one suddenly becomes the highest priority and it will happen

115
00:07:36,440 --> 00:07:37,273
first.

116
00:07:37,640 --> 00:07:42,640
So if I change what I've got in Thonny to our new version and go ahead and debug

117
00:07:43,100 --> 00:07:43,820
through it,

118
00:07:43,820 --> 00:07:48,020
the very first calculation it's going to perform is this 3 + 3  inside

119
00:07:48,020 --> 00:07:50,720
the brackets and we end up with 6.

120
00:07:51,170 --> 00:07:53,690
So then it's going to go again from left to right,

121
00:07:53,690 --> 00:07:55,910
prioritizing multiplication and division.

122
00:07:56,240 --> 00:08:01,240
So then it's 3 * 6  is 18. 18 / 3 is 6. 6 - 3 is

123
00:08:02,630 --> 00:08:06,500
3. Just by isolating certain calculations,

124
00:08:06,890 --> 00:08:11,890
you can elevate it to right at the top of the priority list and you will be able

125
00:08:11,900 --> 00:08:14,300
to perform the calculation that you need.

126
00:08:15,530 --> 00:08:19,250
Now that you've learned a lot about calculations and performing mathematical

127
00:08:19,250 --> 00:08:23,060
operations using Python, I've got another code challenge for you.

128
00:08:23,180 --> 00:08:26,060
So head up to the next lesson and you'll be able to discover it there.

