Learn to Code by Solving Problems: A Python Programming Primer

Daniel Zingaro


Learn to Code by Solving Problems is a practical introduction to programming using Python. It uses coding-competition challenges to teach you the mechanics of coding and how to think like a savvy programmer.

Computers are powerful problem-solving machines capable of doing almost anything, with the right instructions. That's where programming comes in, allowing us to communicate those instructions through a coding language like Python. This beginners book gets you writing programs right away, as you solve interesting problems drawn from real coding competitions while building Python skills.

Every chapter is driven by problems drawn directly from coding-challenge websites, where online judges test your solutions and provide targeted feedback. As you practice using core Pythonic features, functions, and techniques, you'll develop a clear understanding of data structures, algorithms, and other foundational aspects of programming useful in any language. Bonus exercises are also included so you can explore new concepts on your own, and multiple-choice questions throughout the text encourage you to critically consider the purpose of each piece of code.

You'll learn:
- Introductory ideas, like running Python code, working with strings, and using variables
- How to write programs that make decisions
- How to use while and for loops to repeatedly execute code
- How to use Python sets, lists, and dictionaries to organize, sort, and search data
- How to design programs using functions and top-down design
- How to use Python sets and dictionaries to organize, sort, and search data
- How to create complete-search algorithms, and use Big O notation to design more efficient code

By the end of the book, you'll not only become proficient in Python, but also learn the type of thinking required to solve problems with a computer. Because programming languages come and go; the way we solve problems does not.


Dr. Daniel Zingaro is an award-winning Associate Professor of Computer Science in the teaching stream at University of Toronto Mississauga, and is internationally recognized for his expertise in Active Learning. He is also the author of Algorithmic Thinking (No Starch Press, 2021).