This document provides an agenda and notes for a programming lecture. The lecture covers sample problems, hash functions and dictionaries, simulating a car, functions as arguments, checking Fermat's Last Theorem, cumulative sums, estimating e and pi through Taylor expansions, finding words with triple double letters, PyGame for game development, and developing a single-player and two-player car game in PyGame. The document includes code examples and references to further resources.
3. A function can be an argument
3
def do_twice(f):
f()
f()
def print_spam():
print 'spam'
>>> do_twice(print_spam)
spam
spam
4. Fermat’s last theorem
4
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"
Pierre de Fermat
1601-1665
5. Fermat’s last theorem
5
>>> 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"
Sir Andrew John Wiles
1953-
6. Cumulative sum
6
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)]
7. Estimating e by it’s Taylor expansion
7
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
𝑒 =
𝑘=0
∞
1
𝑘!
= 2 +
1
2
+
1
6
+
1
24
+ ⋯
Brook Taylor,
1685-1731
8. Estimating π by the Basel
problem
8
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)
print "Python pi:", pi
print “Euler’s pi:", summ
print “Iterations:”, k
𝜋2
6
=
𝑘=1
∞
1
𝑘2 = 1 +
1
4
+
1
9
+
1
16
+ ⋯
Leonard Euler,
1707-1783
9. Ramanujan’s π estimation (optional)
9
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)
print "Python Pi:", pi
print "Ramanujan Pi:", summ
print “Iterations:”, k
Srinivasa
Ramanujan,
1887-1920
10. Triple Double Word
10
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/carta
lk.py
Corpus:
http://www.csie.ntu.edu.tw/~pangfeng/Fortran%20exa
mples/words.txt
11. PyGame
11
A set of Python modules designed for writing
computer games
Download & install:
http://pygame.org/ftp/pygame-1.9.2a0.win32-
py2.7.msi
12. Car game
12
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
13. ToDo List:
13
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!
14. 2 players car game
14
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