### Programming for Engineers in Python

```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
http://pygame.org/ftp/pygame-1.9.2a0.win32-py2.7.msi
11
Car game
 Control a car moving on the screen
 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