Here's another case where I might have stumbled on an andragogic technique another Python teacher is already well-known for using.  Or not, we shall see.

Old technique (for teaching properties):

In an earlier chapter, I stumbled upon having @property decorate a circle so you could change radius, area or circumference with simple "setattr" dot notation e.g. c.area = 10, and the other two attributes would change automatically. [1]

Thanks to how type property uses the Descriptor pattern, that's quite doable and is a clear demonstration of what properties allow, drawn from familiar grade school geometry.

Turns out:  Raymond Hettinger was sharing that little dharma already.  Same karma!  Great minds think alike (if I do say so myself).

Aside:

I've been meaning to do more with triangles and tetrahedrons, using @property... e.g. make AB longer and watch angles change.  Sticking to right and/or equi-angular triangles keeps everything simpler. [2]

The new technique (for introducing data structures and machine learning):

So the new thing I might not be first to think of: 

lets use the "chopsticks pattern" from the musical score of Chopsticks (used universally in tutorials, almost a "hello, world" of Piano World) and call the chopstick note pairs "correct" amidst a myriad "not correct" bytes.

Here's an octave: 
C D E F G A B C

Chopsticks begins with

F and G pressed. 
Then E and G. 
Then D and B. 
Then C and C.

The first 22 seconds of this Youtube give the idea:

So in "byte format":

0 0 0 1 1 0 0 0
0 0 1 0 1 0 0 0
0 1 0 0 0 0 1 0
1 0 0 0 0 0 0 1

are the "chopsticks" of interest.

Then have Machine Learning algorithms tease out the pattern. 

Feed through 10,000 random strings of 1 and 0. [3]

Mark the chopstick patterns "correct" (1) and the not-chopstick patterns "incorrect" (0), effectively forming a ninth column (the proverbial y in machine learning, where all the samples are X).

This way, we get to play with (introduce) numpy.ndarrays and scikit-learn, but with more familiar thoughts about piano keys in the foreground, and a melody to boot.

How good are these learning machines, once trained? 

Do they get random 10010100 right i.e. "not a chopstick"?  Are they right every time?

If intrigued and want more code, here's the link to the Jupyter Notebook in question:


(scroll to very end and come backwards would be my suggestion -- get the ML part first).

I like how something so early in piano training feeds an intro to ML, given how piano and "player piano" relate to AI, of which ML is a part.  Punch cards and all that.

Very Westworld eh?

(not just Chopsticks anymore)

I'm looking for "pathways through Python" that consist of a combination of "zoomed in" and "zoomed out" topics.  Sometimes we look at nitty gritty, other times we need overview.

Kirby

[1]  this older version (Oct 2016) doesn't have perimeter (circumference).  Easy to add? (we do that as an exercise in class).


[2]  I've got this dynamite volume method, not invented by me, that just takes the six edge lengths for the arguments.


Lots more in the historical literature.  E.g.:


More context:


[3] 

My current function for doing that is maybe too long-winded as I concatenate strings.  Why not just convert to binary from random 0-255.  We could do that.