<< Clique para Mostrar o Sumário >>
Declaração While |
A declaração while é utilizada para avaliar uma sequência de instruções repetidamente enquanto uma dada condição seja verdadeira ou se depare com a declaração break.
Além da declaração break, outra declaração útil que pode ser utilizada em conjunto com while para controlar o fluxo de avaliação das sequências de instruções é a declaração continue, que promove a interrupção da avaliação da sequência de instruções no ponto onde foi declarada, retornando ao início do laço onde novamente é verificada a condição de execução da sequência de instruções.
Suponha que se queira gerar uma lista com valores que seguem a lógica descrita na figura a seguir.
Função para geração de lista de valores
O gráfico da função anterior é apresentado na figura a seguir.
Gráfico da função
O código utilizado para implementar a lógica anterior é o seguinte:
In [1]: x = range(-10, 11)
In [2]: y = []
In [3]: i = -1
In [4]: while True:
....: i += 1
....: if i > len(x) - 1:
....: break
....: if x[i] > 0:
....: y.append(x[i])
....: continue
....: y.append(x[i] ** 2)
....:
In [5]: j = -1
In [6]: while j < len(x) - 1:
....: j += 1
....: print('x: {0} - y: {1}'.format(x[j], y[j]))
....:
x: -10 - y: 100
x: -9 - y: 81
x: -8 - y: 64
x: -7 - y: 49
x: -6 - y: 36
x: -5 - y: 25
x: -4 - y: 16
x: -3 - y: 9
x: -2 - y: 4
x: -1 - y: 1
x: 0 - y: 0
x: 1 - y: 1
x: 2 - y: 2
x: 3 - y: 3
x: 4 - y: 4
x: 5 - y: 5
x: 6 - y: 6
x: 7 - y: 7
x: 8 - y: 8
x: 9 - y: 9
x: 10 - y: 10
A primeira linha cria uma lista de números inteiros de -10 a 10, através do comando range, e atribui o resultado à variável x. As duas linhas seguintes criam uma lista vazia para y e atribuem o valor -1 (menos um) para a variável i, que é utilizada para referenciar os elementos de x.
A quarta linha inicia o bloco de comando while e, como a sua cláusula é sempre verdadeira (True), é preciso utilizar outro mecanismo de interrupção do laço, que neste caso é realizado pela declaração break quando a variável i, que é incrementada a cada iteração, é maior que o número de elementos da lista x (obtido pela função len) menos uma unidade.
Para demonstrar o funcionamento da declaração continue, adicionou-se uma verificação do valor do elemento da lista x que está sendo avaliado naquele momento. Caso seja maior que zero, este valor é adicionado à lista y e retorna ao início do laço por conta da declaração continue, permitindo que a linha seguinte, que adiciona o valor do elemento de x elevado ao quadrado à lista y, não seja avaliada.
Após o bloco do primeiro while que cria a lista y segundo a regra previamente definida, realiza-se um novo laço while, agora com a condição de saída presente na própria cláusula. O objetivo deste while é iterar elemento a elemento das listas x e y e apresentá-los na saída padrão através da função print utilizando o recurso de formatação de Strings e substituição de índices (chaves) pelos respectivos valores, como pode ser deduzido do próprio código.
Vale ressaltar que existem maneiras mais eficientes e elegantes de resolver o problema deste exemplo, porém o objetivo aqui é apenas ilustrar o funcionamento da declaração while e das demais declarações.