Even before formally learning loops, you can see their power: Loops repeat code with different values. The same print(i ** 2) runs multiple times with different i.
range(n) generates to n-. Perfect for this problem's requirements.
The ** operator handles exponents. i ** 2 is cleaner than i * i (though both work).
Variables (i) and operators (**) combine naturally. The loop just provides the repetition. We've barely scratched the surface of loops. Section 3 dives deep into them.