Buenas
Como dice el enunciado, este código lo que te pide es que muestres todas las potencias de dos cuyo resultado se encuentre entre 20 y 230 (Estos dos números inclusive).
Tu primer código:
i = 0
while i <= 230:
i += 2**20
print i
Inicializas la variable i en 0 y entrás en un bucle el cual se va a ejecutar mientras el valor de i sea menor o igual que 230. En la primer iteración i vale 0 y ejecuta lo que esta dentro del while. Al entrar asigna a i su valor mas 2**20 (0+1048576). Como el valor de i ahora es mayor que 230, no cumple la condición y no vuelve a entrar.
El otro code:
# Bucle.
i = 20
while i < 230:
i += 1**2
print i
Inicializas la variable i con valor 20. Como es menor que 230, entra en el bucle. Adentro asigna a i el valor de 1 elevado al cuadrado (Que viene a ser uno. Osea, es lo mismo que hacer i += 1
). Lo que hace es mostrar los valores del 21 al 230.
Lo que tenés que hacer es ir tomando valores, elevándolos al cuadrado e imprimirlos si el resultado se encuentra entre 20 y 230.
Podrías hacer algo asi:
i = 5 # Esto es porque 2**5 es el primer valor mayor o igual que 20
while 2 ** i <= 230:
print 2 ** i
i += 1
Un saludo