Both last year and again this year, our unit on 2D arrays has been very popular among the students in Intermediate Python.
This has been primarily due to our use of what we now call the "Misha Canvas." Named after a former Proof School student who wrote a significant amount of the code, the Misha Canvas allows students to perform operations on a 2D array in a visual manner, by coloring squares in a grid.
For their initial assignment, students were asking to combine the Misha Canvas with a Tkinter graphical user interface to write code for a recursive "flood fill", which fills connected areas of the grid with a given color. Students were encouraged to add extra features to the GUI, to perform additional operations on the grid. I was quite impressed by some of the elaborate GUIs created by the students, one of which is shown below:
At the end of the 2D array unit, students were given an "anything goes" assignment, in which they were allowed to use the Misha Canvas to code up a game or a piece of art of their own design. To my surprise, not a single student chose to code up the Game of Life this year. However, I did receive two different Tetris games. A full Tetris game is difficult to code up, primarily due to the need to have the pieces rotate, and the students were not quite able to get that part of the game to work 100% correctly. However, the rest of their program logic was fine, and a screenshot of one of the Tetris games is shown below:
More recently, we have started a unit on sets and dictionaries, in which students will write code to answer questions such as "Which word in the English language has the most anagrams that are also words?" (The answer to this question depends, of course, on which list of English words you use, but one possible answer is "apers", with 12 anagrams). After that, students will learn about some common searching and sorting algorithms, and as time allows, we will finish up the year with a study of hash tables.
-- Steve Gregg