Start with this code:
for num in range(4):
print("num =", num)
This will print:
num = 0
num = 1
num = 2
num = 3
Now try this code:
for num in range(4):
print("num =", num)
for i in range(num):
print("i =", i)
which will print:
num = 0
num = 1
i = 0
num = 2
i = 0
i = 1
num = 3
i = 0
i = 1
i = 2
Does that help? Let’s break it down some more.
for i in range(3)
gives us i = 0, 1, 2.
for i in range(2)
gives us i = 0, 1.
for i in range(1)
gives us i = 0.
for i in range(0)
gives us nothing at all.
So we can see that range(num)
starts at 0 and finishes at one less
than num; if num happens to be 0, then the loop finishes before it
starts.
So the double forloop gives us:

on the first loop, num is 0 and the inner loop runs zero times;

on the second loop, num is 1 and the inner loop runs one time;

on the third loop, num is 2 and the inner loop runs two times;

on the fourth loop, num is 3 and the inner loop runs three times.
Now let’s think about this:
for num in range(4):
for i in range(num):
print(num, end=" ")

on the first loop, num is 0 and the inner loop runs zero times, so
nothing is printed;

on the second loop, num is 1 and the inner loop runs one time, so “1”
is printed one time;

on the third loop, num is 2 and the inner loop runs two times, so “2”
is printed two times;

on the fourth loop, num is 3 and the inner loop runs three times, so
“3” is printed three times.
The only mystery remaining is that end=" "
. Let’s try it:
print("Hello")
print("World")
which gives us:
Hello
World
Now try this:
print("Hello", end="")
print("World")
which gives us:
HelloWorld
What do you expect end=" "
to give?