# 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" 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.
...
Ellipsis
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
--------------------------------------------------------------------------- NameError Traceback (most recent call last) /var/folders/ch/hyjw6whx3g9gshnp58738jc80000gp/T/ipykernel_33061/521444765.py in <module> ----> 1 triton NameError: name 'triton' is not defined
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
File "/var/folders/ch/hyjw6whx3g9gshnp58738jc80000gp/T/ipykernel_33061/3229775372.py", line 1 7_days = 24 * 7 ^ SyntaxError: invalid decimal literal
3 = 2 + 1
File "/var/folders/ch/hyjw6whx3g9gshnp58738jc80000gp/T/ipykernel_33061/2449763097.py", line 1 3 = 2 + 1 ^ SyntaxError: cannot assign to literal
=
to the value to the right of =
, nothing more.x = 3
3 = x
File "/var/folders/ch/hyjw6whx3g9gshnp58738jc80000gp/T/ipykernel_33061/3780819163.py", 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¶...
Ellipsis
abs(-23)
23
max(4, -8)
4
max(2, -3, -6, 10, -4)
10
max(9)
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) /var/folders/ch/hyjw6whx3g9gshnp58738jc80000gp/T/ipykernel_33061/60825961.py in <module> ----> 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.
File "/var/folders/ch/hyjw6whx3g9gshnp58738jc80000gp/T/ipykernel_33061/324859126.py", 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) /var/folders/ch/hyjw6whx3g9gshnp58738jc80000gp/T/ipykernel_33061/1310821553.py in <module> ----> 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!