140 likes | 213 Vues
Programming for Engineers in Python. Recitation 4. Agenda. Sample problems Hash functions & dictionaries (or next week) Car simulation. A function can be an argument. def do_twice (f): f () f() def print_spam (): print 'spam' >>> do_twice ( print_spam ) spam spam.
E N D
Programming for Engineers in Python Recitation 4
Agenda • Sample problems • Hash functions & dictionaries (or next week) • Car simulation
A function can be an argument defdo_twice(f): f() f() defprint_spam(): print'spam' >>> do_twice(print_spam) spam spam
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! defcheck_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
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: defcheck_fermat(a,b,c,n): print"Wiles proved it doesn’t work" 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: defcumulative_sum(lst): summ = [ lst[0] ] * len(lst) for i inrange(1, len(lst)): summ[i] = summ[i-1] + lst[i] returnsumm • Take 2: defcumulative_sum(lst): return [sum(lst[0:n]) for n inrange(1, len(lst)+1)]
Estimating e by it’s Taylor expansion frommath import factorial, e term = 1 summ= 0 k = 0 whileterm > 1e-15: term = 1.0/factorial(k) summ+= term k += 1 print"Python e:", e print“Taylor’s e:", summ print “Iterations:”, k Brook Taylor, 1685-1731
Estimating π by the Basel problem frommath import factorial, pi, sqrt term = 1 summ= 0 k = 1 whileterm > 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 Leonard Euler, 1707-1783
Ramanujan’sπ estimation (optional) frommath import factorial, pi term = 1 summ= 0 k = 0 whileterm > 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 SrinivasaRamanujan, 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
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
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
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!
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