D. Do this online reading: <a href="http://www.rose-hulman.edu/class/csse/csse120/201630/Sessions/Session03/03b-Counted%20Loops/Handouts/CountedLoops.pdf" target=newtab><b>Counted Loops</b></a>, doing the next set of questions while you do so.

1. Choose the correct lines to make a loop that prints 'funny' 40,000 times.
M. Line 1-> for k in range(40000):
M. -> for k in range(40001):
M. -> for k in range(n):
M. Line 2-> &nbsp;&nbsp;&nbsp;&nbsp; print('funny')
M. -> &nbsp;&nbsp;&nbsp;&nbsp; return 'funny'
M. -> &nbsp;&nbsp;&nbsp;&nbsp; print 'funny'
M. -> &nbsp;&nbsp;&nbsp;&nbsp; print 'funny'

2. Choose the correct lines to make a loop that prints the cubes of the numbers from 35 to <b><code>m</code></b>, inclusive (where <b><code>m</code></b> is some integer bigger than 35). For example, if <b><code>m</code></b> were 37, then this loop should print: <pre>  42875 <br>  46656 <br>  50653</pre> (The above numbers are 35 cubed, 36 cubed, and 37 cubed, respectively.)
M. Line 1-> for k in range(m - 34):
M. -> for k in range(0):
M. -> for k in range(37):
M. -> for k in range(m):
M. -> for k in range(m - 33):
M. -> for k in range(m - 35):
M. -> for k in range(m - 36):
M. Line 2->&nbsp;&nbsp;&nbsp;&nbsp; print((k + 35) ** 3)
M. -> &nbsp;&nbsp;&nbsp;&nbsp; print(34 ** 3)
M. -> &nbsp;&nbsp;&nbsp;&nbsp; print(35 ** 3)
M. -> &nbsp;&nbsp;&nbsp;&nbsp; print((k + 34) ** 3)
M. -> &nbsp;&nbsp;&nbsp;&nbsp; print(m ** 3)
M. -> &nbsp;&nbsp;&nbsp;&nbsp; print(k ** 3)
M. -> &nbsp;&nbsp;&nbsp;&nbsp; print((m + 34) ** 3)
M. -> &nbsp;&nbsp;&nbsp;&nbsp; print((m + 35) ** 3)


D. Watch <a href="https://www.rose-hulman.edu/class/csse/csse120/VideoFiles/04.2-TheAccumulatorPattern-Part1-Summing/TheAccumulatorPattern-Summing.mp4">Video: The Accumulator Pattern - Summing</a>, doing the next set of questions while you do so.

3. Trace the snippet of code shown below by hand (no fair typing it into a program), and show what gets printed: <pre>  total = 0 <br>  for k in range(5): <br>      total = total + (k + 10) <br>      print(k, total) <br><br>  print('The sum 10 + 11 + 12 + 13 + 14 is:') <br>  print(total)</pre>
M. Line 1 -><pre>0 10</pre>
M. Line 2 -><pre>1 21</pre>
M. Line 3 -><pre>2 33</pre>
M. Line 4 -><pre>3 46</pre>
M. Line 5 -><pre>4 60</pre>
M. Line 6 -><pre>The sum 10 + 11 + 12 + 13 + 14 is:</pre>
M. Line 7 -><pre>60</pre>
M. -><pre>1 20</pre>
M. -><pre>1 11</pre>
M. -><pre>2 12</pre>
M. -><pre>3 13</pre>
M. -><pre>4 14</pre>
M. -><pre>5 15</pre>
M. -><pre>5 75</pre>
M. -><pre>75</pre>

4. Write a snippet of code that calculates: <pre>math.sin(3) + math.sin(4) + math.sin(5) + ... + math.sin(500)</pre> Assume that there is already an <pre>import math</pre> that executed previously in the code.
M. Line 1 -> total = 0
M. -> total = 500
M. -> k = 0
M. -> k = 500
M. Line 2 -> for k in range(498):
M. -> for k in range(497):
M. -> for k in range(499):
M. -> for k in range(500):
M. -> for k in range(3):
M. Line 3 -> &nbsp;&nbsp;&nbsp;&nbsp; total = total + math.sin(k + 3)
M. -> total = total + math.sin(k + 3)
M. -> &nbsp;&nbsp;&nbsp;&nbsp; total = math.sin(k + 3)
M. -> total = math.sin(k + 3)
M. ->&nbsp;&nbsp;&nbsp;&nbsp; total = total + math.sin(k + 2)
M. -> total = total + math.sin(k + 2)


D. Do this online reading: <a href="https://www.rose-hulman.edu/class/csse/csse120/201630/Sessions/Session03/04b-FunctionsWithParameters/Handouts/FunctionsWithParameters.pdf">Functions with Parameters and Returned Values</a>, doing the next set of questions while you do so.

5. Consider the function call   <pre>round(3.14159, 2)</pre> which rounds 3.14159 to 2 decimal places. What are the <b>arguments</b> in that function call?
a. 3.14159 and 2~
b. 3.14159
c. 2
d. 3.14
e. round

6. Consider the function call   <pre>round(3.14159, 2)</pre> which rounds 3.14159 to 2 decimal places.  What is the <b>returned value</b> from that function call?
a. 3.14159 and 2
b. 3.14159
c. 2
d. 3.14~
e. round

7.  As a user of a function (that is, as someone who will call the function), you don't need to know how the function is implemented; you just need to know the specification of the function.
a. True~
b. False


D. For the next several questions, consider the <b><code>cube_volume</code></b> function defined as follows: <pre>def cube_volume(sideLength):<br>    volume = sideLength ** 3<br>    return volume<br></pre>

8. What is the value of <b><code>cube_volume(3)</code></b>?
a. 9
b. 27~
c. 81
d. 256
e. 512

9. What is the value of <b><code>cube_volume(2)</code></b>?
a. 4
b. 8~
c. 9
d. 16
e. 27

10. What is the value of <b><code>cube_volume(cube_volume(2))</code></b>?
a. 4
b. 27
c. 81
d. 256
e. 512~
f. 729

11. Provide an alternate implementation of the body of the <b><code>cube_volume</code></b> that does not use the exponent operator.
M. Line 1 -> &nbsp;&nbsp;&nbsp;&nbsp; volume = sideLength * sideLength * sideLength
M. Line 2 -> &nbsp;&nbsp;&nbsp;&nbsp; return volume
M. -> &nbsp;&nbsp;&nbsp;&nbsp; volume = sideLength * 3
M. -> &nbsp;&nbsp;&nbsp;&nbsp; volume = sideLength ^ 3


D. For the next several questions, consider the <b><code>mystery</code></b> function defined as follows: <pre>def mystery(x, y):<br>    result = (x + y) / (y - x)<br>    return result<br></pre>

12. What is the value of <b><code>mystery(2, 3)</code></b>?
ANS. 5

13. What is the value of <b><code>mystery(3, 2)</code></b>?
ANS. -5

14. What is the value of <b><code>mystery(-1, 3)</code></b>?
ANS. 0.5


D. Do this online reading: <a href="http://www.rose-hulman.edu/class/csse/csse120/VideoFiles/04.6-VariableScope-Handout/NamespacesAndVariablesScope.pdf" target=newtab> Namespaces and Variables' Scope</a>, doing the next set of questions while you do so.

15. What gets printed when <b><code>main</code></b> is called in the program shown below?  (Pay close attention to the order in which the statements are executed.)   <pre>def main():<br>    hello()<br>    goodbye()<br>    hello_and_goodbye()<br>    goodbye()<br>   <br>def hello():<br>    print('Hello!')<br>    return 'Hello!'<br>    print('Hello Again!')<br>   <br>def goodbye():<br>    print('Ciao!')<br>   <br>def hello_and_goodbye():<br>    print('Here is stuff!')<br>    goodbye()<br>    hello()<br>    hello()<br>    print('Here is more!')<br>    hello()<br>    goodbye()<br></pre>
M. Line 1 -> <pre>Hello!</pre>
M. Line 2 -> <pre>Ciao!</pre>
M. Line 3 -> <pre>Here is stuff!</pre>
M. Line 4 -> <pre>Ciao!</pre>
M. Line 5 -> <pre>Hello!</pre>
M. Line 6 -> <pre>Hello!</pre>
M. Line 7 -> <pre>Here is more!</pre>
M. Line 8 -> <pre>Hello!</pre>
M. Line 9 -> <pre>Ciao!</pre>
M. Line 10 -> <pre>Ciao!</pre>
M. -> <pre>Hello Again!</pre>
M. -> <pre>Hello Again!</pre>

16. What gets printed when <b><code>main</code></b> is called in the program shown below?<pre><br>def main():<br>    a = 4<br>    answer = mystery(a + 1)<br>    print(answer)<br><br>def mystery(x):<br>    y = x * x<br>    return y<br></pre>
ANS. 25

17. What gets printed when <b><code>main</code></b> is called in the program shown below?<pre><br>def main():<br>    big()<br>    bigger()<br>    biggest()<br>    big()<br><br>def big():<br>    print('basketball')<br><br>def bigger():<br>    print('truck')<br>    big()<br><br>def biggest():<br>    print('house')<br>    bigger()<br>    big()<br></pre>
M. Line 1 -> basketball
M. Line 2 -> truck
M. Line 3 -> basketball
M. Line 4 -> house
M. Line 5 -> truck
M. Line 6 -> basketball
M. Line 7 -> basketball
M. Line 8 -> basketball


18. What gets printed when <b><code>main</code></b> is called in the program shown below?<pre>def main():<br>    a = 4<br>    print(mystery(a + 1))<br>   <br>def mystery(x):<br>    return x * x<br></pre>
ANS. 25

19. What gets printed when <b><code>main</code></b> is called in the program shown below?<pre>def main():<br>    a = 4<br>    print(mystery(a + 1))<br>   <br>def mystery(x):<br>    a = 9<br>    return x * x<br></pre>
ANS. 25

20. What gets printed when <b><code>main</code></b> is called in the program shown below?<pre>def main():<br>    a = 4<br>    mystery(a + 1)<br>    print(a)<br>   <br>def mystery(x):<br>    a = 9<br>    return x * x<br></pre>
ANS. 4

21. What gets printed when <b><code>main</code></b> is called in the program shown below?<pre>def main():<br>    a = 4<br>    b = mystery(a + 1)<br>    print(a + b)<br>   <br>def mystery(x):<br>    a = 9<br>    return x * x<br></pre>
ANS. 29

22. What gets printed when <b><code>main</code></b> is called in the program shown below?<pre>def main():<br>    a = 4<br>    b = mystery(a + 1)<br>    print(a + b)<br>   <br>def mystery(x):<br>    a = 9<br>    return a * x<br></pre>
ANS. 49

23. What gets printed when <b><code>main</code></b> is called in the program shown below?<pre>def main():<br>    a = 4<br>    print(mystery(a + 1) + mystery(a + 1))<br>   <br>def mystery(x):<br>    a = 9<br>    return x * x<br></pre>
ANS. 50

24. What gets printed when <b><code>main</code></b> is called in the program shown below?<pre>def main():<br>    a = 2<br>    print(mystery(mystery(a + 1)))<br>   <br>def mystery(x):<br>    return x * x<br></pre>
ANS. 81

25. Consider the <b><code>total_cents</code></b> function shown below.  This function correctly calculates and returns the number of cents that is equivalent to a given number of dollars and cents.<pre><br>def total_cents(dollars, cents):<br>    cents = (dollars * 100) + cents<br>    return cents<br></pre> For example,    total_cents(3, 71)     correctly returns 371. However, this function violates an important style rule:  Do Not Modify Parameter Values (in a function's body).  This style rule is a good rule because modifying parameter values:
a. Yields ugly code.
b. Is an error-prone practice.~
c. Causes the sky to fall.
d. Makes Pointy-Headed Managers unhappy.

26. Show how one could write <b><code>total_cents</code></b> without violating the <em>Do Not Modify Parameter Values</em> rule.
M. Line 1 -> def total_cednts(dollars, cents):
M. Line 2 -> &nbsp;&nbsp;&nbsp;&nbsp; change = (dollars * 100) + cents
M. Line 3 -> &nbsp;&nbsp;&nbsp;&nbsp; return change
M. -> &nbsp;&nbsp;&nbsp;&nbsp; dollars = (dollars * 100) + cents
M. -> &nbsp;&nbsp;&nbsp;&nbsp; cents = (dollars * 100) + cents
M. -> &nbsp;&nbsp;&nbsp;&nbsp; return dollars
M. -> &nbsp;&nbsp;&nbsp;&nbsp; return cents

D. Consider the <b><code>box_string</code></b> function shown below.  This function takes a string as its argument and correctly displays that string &ldquo;in a box&rdquo;: <pre><br>def box_string(contents):<br>    n = len(contents)<br>    print('-' * (n + 2))<br>    print('!' + contents + '!')<br>    print('-' * (n + 2))<br></pre> For example, calling <b><code>box_string</code></b> with <b><code>'Hello Moon'</code></b> as its argument yields the following: <pre>------------<br/>!Hello Moon!<br/>------------</pre>

27.  Consider the following (silly!) statement: <pre>print(box_string('Hello'))</pre> What, exactly, does the above statement cause to appear on the Console?
M. Line 1 -> -------
M. Line 2 -> !Hello!
M. Line 3 -> -------
M. Line 4 -> None
M. -> !Hello Moon!
M. -> ------------
M. -> ------------
M. -> (nothing appears on this line)

28. How <b><em>should</em></b> the above statement been written, to be sensible?
a. box_string('Hello')~
a. print(box_string('Hello'))
b. print(box_string('Hello')) - None
c. print(box_string('Hello') - None)
d. box_string('!Hello!')

29. Write statements that would use <b><code>box_string</code></b> to produce on the Console the output shown below.<pre><br/>-------<br/>!Hello!<br/>-------<br/>------<br/>!Moon!<br/>------</pre>
M. Line 1 -> box_string('Hello')
M. Line 2 -> box_string('Moon')
M. -> print(box_string('Hello'))
M. -> print(box_string('Moon'))


D. For each of the following code snippets: <ul><li>If the code is correct, state what gets printed when <b><code>main</code></b> runs.</li><li>If the code is wrong, explain why.</li></ul> For this and all subsequent problems, assume that <b>no global variables have been defined</b>.

30. <pre>def main():<br>    x = foo()<br>    print(x)<br><br>def foo(m):<br>    return m ** 3<br></pre>
a. Correct, prints <b><code> x**3 </code></b>
b. Correct, prints <b><code> m**3 </code></b>
c. Incorrect because the call to <b><code> foo </code></b> is missing a parameter~
d. Incorrect because <b><code> m </code></b> in <b><code> foo </code></b> is undefined
e. Incorrect because <b><code> x </code></b> is undefined
f. Incorrect because the value of <b><code> m </code></b> can't be cubed

31. <pre>def main():<br>    x = foo(m)<br>    print(x)<br><br>def foo(m):<br>    return m ** 3<br></pre>  
a. Correct, prints <b><code> x**3 </code></b>
b. Correct, prints <b><code> m**3 </code></b>
c. Incorrect because the call to <b><code> foo </code></b> is missing a parameter
d. Incorrect because <b><code> m </code></b> in <b><code> foo </code></b> is undefined
e. Incorrect because <b><code> m </code></b> in <b><code> main </code></b> is undefined~
f. Incorrect because <b><code> x </code></b> is undefined
g. Incorrect because the value of <b><code> m </code></b> can't be cubed

32. <pre>def main():<br>    x = foo('help')<br>    print(x)<br><br>def foo(m):<br>    return m ** 3<br></pre>  
a. Correct, prints <b><code> helphelphelp </code></b>
a. Correct, prints <b><code> m**3  </code></b>
c. Incorrect because the call to <b><code> foo </code></b> is missing a parameter
d. Incorrect because <b><code> m </code></b> in <b><code> foo </code></b> is undefined
e. Incorrect because <b><code> x </code></b> is undefined
f. Incorrect because the value of <b><code> m </code></b> can't be cubed~

33. The code in the box below has syntax errors:  it causes big red X error message(s).  Check all lines that will have red X error message(s) beside them. <pre>def main():<br>    foo()<br>    print(n)<br>    print(m)<br><br>def foo():<br>    n = 3<br>    m = 1<br>    return m</pre>
a. def main():
b. &nbsp;&nbsp;&nbsp;&nbsp; foo()
c. &nbsp;&nbsp;&nbsp;&nbsp; print(n)~
d. &nbsp;&nbsp;&nbsp;&nbsp; print(m)~
e. def foo():
f.  &nbsp;&nbsp;&nbsp;&nbsp; n = 3
g. &nbsp;&nbsp;&nbsp;&nbsp;  m = 1
h. &nbsp;&nbsp;&nbsp;&nbsp; return m

34. Suppose you want to write a function called <b><code>distance</code></b> that has two rg.Point objects sent to it and returns the distance between them.  Which of the following choices for the &ldquo;header&rdquo; line of <b><code>distance</code></b> is best?
a. def distance(point1, point2):~
b. def distance(a, b):
c. def distance(x, y):
d. def foo(a, b):

35. Suppose you want to write a function called <b><code>draw_point</code></b> that takes an rg.Point object and an rg.RoseWindow object (in that order) and draws the rg.Point on the window. Which of the following choices for the &ldquo;header&rdquo; line of <b><code>draw_point</code></b> is best?
a. def draw_point(point, window):~
b. def draw_point(p, w):
c. def draw_point(a, b):
d. def drawPoint(p, w):

36. What gets printed when <b><code>main</code></b> is called in the program shown below?<pre>def main():<br>    a = 2<br>    b = 3<br><br>    m = do_it(a, b)<br>    print(m)<br><br>    m = do_it(b, a)<br>    print(m)<br><br>    m = do_it(a, a)<br>    print(m)<br><br>    m = do_it(b, b)<br>    print(m)<br><br>    c = do_it(b, a)<br>    m = do_it(c, a)<br>    print(m)<br><br>    b = do_it(b, a)<br>    m = do_it(b, a)<br>    print(m)<br><br>def do_it(x, y):<br>    return x ** y</pre>
M. Line 1 -> 8
M. Line 2 -> 9
M. Line 3 -> 4
M. Line 4 -> 27
M. Line 5 -> 81
M. Line 6 -> 81
M. -> 6561

37. What gets printed when <b><code>main</code></b>  is called in the program shown below? <pre>def main():<br>    a = 2<br>    b = 3<br><br>    foo1()<br>    print(a, b)<br><br>    foo2(a, b)<br>    print(a, b)<br><br>    foo3(a, b)<br>    print(a, b)<br><br>def foo1():<br>    a = 88<br>    b = 99<br><br>def foo2(a, b):<br>    a = 400<br>    b = 500<br><br>def foo3(x, y):<br>    x = 44<br>    y = 55</pre>
M. Line 1 -> 2 3
M. Line 2 -> 2 3
M. Line 3 -> 2 3
M. -> 88 99
M. -> 400 500
M. -> 44 55