# Don't worry about what this code does, but make sure to run it if you're following along.
from IPython.display import IFrame
def show_nested_eval():
src = 'https://docs.google.com/presentation/d/e/2PACX-1vQpW0NzwT3LjZsIIDAgtSMRM1cl41Gp_Lf8k9GT-gm5sGAIynw4rsgiEFbIybClD6QtxarKaVKLbR9U/embed?start=false&loop=false&delayms=60000&rm=minimal" frameborder="0" width="960" height="569" allowfullscreen="true" mozallowfullscreen="true" webkitallowfullscreen="true"'
width = 960
height = 569
return IFrame(src, width, height)
There will be lots of programming – follow along in the notebook by clicking the "Expressions and Data Types" link on the course website.
shift
+ enter
(or shift
+ return
) on your keyboard (strongly preferred), or23
23
-15 + 2.718
-12.282
4 ** 3
64
(2 + 3 + 4) / 3
3.0
# Only one value is displayed. Why?
9 + 10
13 / 4
21
21
Operation | Operator | Example | Value |
---|---|---|---|
Addition | + |
2 + 3 |
5 |
Subtraction | - |
2 - 3 |
-1 |
Multiplication | * |
2 * 3 |
6 |
Division | / |
7 / 3 |
2.66667 |
Remainder | % |
7 % 3 |
1 |
Exponentiation | ** |
2 ** 0.5 |
1.41421 |
5 * 2 ** 3
40
(5 * 2) ** 3
1000
In the cell below, replace the ellipses with an expression that's equivalent to
$$(19 + 6 \cdot 3) - 15 \cdot \left(\sqrt{100} \cdot \frac{1}{30}\right) \cdot \frac{3}{5} + \frac{4^2}{2^3} + \left( 6 - \frac{2}{3} \right) \cdot 12 $$Try to use parentheses only when necessary.
Below, we compute the number of seconds in a year.
60 * 60 * 24 * 365
31536000
If we want to use the above value later in our notebook to find, say, the number of seconds in 12 years, we'd have to copy-and-paste the expression. This is inconvenient, and prone to introducing errors.
60 * 60 * 24 * 365 * 12
378432000
It would be great if we could store the initial value and refer to it later on!
=
symbol.=
symbol is evaluated before being assigned to the name on the left-hand side.zebra
is bound to 9
(value) not 23 - 14
(expression).# Note: This is an assignment statement, not an expression.
# Assignment statements don't output anything!
a = 1
a = 2
b = 2
Note that before we use it in an assignment statement, triton
has no meaning.
triton
10
After using it in an assignment statement, we can ask Python for its value.
triton = 15 - 5
triton
10
Any time we use triton
in an expression, 10
is substituted for it.
triton * -4
-40
Note that the above expression did not change the value of triton
, because we did not re-assign triton
!
triton
10
The following assignment statements are valid, but use poor variable names 😕.
six = 15
i_45love_chocolate_9999 = 60 * 60 * 24 * 365
The following assignment statements are valid, and use good variable names ✅.
seconds_per_hour = 60 * 60
hours_per_year = 24 * 365
seconds_per_year = seconds_per_hour * hours_per_year
The following "assignment statements" are invalid ❌.
7_days = 24 * 7
Cell In[92], line 1 7_days = 24 * 7 ^ SyntaxError: invalid decimal literal
3 = 2 + 1
Cell In[93], line 1 3 = 2 + 1 ^ SyntaxError: cannot assign to literal
=
to the value to the right of =
, nothing more.x = 3
3 = x
Cell In[95], line 1 3 = x ^ SyntaxError: cannot assign to literal
uc = 2
sd = 3 + uc
Assignment statements are not promises – the value of a variable can change!
uc = 7
Note that even after changing uc
, we did not change sd
, so it is still the same as before.
sd
5
Assume you have run the following three lines of code:
side_length = 5
area = side_length ** 2
side_length = side_length + 2
What are the values of side_length
and area
after execution?
A. side_length = 5
, area = 25
B. side_length = 5
, area = 49
C. side_length = 7
, area = 25
D. side_length = 7
, area = 49
E. None of the above
tab
to autocomplete a set name¶
abs(-23)
23
max(4, -8)
4
max(2, -3, -6, 10, -4)
10
max(9)
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) Cell In[102], line 1 ----> 1 max(9) TypeError: 'int' object is not iterable
# Only two arguments!
max(9 + 10, 9 - 10)
19
?
after a function's name to see its documentation 📄¶Or use the help
function, e.g. help(round)
.
round(1.45678)
1
round?
round(1.45678, 3)
1.457
We can nest many function calls to evaluate sophisticated expressions.
min(abs(max(-1, -2, -3, min(4, -2))), max(5, 100))
1
...how did that work?
show_nested_eval()
module.function()
, called "dot notation".import math
¶Some of the many functions built into the math
module are sqrt
, pow
, and log
.
import math
math.sqrt(16)
4.0
math.pow(2, 5)
32.0
# What base is log?
math.log?
# Tab completion for browsing.
math.
Cell In[113], line 2 math. ^ SyntaxError: invalid syntax
math
also has constants built in!
math.pi
3.141592653589793
Assume you have run the following statements:
x = 3
y = -2
Which of these examples results in an error?
A. abs(x, y)
B. math.pow(x, abs(y))
C. round(x, max(abs(y ** 2)))
D. math.pow(x, math.pow(y, x))
E. More than one of the above
4 / 2
2.0
5 - 3
2
To us, 2.0
and 2
are the same number, $2$. But to Python, these appear to be different!
type
function to check a value's type.int
and float
¶int
: An integer of any size.float
: A number with a decimal point.int
¶+
), subtract (-
), multiply (*
), or exponentiate (**
) int
s, the result will be another int
.int
s have arbitrary precision in Python, meaning that your calculations will always be exact. 7 - 15
-8
type(7 - 15)
int
2 ** 300
2037035976334486086268445688409378161051468393665936250636140449354381299763336706183397376
2 ** 3000
1230231922161117176931558813276752514640713895736833715766118029160058800614672948775360067838593459582429649254051804908512884180898236823585082482065348331234959350355845017413023320111360666922624728239756880416434478315693675013413090757208690376793296658810662941824493488451726505303712916005346747908623702673480919353936813105736620402352744776903840477883651100322409301983488363802930540482487909763484098253940728685132044408863734754271212592471778643949486688511721051561970432780747454823776808464180697103083861812184348565522740195796682622205511845512080552010310050255801589349645928001133745474220715013683413907542779063759833876101354235184245096670042160720629411581502371248008430447184842098610320580417992206662247328722122088513643683907670360209162653670641130936997002170500675501374723998766005827579300723253474890612250135171889174899079911291512399773872178519018229989376
float
¶float
is specified using a decimal point.float
might be printed using scientific notation.3.2 + 2.5
5.7
type(3.2 + 2.5)
float
# The result is in scientific notation: e+90 means "times 10^90".
2.0 ** 300
2.037035976334486e+90
float
¶floats
have limited precision; after arithmetic, the final few decimal places can be wrong in unexpected ways.float
s have limited size, though the limit is huge.1 + 0.2
1.2
1 + 0.1 + 0.1
1.2000000000000002
2.0 ** 3000
--------------------------------------------------------------------------- OverflowError Traceback (most recent call last) Cell In[126], line 1 ----> 1 2.0 ** 3000 OverflowError: (34, 'Result too large')
int
and float
¶int
s and float
s in an expression, the result will always be a float
.int
s, you get a float
back.int
and float
functions.2.0 + 3
5.0
12 / 2
6.0
# Want an integer back.
int(12 / 2)
6
# int chops off the decimal point!
int(-2.9)
-2
Our notebook still remembers all of the variables we defined earlier in the lecture.
triton
10
int
s and float
s are numbers.int
s are integers, while float
s contain decimal points.Note: We will introduce some code in labs and homeworks as well. Not everything will be in lecture. You will learn by doing!