Week 4

Homework 3, due Monday, Feb 11

You are to submit **one file** containing the functions
temperance(), csearch() (and collatz() again) and circlerandom().

1. Write a function **temperance**(t) to convert from
Fahrenheit to words (that is, strings):

temperance(90) -> "too darn hot"

temperance(75) -> "just right"

temperance(60) -> "need a jacket!"

temperance(40) -> "need a coat"

temperance(0) -> "need to stay inside"

temperance(-20)-> "you have GOT to be kidding"

You are to do this using a big if statement, with elif clauses. Watch where the colons go! And try to be seasonally appropriate.

2. Write a function **csearch**(lo, hi, thresh) that lists
all the numbers n between lo and hi (that is, n in range(lo, hi)) for
which collatz(n) > thresh. For each number n, also list collatz(n).

Observation: for this to work, collatz() has to return its value, but *not
print anything*.

3. Using your function, and a little trial and error, find the number n in range(1, 100,000) which has the largest value of collatz(n). You can include your answer here in your file as a Python comment (that is, a line beginning with #).

4. Write a function **circlerandom**() in which you choose
10,000 random points (x,y) in the unit square 0<=x<=1,
0<=y<=1. For each point, calculate whether or not it is inside the
circle of radius 1 centered at the origin. The function should **return**
the fraction of such points.

To pick a random x or y, you will need this in your python file:

import random

Then random.random() is a random number in the range [0,1]. Call this twice, once for x and once for y.

To check if (x,y) is inside the circle, test if x*x + y*y <= 1.

Monday:

d = dict()

d['one'] = 1

d['three'] = 3

d['two'] = 2

d

What does this do:

for i in d:

print(i)

What can you do with a dictionary?

1.12.2

numberFormat = 'Count in Spanish: {one}, {two}, {three}, ...' withSubstitutions = numberFormat.format(one='uno', two='dos', three='tres') print(withSubstitutions)

Note that format here is a dot-function.

d = dict()

d['one'] = 'uno'

d['two'] = 'dos'

d['three'] = 'tres'

numberFormat.format(**d)

d.keys()

d.values()

d.items()

1.14.3:

locals()

x = 2.71828182845904523536

'longer: {x:.5f}, shorter: {x:.3f}.'.format(**locals())

if statements on the same line

if x==3: x=5

if versus if-else2.1: strings:def calcWeeklyWages(totalHours, hourlyWage): '''Return the total weekly wages for a worker working totalHours, with a given regular hourlyWage. Include overtime for hours over 40. ''' if totalHours <= 40: totalWages = hourlyWage*totalHours else: overtime = totalHours - 40 totalWages = hourlyWage*40 + (1.5*hourlyWage)*overtime return totalWages def main(): hours = float(input('Enter hours worked: ')) wage = float(input('Enter dollars paid per hour: ')) total = calcWeeklyWages(hours, wage) print('Wages for {hours} hours at ${wage:.2f} per hour are ${total:.2f}.' .format(**locals())) main()

upper()

lower()

dir('')

count()

s[3]

s[1:3]

split(separator)

join()

Friday:

resubmission rules

collatz()

def
collatz(n):

count = 0

while n != 1:

if n%2 == 0: n = n//2

else: n = 3*n+1

count += 1

return count

count = 0

while n != 1:

if n%2 == 0: n = n//2

else: n = 3*n+1

count += 1

return count

` return vs print`

circlerandom()