Bacana sua explicação e quero complementar com o que seria equivalente em python.

Em python não temos do while e nem for each. O próprio for tem um recurso de for each então tudo é for. Quanto ao do while não tem um equivalente, você teria que criar uma função para não repetir muito código e chama-la antes e dentro do while.

Essa não é a única estrutura faltando no python. A linguagem não possui uma estrutura switch case também.

While

i = 10
while i < 10:
    código(i)

For

for i in range(0,10):
    código(i)

Ou

for i in lista:
    código(i)

Um recurso bacana que vale mencionar são as "list comprehensions". É um jeito de alimentar uma lista com uma estrutura de repetição em uma única linha. Olha o exemplo:

lista = [ i for i in range(0,10) ]

O resultado é uma lista com os números de 0 a 9. Essa sintaxe é bem versátil e funciona com dicionários também. Vale uma publicação por si só.

Quando eu estava estudando logica eu estava resolvendo pequenos problemas de lacos em py, acho mais pratico pra treinar, porem pra explicar por causa dessa diferenca entre a sintaxe acho que fica mais dificil de simplificar a um nivel de texto. Alias otimo complemento e bem lembrado sobre o switch case, vou fazer um artigo sobre condicionais tambem hihi.

em Java seria assim:

While

while(condicao){
    codigo
}

do while

do{
    codigo
}while(condicao);

for

for(int x = 0; x<10;x++){
    codigo
}

foreach

int[] a ={1,2,3,4,5,6,7,8,9,10};
for(int numeros: a){
    codigo
}