El While se usa cuando no se tiene claro las veces que queremos iterar, por ejemplo al llenar una lista de compras no sabemos cuantos ítems queremos agregar.
EJEMPLO:
#Lista vacia para agregar las compras
compras = []
#Esta variable se va a usar para guardar cada objeto que queremos agregar a la lista
objeto_a_comprar = ''#Aqui decimos que mientras el objeto_a_comprar sea diferente a finalizado, que siga preguntando por objetos
while objeto_a_comprar !='finalizado':
#Esto quiere decir 'Si objeto_a_comprar tiene un valor que lo agregue a la lista',esto se lo agrega ya que al comenzar la iteracion objeto_a_comprar se encuentra vacio , si no se agrega este if el primer objeto que se agregue a la lista va a ser uno vacio
if objeto_a_comprar:
#Aqui guardamos el objeto_a_comprar a nuestra lista 'compras'
compras.append(objeto_a_comprar)
#Aqui preguntamos si quiere agregar un objeto o finalizar la lista, el .lower se agrega para que cada objeto se agregue en minusculas,para asi no ocurra un error cuando se escriba finalizado,se podrian haber usado mas metodos como .title para convertir la primera letra a mayuscula
objeto_a_comprar = input('Introduce el objeto a comprar o escrible finalizado si terminaste: ').lower()
#Se imprime la lista terminada
print(compras)
Se usa el for cuando tenemos clara la cantidad de veces que queremos iterar, por ejemplo para mostrar la lista de las compras
EJEMPLO:
# Lista de compras
compras = ['manzana','zanahoria','frutilla']
#Aqui iteramos sobre la lista de comprasfor objeto in compras:
#Imprime objeto por objetoprint(f'Se debe comprar: {objeto}')