Chap 4.4 Slides

advertisement
Q and A for Section 4.4
CS 106, Fall 2015
If statement syntax
Q: The syntax for an if statement (or conditional
statement) is:
if _______________ :
_____________
A: if <boolean expression>:
<body>
When is this used? When you have to do something
when a certain condition is true, and nothing in all
other cases.
Use an if statement
Q: Write code that prints out "Brilliant!" if the
value in variable food is "spam".
A: if food == "spam":
print "Brilliant!"
Compound bool expression
Q: Write code to print "Brilliant!" if food is
"spam" and how_prepared is "on toast".
A: if food == "spam" and how_prepared == "on toast":
print "Brilliant!”
• If food is not “spam”, then short-circuiting is
used: how_prepared won’t even be evaluated
if-else syntax
Q: An if-else statement has this format:
if _____________ :
___________
else:
___________
A: <boolean expression>; <if body>; <else body>
When is this used?: when there are only two
choices/options, and you have to do something in
each case.
Use if-else
Q: Suppose you have a function is_prime(x) that
returns True if x is a prime number. Write code to
add x to a list primes if x is prime and to a list
non_primes otherwise.
A: if is_prime(x):
primes.append(x)
else:
non_primes.append(x)
More practice
Q: Write code that prints "NaN" if the list nums
is empty or, otherwise, computes and prints
the average of the list of floats.
A: if len(nums) == 0:
print "NaN"
else:
print sum(nums) / len(nums)
if-elif syntax
An if-else statement has this format:
if <boolean expression> :
<body>
elif <boolean expression> :
<body>
# elif <boolexpr>: can repeat elif part
# <body>
else:
# else is optional
<body>
When is this used? When there are > 2 choices to match
and code has to do something different for each.
Counting
Q: You are given a long string gen containing only
As, Gs, Ts, and Cs. Write code to count the
number of As and the number of Gs in the string.
countAs = 0
countGs = 0
for ch in gen:
if ch == 'A':
countAs += 1
elif ch == 'G':
countGs += 1
Evaluate a number
Given a variable x referring to an number, print
“negative”, “0”, or “positive”, as appropriate.
A:
if x < 0:
print
elif x ==
print
else:
print
“negative”
0:
“0”
“positive”
Letter grades
Q: Write code to print out a student's letter grade,
based on the value in score. Pick your own
scale.
A: if score > 92:
elif score > 70:
print 'D'
print 'A'
else:
elif score > 85:
print 'F'
print 'B'
elif score > 77:
print 'C'
Nested ifs
Q: Write code to print "Brilliant!" if food is "spam"
and how_prepared is "on toast", and to print
"Awesome!" if how_prepared is "in a casserole".
A: if food == "spam":
if how_prepared == "on toast":
print "Brilliant!"
if how_prepared == "in a casserole":
print "Awesome!"
Rewrite nested if as if-elif
Q: Rewrite this code using if-elif:
if i < 7:
do_something(i)
else:
if j > 9:
do_something_else(j)
A: if i < 7:
do_something(i)
elif j > 9:
do_something_else(j)
Nested if vs. elif
Q: When would you prefer an if nested inside an
else, over using an elif.
A: An if-else is a binary decision: there are two
choices. An if-elif-elif-else is an n-way decision:
some variable can belong to n different “groups”
or “classes”.
If you are comparing a variable n to something,
and then in one of the results have to “classify”
some other variable, use a nested if.
Compute the max
Given a list of positive numbers nums, write
code that leaves the variable maxSeen referring
to the largest number in nums. Don’t use the
built-in max() function.
maxSeen = 0
for num in nums:
if num > maxSeen:
maxSeen = num
Data cleansing
is a list of weather readings. Each reading is a
list with 10 elements. The 3th value is a
temperature reading. But sometimes our
thermometer goes haywire and reports the temp as
-999. In this case, we want to throw out the entire
reading. Write a for loop to do this, building a new
list called good_data that contains only the good
readings. E.g.:
data
data = [ [ 0, 1, 2, 78, 4, 5, 6, 7, 8, 9 ],
[ 0, 1, 2, -999, 4, 5, 6, 7, 8, 9 ]
]
Answer
good_data = []
for aReading in data:
# aReading is a list with 10 elements.
# Check if the temp is not bogus.
if aReading[3] != -999:
good_data.append(aReading)
# now good_data is clean.
Now, add code to also filter out humidity readings (in the 7th field)
when they are negative.
Now, add code to also filter out any readings that don’t have 10 fields
in them.
Non-booleans used as booleans
Q: In the “for the guru” on page 142, there is
code if not dinner:. Can you explain that?
A: Why, yes. Yes, I can. The pattern is
if <boolean expression>:
So, if the expression given is not a boolean
(dinner is a string), then it is converted to a
boolean, as if bool(dinner) were called. In
general, if a value is empty (“” or []), the
value is False; else, True.
Checking if a value is one of many
Q: Write code that prints "Let's go" if the
variable response equals either 'y' or 'yes'.
A: if
response in ('y', 'yes'):
print "Let's go"
(not if
response == 'y' or 'yes' !!)
What kind of triangle?
Suppose we have 3 values, s1, s2, and s3, that
represent the lengths of the 3 sides of a triangle.
Print out “equilateral” if the sides represent an
equilateral triangle, “isosceles” for isosceles, or
“scalene” otherwise.
Simulating bouncing particles
Suppose we are simulating n particles bouncing off
the inside of a container’s walls. We have 3 lists:
turts is a list of Turtle objects; xvels is a list of x
velocities; yvels is a list of y velocities. The next
location of a turt is computed by:
(turts[i].getX() + xvels[i], turts[i].getY() + yvels[i])
Write code to switch the velocities (from positive to
negative or vice-versa) if turts[i] is currently within
3 pixels of the walls of a 600x400 canvas.
Download