[go: up one dir, main page]

0% found this document useful (0 votes)
8 views6 pages

Video 10 Expressions Part-2

The document discusses operators and expressions in programming languages. It explains common operators like addition, subtraction, multiplication and division. It also covers the modulo or remainder operator and how it is useful. The document also discusses the order of operations and different data types in Python like integers, floats and strings.

Uploaded by

Riaz Khan
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
8 views6 pages

Video 10 Expressions Part-2

The document discusses operators and expressions in programming languages. It explains common operators like addition, subtraction, multiplication and division. It also covers the modulo or remainder operator and how it is useful. The document also discusses the order of operations and different data types in Python like integers, floats and strings.

Uploaded by

Riaz Khan
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 6

So welcome back.

Now, we're going to continue on the


right-hand side of assignment statements and talk a little bit more
about some complexity about what you can do with these expressions. So, all
programming languages
have various operators where you say x+1 or x-1 or something like that. These
operators historically come
back to come from the kind of characters that were on computers
keyboards in the 1960s, literally. These things called Teletypes came
from the end of World War II, and they had a certain set of characters. And we were
going kind of from
a mathematical character set, where multiplication is a big cross or
a dot in the middle and exponentiation is raising
a little tiny number above it. And we just couldn't represent those on
these really rudimentary key punches or rudimentary terminals. So we had to map
mathematical formulas and
functions into what could be done. And so those keyboards from 40 years ago,
50 years ago, they had a plus on it. So plus is a plus, they had a minus on it. But
multiplication, which is normally
cross, is star. And division, which you can't put things on top of one another,
so you just made a slash for division. And raising to the power is a double star.
Now, the remainder operator is something
that's not typically on calculators, but it's really important for computers and
we'll take a look at this. So, the addition operator,
pretty straightforward. I've kind of been using that without even
talking about it, the multiplication, and the division. So, this is 5,280 divided
by 1,000,
which gives me 5.28. But the one that's probably the most
interesting is this modulo, or remainder, operation. And so,
the way the remainder operation works is, in particular if this is an integer,
is it does the division. So it's almost like a division,
j divided by 5, but instead of giving the quotient, this is
the quotient, it gives the remainder. So, 5 divided 23 is 4 remainder 3. The 3 is
what you get back. Now you might ask yourself,
why is this useful? So one of the ways to make this useful
is to pick a large random number and then use the modulo operator,
the remainder operator, with 52. And then you end up with a number between
0 and 51, and then you can pick a card. So you can take a random number,
but you modulo at 52 and now you can have a random
number that is of card. Or if you want to roll a dice,
you'd make a big, random number and you'd take it modulo 6 and
then it tells you what side of the dice. So, like games and stuff. There's other
situations where you
can do even and odd calculations. Like is this an odd number
an even number? Divide it by 2 and see what the remainder is. And so,
this whole notion of the modulo operator, it's really useful in some situations.
And so, that's why we obsess
about it a little bit. The power operator, this is like
4 times 4 times 4, which is 64. So those are the numeric expressions. Now these
also have
an order of evaluation, and the way it works is in mathematics,
there's order of evaluation. There are some operators that are more
powerful than other operators. And you can always, if you're clever,
just put parentheses in, and most programmers always
put parentheses in. So if I was writing this line of code, and
I want it to be friendly to you so that you could read it more easily, I would
simply put the parentheses in for you. So I'd say 5 to the sixth
power goes first. Then this 4 divided by that goes next. Then this 2 times 3 goes
next, and then we evaluate the rest of
these things left to right. So I just added the parentheses
that are the same. This is exactly the same as what it
would be without the parentheses, because this happens first. This part here
happens second,
this happens third, and then all this other stuff happens fourth. So there's an
order, but we're
going to teach you what the order is, if you weren't going to use parentheses. So
the rule is,
parentheses override everything. Exponentiation is the most powerful,
multiplication and division and remainder are equal. They're the next most
powerful. And addition
and subtraction. And then when in doubt, you just go left to right. So if there's a
bunch of additions,
you just go left to right. If there's an addition and
subtractions in a bunch of stuff, you go left to right, okay? So this is a classic
exam question
on computer science homework that you'd just say, okay,
what does this evaluate to? Now of course, if you have Python, you just type it in
and
it tells you what the answer is. So the way I used to do these, back in
the day when I was doing these homeworks, because I would write the expression
down on a piece of paper. And then I would look through it and I would figure out
what the first thing
was and I'd be very careful about this. I'm like, okay,
exponentiation happens first. So I'll do the 3 to
the third power which is 8. And then I'll rewrite the whole thing,
1 + 8 divided by 4 times 5. And then I would forget about this one,
and I'd look here, and go, okay, what's the first thing here? Well, 8 divided by 4
is
the first thing there. So, then I'd be like, 8 divided by 4,
well, that gives us 2. In this case, it gives us 2.0. And then I'd have 1 + 2.0
times 5. And I look, and that's the next one, so
that actually ends up being 10.0, and that ends up being 11.0. And that's why this
prints out 11.0. And so if there are no parentheses,
you can figure out. Another kind of exam question is to
ask what the parentheses would be. So the exponentiation happens first,
the division happens second, and then actually you put another parentheses,
because that result is multiplied by 5. And so that's another way to kind of
answer the same question is say put the parentheses in where they belong. Like I
said, parentheses first, power
second, multiplication third, addition, and then left to right. So when you've got
nothing but addition and
subtraction, you go left to right. When you've got nothing but multiplication
and division, you go left to right. Start with the leftmost one. Sometimes it
doesn't matter. In addition and subtraction, it generally
doesn't matter, but in multiplication and division, it can matter, left to right.
Okay, so
we've been talking about variables, we've been talking about constants, and
we've been talking about expressions. But we also have constants that
are integers, we have constants that are floating point numbers, and
we have constants that are strings. And we can manipulate these. And Python
carefully tracks not only
what the value in a variable is but what kind of a value it is. So is it a string,
is it an integer,
is it a flowing point? And sometimes this makes a difference. And here's a little
example code. We have this plus operator. And the plus operator is looking
at its two operands, 1 and 4. It's like, oh, those are integers. I know what to do
with integers. That means addition. And so, it adds this to be 5 and
then sticks it into ddd and out comes 5. On the other hand, we can actually use the
same plus operator concatenating strings because the plus operator
looks to its left, looks to its right, says,
whoa, those are strings. And I know what you mean. I think you mean to concatenate
this. And so we end up with, hello, the space
is very carefully constructed right there because the plus doesn't add a space. So
this ends up being hello space there,
and that little space is the space here. And so Python knows, in this example,
these are all constants, but it knows type of constants, and
it knows the type of variables. And it can do very different things.
And it can blow up and be unhappy, as we'll soon see,
based on the type of things. So here we have an example
of something that's unhappy. So I have now concatenated hello and
there, and then Python's perfectly happy to do that,
and then I stick that in eee. And now I say I want to add 1 to it, and
it looks to its left, looks to its right, this is a string and this is an integer.
And Python says,
I don't know how to do that. Python could know how to do it, but
it's chosen now to know how to do that. And so you get the dreaded traceback,
and traceback is like syntax error. It's not Python telling you that you're
a bad programmer or that you're never going to be a programmer or that you're
completely unsuitable for a programmer. What Python is saying is I,
Python, am lost. You told me to do something
I don't know how to do. You need to go remember what it is
that I'm capable of doing as Python. Please come back and fix it. It also means
that the program stops. Meaning that if you're in a multi-line
script and you're doing a bunch of stuff and there's a traceback here,
the code after that quits, okay? And that's because you've hit
this line that Python is lost and Python is loathe to continue. Now we'll see in a
bit that you'll be
able to force it to continue if you want. But because you said something
that Python didn't understand, it just quits at that point. And traceback, line 1
in this case, tells
you where it is that this thing blew up. And so this looks like nasty gibberish but
after a while, it won't take you long at all to just
relax, look for the word traceback. That means Python quit somewhere. It tells you
where. And then you look a little bit farther and
it tells you what's wrong. TypeError, it's unhappy with the type, and
it's still referring up to this line of code. It says, I can't convert integer
objects to string implicitly. So it's like you have told it to do
something combining a string and an integer. And Python is like, I am lost, but
I'm giving you as much clue as to how I got lost, what got me lost,
where I got lost. I got lost, where I got lost, and
what caused me to get lost, and Python is trying as hard as it can to
clue you in to what's going wrong. So, don't look at this as like bad. Look at this
as like, oh. I have not quite communicated to
Python the way I want to communicate. There's a way to solve this,
there's a way to do something here, but. So if we take Python and we think about
Python and say, hey, you're so picky and you blow up if I do the least
little mistake on types. Help me out here. And so it turns out that Python has
a built-in function called type. So again, it's type with parentheses, function
calls have parentheses on them, and we pass something in. And we're like, hey
Python, tell me
what the type of the variable eee is and Python prints out, oh, it's a string. What
is the type of the constant 'hello'?
That's a string. What is the type of the constant 1?
That would be an integer. And so Python keeps track of
the value of variables and constants, the value and the type of it. And so we have
to kind of manipulate this and
be aware of this as we move forward. And so there are several types of
numbers that we've already been implicitly playing with. Like I said, you can give
a variable to
type or you can give a constant to type. Variables and constants that don't
have decimal places are integers, what are called integers. And variables that have
decimal
places are called floating points. Even if this was a 98.0,
it would still be a floating point. As soon as you put the point there,
then that means it's a floating point. They are represented
internally differently. Floating point numbers have a greater
range than integer numbers, but they're not always as
precise as integer numbers. So floating point numbers have more range and less
precision. So integers are perfect but
there's a limit, like four billion or four trillion or something,
there's a limit. Don't worry too much about that. There is a choice that you make.
You tend to use floating point numbers for
things like temperatures or speed. Turns out that you don't use
floating point for money. You don't use it for money,
even though in our first examples, we'll be bad and we'll use it for money. But,
shh, don't tell anybody that
I'm using floating point for money. If you want,
you can play with floating point and start finding some things
where money goes bad. Okay, there's actually is a number of
different movie plots that come to have to do with computer programs that
use floating point for money. I think Office Space is one of
them that I particularly like, but there's other ones as well. Why you don't use
floating point for
money, We kind of got off track on that,
but that's okay. So we also have a set of built-in
functions that can convert from one type to another. There's float, there's int.
And so float is a function and
it again has parentheses. We pass in 99. So as this expression is being evaluated,
it has to call float. It passes in 99, and
then what comes back is 99.0, which is a floating point
representation of the number 99. 99 and 99.0 are not the same. This is a floating
point number. So when this addition happens,
it produces 199.0, so that is a floating point 199.0. By calling float, you are
force converting
that to a floating point number. If we look at, like i is 42,
we ask what type it is, well, that i is an integer,
we can take a variable and pass it into the float function and
get back 42.0 and 42.0 comes back. And we say what kind of thing is an f? Well, f
is a float. Right? So you can see how we're manipulating
the type of things and controlling it. And any time we get a little confused,
we use the type function and say, hey, what's going on here? Why don't I understand
what's going on here? Integer division is something that
actually changed between Python 2 and Python 3. It's one of the bigger changes, the
bigger
non-upwards-compatible changes between Python 2 and Python 3. And so this, I'm just
reviewing. There are some things that
were different in Python 2. So 10 divided by 2,
even those are both integers, produces a floating point result. This kind of
doesn't make much difference
if these are evenly divisible. But if they're not evenly divisible,
it makes a big difference. So 9 over 2 is 4.5. Think about if you'd put in 9
divided by 2 in a calculator, you wouldn't expect it to say 4. And in Python 2, it
said 4, it actually
truncated, it actually threw this bit away. But in Python 3, it just automatically
converts divisions to floating point and so it works out quite nice, okay? So 9
over 2 is 4.5. In Python 2, this used to be 4. And then 99 over 100 is 0.99,
exactly what you would expect in Python 3. In Python 2, that was a 0. Why? Because
it truncated. It didn't even round the numbers,
it chopped them off. So this was really quite
a silly artifact of Python 2. In Python 2, if you get stuck in Python 2,
you'd just use floating point numbers. And once either side of the division or
any other operation is a floating point number, then the calculation
is done in floating point. So, if it's floating point input on either
side, then it's floating point output. And this is what we used to have to do
kind of in Python 2 is force things to be floating if we were doing divisions. It
wouldn't hurt to do it in Python 3, but now integer division in Python 3
makes a lot more sense, thank heaven. Okay, string conversions. So if we read data,
which we're going to see in a second, from the outside world
it comes in as strings. Whether we're reading it from a network or
from a database, we tend to get these things as strings. And so what we're showing
here
is a string value that's 123, but it's not really 123, it's three characters. It
might as well be A, B, C, so 1, 2, 3,
are the first three characters. So, we take this string constant,
we put it in there and we say, okay, what kind of thing is in there. It's a string.
And if we try to add 1
to it as we saw before, you add a string and an integer and
Python gets really unhappy. Can't convert an int object
to string implicitly. But what if we know that inside of this
string are actually digits, and we want to get an integer representation, or
a floating point representation of that? Well, in that case we can
call the int function, or the float function, passing in a string and
getting back an integer. So, this basically reads
these characters, the 1, 2, 3 and goes, that's 123 and gives us back 123. And we
say,
what kind of thing is in there? Well, now, in ival there's an int. Now I'm being
mnemonic here. I'm remembering that
this is an integer and this is a string, but Python doesn't
care what I name my variables. Remember, Python never cares
about what I name my variables. So, if I start naming them conveniently,
don't all of a sudden think that everything that starts with
the prefix i is an integer, and everything that starts with
the prefix s is a string. It'll be a number of lectures
before I stop reminding you of that. So, ival ends up with an integer,
the number 123. And now we can indeed add 1 to it,
because it's an integer and Python's happy, and out comes a 124. So, this works
pretty well unless
the string that in question has no digits. So, if there's no digits,
it's going to blow up, it's like, whoa. Now, let's read it. Traceback means, I
quit. Where? Line 1, it's always line 1 because
we're in this interactive environment. But if you were in a script,
it would tell you what line it is. And then it says, invalid literal for
int() with base 10: 'x'. And that's like, okay, it's not working very well. And so,
you know, it'll say, that's an invalid letter. And, again, we'll find ways to
cope with this in later lectures. Okay? Now,
how do we get data from the outside world? So, this is the keyboard, eventually
we'll
talk to networks and databases and files. But right now, we want to take
the keys from the keyboard, and get it into a variable. So, we have another
function,
a special function, the input function. And when Python comes running in here,
it starts the input function, and the parameter to the input function
is what's called a prompt. It prints out who are you,
and then it waits, and then we type into the keyboard,
Chuck, and then we hit the Enter key. And then it takes this string right here, and
then it puts it in this
variable right here. It is a string. Even if I typed in 1, 2, 3, 4, it would
be the string 1, 2, 3, 4, not 1,234. Okay? And so, that is the way. And so, this
program at this
point pauses until we type, and we hit the Enter key, and then it takes
that line of input including spaces, whatever I type, and
puts it in that variable. And then the program continues. And in this case, it just
prints out welcome, comma, and
then the contents of the variable nam. And in this case, this space right here
that you see between welcome and Chuck, that is caused by this comma. We've mostly
seen print being
printing one thing, but you can have as many things as you
want with commas in print, and every comma adds a space, and
so, it's kind of friendly. If you wanted to you'd have to
concatenate these things together to eliminate that space,
but most commonly when you're printing out a list of things you
probably want spaces between them. Okay? So that's how we read input. Up next,
we're going to
combine all these things, and we're going to make our very first program
that does actually something useful. So, we'll see you in a bit.

You might also like