What are some fun projects for non-CS majors? I'm teaching an undergrad Intro to Programming for Non-majors this semester (in Python) and I'm looking for some fun projects for my students that are engaging but not too difficult for them. This is my first go around with this course.
I've looked at their majors to see if I could come up with projects that might relate to it, but that didn't spark any ideas.
Maybe some games, like Tic-Tac-Toe? Does anyone have suggestions that have worked well for them?
Update: These are typical undergrad students at a US university, so about 18 - 22 year olds, with no programming background. The main focus is on imperative rather than OOP. In the past I haven't found an easy way to introduce graphics with Python or GUIs, but perhaps there's some nice stuff out there now. I don't think Turtle graphics would hold their attention very much or very long, also seems more age appropriate to younger students I believe.
Another fun game is &quot;Spelling Bee&quot; from the New York Times
(https://www.nytimes.com/puzzles/spelling-bee). You supply a file containing words. The student program reads the file and selects words that match the rules. The milestones are from a past project from Reed College.

Print all the words that can be spelled using a fixed string (e.g. &quot;AZDIRWY&quot;). The first letter is the required letter.
Prompt the user for a string and print a list of words or take the string as a command line parameter.
Generate a score for each word and the total score.
Generate the graphics to draw the string as it appears in the paper (six hexagons containing optional letters surrounding a central hexagon with the required letter), along with the list of words.

You could potentially go a slightly different direction and let the python program generate HTML output and view the results in a browser. This illustrates dynamically generated HTML.
Another variation would be to preprocess a &quot;dictionary&quot;, removing all words that are too short or contain more that seven distinct characters. Then create multiple files, one for each possible beginning letter. You now have cut down the search space. You might also have the students sort the answers, perhaps by word score.