# Run this cell to set up packages for lecture.
from lec10_imports import *
if-statements).for-loops).Note:
bool is a data type in Python, just like int, float, and str.True or False.dept = 'DSC'
course = 10
course < 20
True
type(course < 20)
bool
in operator¶Sometimes, we'll want to check if a particular element is in a list/array, or a particular substring is in a string. The in operator can do this for us, and it also results in a Boolean value.
course in [10, 20, 30]
True
'DS' in dept
True
'DS' in 'Data Science'
False
not¶There are three operators that allow us to perform arithmetic with Booleans – not, and, and or.
not flips True ↔️ False.
dept == 'DSC'
True
not dept == 'DSC'
False
and operator¶The and operator is placed between two bools. It is True if both are True; otherwise, it's False.
80 < 30 and course < 20
False
80 > 30 and course < 20
True
or operator¶The or operator is placed between two bools. It is True if at least one is True; otherwise, it's False.
course in [10, 20, 30, 80] or type(course) == str
True
# Both are True!
course in [10, 20, 30, 80] or type(course) == int
True
# Both are False!
course == 80 or type(course) == str
False
course == 10 or (dept == 'DSC' and dept == 'CSE')
True
# Different meaning!
(course == 10 or dept == 'DSC') and dept == 'CSE'
False
# With no parentheses, "and" has precedence.
course == 10 or dept == 'DSC' and dept == 'CSE'
True
& and | vs. and and or¶& and | operators between two Series. Arithmetic will be done element-wise (separately for each row).courses[(courses.get('dept') == 'DSC') & (courses.get('course') == 10)].and and or operators between two individual Booleans.dept == 'DSC' and course == 10.if-statements¶True.if <condition>:
<body>
capstone = 'finished'
capstone
'finished'
if capstone == 'finished':
print('Looks like you are ready to graduate!')
Looks like you are ready to graduate!
else¶If you want to do something else if the specified condition is False, use the else keyword.
capstone = 'finished'
capstone
'finished'
if capstone == 'finished':
print('Looks like you are ready to graduate!')
else:
print('Before you graduate, you need to finish your capstone project.')
Looks like you are ready to graduate!
elif¶if allows our code to branch into one of two possible outcomes. What if we want more than two outcomes? Use elif.elif: if the specified condition is False, check the next condition.False, check the next condition, and so on, until we see a True condition.True condition, it evaluates the indented code and stops.True, the else body is run.capstone = 'in progress'
units = 123
if capstone == 'finished' and units >= 180:
print('Looks like you are ready to graduate!')
elif capstone != 'finished' and units < 180:
print('Before you graduate, you need to finish your capstone project and take',
180 - units, 'more units.')
elif units >= 180:
print('Before you graduate, you need to finish your capstone project.')
else:
print('Before you graduate, you need to take', 180 - units, 'more units.')
Before you graduate, you need to finish your capstone project and take 57 more units.
What if we use if instead of elif?
if capstone == 'finished' and units >= 180:
print('Looks like you are ready to graduate!')
if capstone != 'finished' and units < 180:
print('Before you graduate, you need to finish your capstone project and take',
180 - units, 'more units.')
if units >= 180:
print('Before you graduate, you need to finish your capstone project.')
else:
print('Before you graduate, you need to take', 180 - units, 'more units.')
Before you graduate, you need to finish your capstone project and take 57 more units. Before you graduate, you need to take 57 more units.
Below, complete the implementation of the function, grade_converter, which takes in a percentage grade (grade) and returns the corresponding letter grade, according to this table:
| Letter | Range |
|---|---|
| A | [90, 100] |
| B | [80, 90) |
| C | [70, 80) |
| D | [60, 70) |
| F | [0, 60) |
Your function should work on these examples:
>>> grade_converter(84)
'B'
>>> grade_converter(60)
'D'
def grade_converter(grade):
if grade >= 90:
return 'A'
elif grade >= 80:
return 'B'
elif grade >= 70:
return 'C'
elif grade >= 60:
return 'D'
else:
return 'F'
def grade_converter(grade):
...
grade_converter(84)
grade_converter(60)
def mystery(a, b):
if (a + b > 4) and (b > 0):
return 'bear'
elif (a * b >= 4) or (b < 0):
return 'triton'
else:
return 'bruin'
Without running code:
mystery(2, 2) return?mystery will produce 'bruin'.def mystery(a, b):
if (a + b > 4) and (b > 0):
return 'bear'
elif (a * b >= 4) or (b < 0):
return 'triton'
else:
return 'bruin'

for-loops¶import time
print('Launching in...')
for x in [5, 4, 3, 2, 1]:
print('t-minus', x)
time.sleep(0.5) # Pauses for half a second.
print('Blast off! 🚀')
Launching in... t-minus 5 t-minus 4 t-minus 3 t-minus 2 t-minus 1 Blast off! 🚀
for-loops¶for-loop is one of them.for-loop is as follows:for <element> in <sequence>:
<for body>
if-statements, indentation matters!Using the array colleges, write a for-loop that prints:
Revelle College
John Muir College
Thurgood Marshall College
Earl Warren College
Eleanor Roosevelt College
Sixth College
Seventh College
Eighth College
for college in colleges:
print(college + ' College')
colleges = np.array(['Revelle', 'John Muir', 'Thurgood Marshall',
'Earl Warren', 'Eleanor Roosevelt', 'Sixth', 'Seventh', 'Eighth'])
...
Ellipsis
for i in np.arange(3):
print('🐻')
print('👧🏼')
🐻 🐻 🐻 👧🏼
i is set to 0, then 1, then 2. This makes the loop run three times and print out three bears.i anywhere. This happens automatically!for-loop that accesses each element in an array by using its position.np.arange will come in handy.actions = np.array(['ate', 'slept', 'ran'])
feelings = np.array(['content 🙂', 'energized 😃', 'exhausted 😓'])
len(actions)
3
for i in np.arange(len(actions)):
print(i)
0 1 2
for i in np.arange(len(actions)):
print('I', actions[i], 'and I felt', feelings[i])
I ate and I felt content 🙂 I slept and I felt energized 😃 I ran and I felt exhausted 😓
for-loop.
np.append¶name_of_array = np.append(name_of_array, element_to_add)
some_array = np.array([])
np.append(some_array, 'hello')
array(['hello'], dtype='<U32')
some_array
array([], dtype=float64)
# Need to save the new array!
some_array = np.append(some_array, 'hello')
some_array
array(['hello'], dtype='<U32')
some_array = np.append(some_array, 'there')
some_array
array(['hello', 'there'], dtype='<U32')
The function flip(n) flips n fair coins and returns the number of heads it saw. (Don't worry about how it works for now.)
def flip(n):
'''Returns the number of heads in n simulated coin flips, using randomness.'''
return np.random.multinomial(n, [0.5, 0.5])[0]
# Run this cell a few times – you'll see different results!
flip(10)
3
Let's repeat the act of flipping 10 coins, 10000 times.
flip function to flip 10 coins and compute the number of heads we saw.heads_array.flip function to flip 10 coins, we'll add an element to the end of heads_array.# heads_array starts empty – before the simulation, we haven't flipped any coins!
heads_array = np.array([])
for i in np.arange(10000):
# Flip 10 coins and count the number of heads.
num_heads = flip(10)
# Add the number of heads seen to heads_array.
heads_array = np.append(heads_array, num_heads)
Now, heads_array contains 10000 numbers, each corresponding to the number of heads in 10 simulated coin flips.
heads_array
array([6., 7., 4., ..., 5., 3., 8.])
len(heads_array)
10000
(bpd.DataFrame().assign(num_heads=heads_array)
.plot(kind='hist', density=True, bins=np.arange(0, 12), ec='w', legend=False,
title = 'Distribution of the number of heads in 10 coin flips')
);

int or an array.int, we define an int variable (usually to 0) before the loop, then use + to add to it inside the loop.np.append to add to it inside the loop.int or an array – is called the accumulator pattern.for-loops in DSC 10¶Almost every for-loop in DSC 10 will use the accumulator pattern.
Do not use for-loops to perform mathematical operations on every element of an array or Series.
Helpful video 🎥: For Loops (and when not to use them) in DSC 10.
if-statements allow us to run pieces of code depending on whether certain conditions are True.for-loops are used to repeat the execution of code for every element of a sequence.