[Edu-sig] Learning Math or Simulation with Python or Smalltalk
kirby urner
kirby.urner at gmail.com
Fri Aug 11 17:19:05 CEST 2006
On 8/11/06, Paul D. Fernhout <pdfernhout at kurtz-fernhout.com> wrote:
> Again, both the Smalltalk-sh prototype code and the PataPata example are
> doing more -- by building objects which respond to messages. But whereas
> Kirby starts with recursion as important (levels of nesting), from a
> Smalltalk-ish OO point of view (and by extension, OO simulation) getting
> kids to understand the abstraction of objects receiving and processing and
> sending messages may be seen as more important. :-)
Actually, I don't start from recursion first off. The numeracy0.html
was written some time ago and I've had more experience teaching math
with Python since then.
For a more current view (the course I taught to 8th graders twice last
year), see:
http://www.4dsolutions.net/ocn/winterhaven/ This is the page I shared
with the London Knowledge Lab (LKL) last year (URL to Quicktime
earlier given). [ This was pre opening my PKL in the new Portland
Tech District. http://worldgame.blogspot.com/2006/08/toontown.html ]
You'd probably find my approach convenient, as I start into dot
notation right off -- the way we intereact with objects in more than
just Python (its a prevalent convention). We play with built-ins to
study this: strings, lists and dictionaries (I describe the
differences) i.e. so-called data structures (data structures + dot
notation = my current intro).
OK, *then* maybe I tell the story of young Gauss, his class being
punished by the teacher (they get that) to add all consecutive
integers from 1 to 100. Gauss had this flash that writing the
sequence twice, the lower version in reverse order, would give him the
same sum over and over.
Let's demonstrate in Python:
>>> seq = range(1,11)
>>> reversed(seq)
<listreverseiterator object at 0x00D0DAB0>
>>> for i in reversed(seq): print i
10
9
8
7
6
5
4
3
2
1
>>> zip(seq, reversed(seq))
[(1, 10), (2, 9), (3, 8), (4, 7), (5, 6), (6, 5), (7, 4), (8, 3), (9,
2), (10, 1)]
>>> [i+j for i,j in zip(seq, reversed(seq))]
[11, 11, 11, 11, 11, 11, 11, 11, 11, 11]
So what Gauss figured is he'd need 100 101s to get the sum of the two
sequences, which is easy 10100, but divide by 2 to get the sum that'll
please the teacher so 5050. Did it all in his head, really pissed the
teacher off.
This actually motivates a discussion of triangular numbers, as a
sequence of sums of consecutive integers, starting from 1 (or 0 if you
like).
We're now in a position to explore more of Python's builtins,
especially range (gotta go over the above, make it comprehensible).
But there's a chance to segue to slice notation if we like
(trapezoidal numbers anyone?).
OK, so THEN I show them how to define a function in Python:
>>> def gauss(n):
"""
How Gauss pissed off his teacher
"""
return n * (n + 1 ) / 2
>>> tri = gauss
>>> tri(100)
5050
Kirby
More information about the Edu-sig
mailing list