This course introduces the fundamentals of reinforcement learning in a way that is accessible to undergraduate students. It covers the minimum required mathematics for understanding reinforcement learning and helps students develop interest through simple examples and Python-based exercises. The course covers classical reinforcement learning topics such as Markov Decision Processes, dynamic programming, TD learning, and Q-learning, as well as recent advances in deep reinforcement learning.