Programming for Engineers in Python Recitation 4 Agenda Sample problems Hash functions & dictionaries (or next week) Car simulation 2 A function can be an argument def do_twice(f): f() f() def print_spam(): print 'spam' >>> do_twice(print_spam) spam spam 3 Fermat’s last theorem Fermat’s famous theorem claims that for any n>2, there are no three positive integers a, b, and c such that: 𝑎𝑛 + 𝑏 𝑛 = 𝑐 𝑛 Let’s check it! def check_fermat(a,b,c,n): if n>2 and a**n + b**n == c**n: print "Fermat was wrong!" else: print "No, that doesn't work" 4 Pierre de Fermat 1601-1665 Fermat’s last theorem >>> check_fermat(3,4,5,2) No, that doesn't work >>> check_fermat(3,4,5,3) No, that doesn't work Dirty shortcut since 1995: def check_fermat(a,b,c,n): print "Wiles proved it doesn’t work" 5 Sir Andrew John Wiles 1953- Cumulative sum For a given list A we will return a list B such that B[n] = A[0]+A[1]+…A[n] Take 1: def cumulative_sum(lst): summ = [ lst[0] ] * len(lst) for i in range(1, len(lst)): summ[i] = summ[i-1] + lst[i] return summ Take 2: def cumulative_sum(lst): return [sum(lst[0:n]) for n in range(1, len(lst)+1)] 6 Estimating e by it’s Taylor expansion from math import factorial, e term = 1 summ = 0 k=0 while term > 1e-15: term = 1.0/factorial(k) summ += term k += 1 print "Python e:", e print “Taylor’s e:", summ print “Iterations:”, k 7 ∞ 𝑒= 𝑘=0 1 1 1 1 =2+ + + +⋯ 𝑘! 2 6 24 Brook Taylor, 1685-1731 Estimating π by the Basel problem from math import factorial, pi, sqrt term = 1 summ = 0 k=1 while term > 1e-15: term = 1.0/k**2 summ += term k += 1 summ = sqrt(summ*6.0) 8 print "Python pi:", pi print “Euler’s pi:", summ print “Iterations:”, k 2 𝜋 = 6 ∞ 𝑘=1 1 1 1 1 = 1 + + + +⋯ 𝑘2 4 9 16 Leonard Euler, 1707-1783 Ramanujan’s π estimation (optional) from math import factorial, pi term = 1 summ = 0 k=0 while term > 1e-15: term = factorial(4.0*k) / factorial(k)**4.0 term *= (1103.0+26390.0*k) / 396.0**(4.0*k) summ += term k += 1 summ = 1.0/(summ * 2.0*2.0**0.5 / 9801.0) 9 print "Python Pi:", pi print "Ramanujan Pi:", summ print “Iterations:”, k Srinivasa Ramanujan, 1887-1920 Triple Double Word We want to find a word that has three double letters in it, like aabbcc (which is not a word!) Almost qualifiers: Committee Mississippi Write a function to check if a word qualifies Write a function that reads a text file and checks all the words Code: http://www.greenteapress.com/thinkpython/code/cartalk.py Corpus: http://www.csie.ntu.edu.tw/~pangfeng/Fortran%20examples/ words.txt 10 PyGame A set of Python modules designed for writing computer games Download & install: http://pygame.org/ftp/pygame-1.9.2a0.win32-py2.7.msi 11 Car game Control a car moving on the screen YouTube demo: http://www.youtube.com/watch?v=DMOj3HpjemE Code: https://gist.github.com/1372753 or in car.py Car controlled by arrows Honk with Enter Exit with ESC 12 ToDo List: Fix stirring problem Honk by pressing space Car will go from the bottom to top and from one side to the other (instead of getting stuck) Switch to turtle! 13 2 players car game Collision avoidance simulator: When the cars are too close one of them honks Players need to maneuver the cars to avoid honks Code: https://gist.github.com/1380291 or cars.py Red car controlled by arrows Blue car controlled by z, x, c, s 14