Having taught an introduction to programming course CCPS 109 Computer Science I using Python 3 for three semesters, after sixteen years of teaching that same course using Java, I have completed a Python programming problem set that consists of a total of 109 interesting and educational problems (none of which is the factorial or any other equally tired cliche), along with a fully automated tester based on checksums computed from series of pseudorandomly generated test cases customized for each problem. These problems and the automated tester are now released on GitHub under GNU GPL v3 for other CS1/CS2 instructors to freely adapt and use in their courses.
This collection contains problems from a very wide range of difficulty levels, since as I teach my classes in the evenings, I routinely encounter adult professionals of various fields and backgrounds with an equally wide range of any previous programming experience, which makes any one-size-fits-all solutions to fit very few people there.
These 109 problems have now been field-tested up to three semesters, as the weaker or less educational problems have been gradually replaced with new and better problems, and the ambiguities and errors in the surviving problems have been ironed out.
In my current course management form of this course, each student can submit solutions up to thirty problems that they get to choose freely from the 109 posted problems, so that nobody has to get stuck with any single problem but can keep coding the things they understand to acquire the Python language into their fingertips. Beginners still get to concentrate on the easier problems, while the motivated students who may have years of previous programming experience get to tackle the more interesting and challenging problems in the last third of this collection.
(Sometimes even total beginners who have never written one line of code in their lives before my course magically catch fire and finish up to fifty or sixty problems. Their grade is not affected after the first thirty completed problems, but they solve those problems simply for the enthusiasm of having learned such a universally valuable skill.)
My deadline for the lab submission is all-at-once near the end of the course. Weekly lab sessions during the semester are available for help with these problems. Students love this freedom of choice, especially those adult students who have families and real things to do in their lives during the Friday evenings when their lab session is scheduled.
The lab marking and submission policy should be easily modifiable for the needs of other courses. Adding new problems and their pseudorandom test generator functions to this collection should also not be a prohibitively tall hurdle.