Você está na página 1de 19

PENSAMENTO

COMPUTACIONAL

Fernando Esquírio Torres


Comando while,
variáveis contadoras e
acumuladoras (utilizando
a linguagem Python)
Objetivos de aprendizagem
Ao final deste texto, você deve apresentar os seguintes aprendizados:

„„ Descrever o comando while e as variáveis contadoras e acumuladoras.


„„ Realizar testes de mesa em problemas que utilizem o comando while
e as variáveis contadoras e acumuladoras.
„„ Resolver problemas computacionais utilizando o comando while
e as variáveis contadoras e acumuladoras.

Introdução
Neste capítulo, você vai estudar a estrutura de repetição while e enten-
der como funcionam as variáveis contadoras e acumuladoras, necessárias
para controlar os laços de repetição e acumular valores de variáveis,
respectivamente. Em seguida, você vai aprender como verificar o fluxo
de repetição do laço while por meio de um teste de mesa. Por fim, você
vai compreender como utilizar esse laço de repetição para solucionar
problemas computacionais.

Laços de repetição while


Imagine que você é um programador e está desenvolvendo um programa em
Python para ler as notas de três alunos. A solução proposta por você é imple-
mentar três linhas de código com o comando input() para fazer a leitura
dessas notas, como demonstra a Figura 1.
2 Comando while, variáveis contadoras e acumuladoras (utilizando a linguagem Python)

Figura 1. Programa para ler as notas de três alunos.

O código implementado na Figura 1 resolve satisfatoriamente seu problema


para a leitura de três notas. Porém, se o problema possuir uma escala maior,
como ler as notas de 50 alunos, não será uma boa prática de programação
escrever 50 linhas de código com o comando input() para a leitura de todas
essas notas. Uma solução mais profissional e recomendada nesse caso é a
utilização de uma estrutura que possa repetir a leitura da nota quantas vezes
for necessário. Essa estrutura, amplamente utilizada em programação para nos
auxiliar nesse tipo de problema, é chamada de laço ou estrutura de repetição.
Ela permite a repetição de um bloco de código enquanto uma determinada
condição for verdadeira, evitando a escrita recorrente de trechos de código.
Os laços (loops) de repetição são utilizados para repetir blocos de código
específicos por um certo número de vezes ou até que uma condição seja atin-
gida, conforme leciona Banin (2018). A primeira estrutura de repetição que
você vai estudar é o while. Porém, antes de aprender sobre esse assunto, é
necessário que você compreenda o que são blocos de instrução, tema importante
a ser abordado neste momento.

Blocos de instrução
Segundo Ramalho (2015), os blocos de instrução são um conjunto de comandos
pertencentes a uma função, uma estrutura condicional, um laço de repetição,
etc. Na maioria da linguagens de programação, os blocos são delimitados por
abertura ( { ) e fechamento ( } ) de chaves ({ }). Porém, na linguagem Python,
os blocos de instrução são delimitados pela indentação do código, ou seja,
o recuo aplicado ao código fonte em relação à sua margem, a fim de tornar o
código mais legível e facilitar o reconhecimento de sua estrutura (Figura 2).
Comando while, variáveis contadoras e acumuladoras (utilizando a linguagem Python) 3

(a)

(b)

Figura 2. Delimitação do bloco de instruções (a) na linguagem C e (b) em Python.

Na Figura 2a, que mostra um código implementado na linguagem C, é


possível observar que o conjunto de instrução (bloco) que pertence ao laço
de repetição while está delimitado pelas chaves { } e que o comando
printf (utilizado na linguagem C para imprimir dados na tela), que está
fora da área delimitada pelas chaves, não pertence a esse bloco. Na Figura 2b,
em Python, é possível ver que o que define o conjunto de instrução do
laço while é a indentação do código à direta. Os comandos de impressão
(print('Mensagem impressa')) e de incremento (i+=1) apresentam
um espaço (semelhante a um parágrafo), que identifica o bloco de instruções
pertencente ao laço while. O segundo print, alinhado ao comando while,
já está fora do bloco de instruções.
4 Comando while, variáveis contadoras e acumuladoras (utilizando a linguagem Python)

Comando while
Segundo Barry (2018), o laço de repetição while (“enquanto”, em inglês)
permite repetir um conjunto de instruções enquanto a condição testada for
verdadeira. Essa condição, que é sempre testada no início do laço, contém
uma expressão booleana que pode assumir o valor de verdadeira ou falsa. O
f uxograma da Figura 3 mostra o funcionamento do comando while, em
que a condição é testada antes de iniciar a iteração do laço; enquanto ela for
verdadeira, o loop será repetido.

Figura 3. Fluxograma do laço while.

A sintaxe do comando while é:

#inicialização da variável contadora

while condição:

#sequência de comando(s) executado(s) no corpo do while


comando _ 1
comando _ 2
...
comando _ n
#incremento ou decremento da variável contadora
Comando while, variáveis contadoras e acumuladoras (utilizando a linguagem Python) 5

Variável contadora
No comando while, a variável contadora é utilizada como controle do
laço; ela determina o número de vezes que o conjunto de instruções do laço
while será executado. Ela deve ser inicializada antes do comando while e
ser incrementada ou decrementada dentro do bloco de instrução do comando
while, de modo que a condição se torne falsa quando o número de repetições
desejadas for atingido.

Incrementar é somar uma quantidade do valor atual de uma variável. Decrementar é


diminuir uma quantidade do valor atual de uma variável.

Fique atento a essa questão, pois, do contrário, você pode criar um loop
infinito indesejado, conforme aponta Borges (2014).

O exemplo da Figura 4 traz o laço de repetição while utilizando uma variável con-
tadora, que incrementa o seu valor a cada execução do loop. O bloco de instruções
dentro do laço é repetido três vezes.

(a)

(b)

Figura 4. (a) Laço de repetição while com incremento da variável contadora e (b) resultado
da execução do código.
6 Comando while, variáveis contadoras e acumuladoras (utilizando a linguagem Python)

O código da Figura 4a inicializa, fora do laço de repetição, a variável contadora de


controle, nomeada nesse exemplo como cont, que recebe valor 1. O teste lógico no
comando while é cont<=3, ou seja, o laço vai repetir o bloco de instruções enquanto
a variável cont for menor ou igual a 3. Dessa forma, a condição de parada do laço
acontece quando cont assume um valor maior do que 3. Nesse exemplo, o bloco de
instruções possui dois comandos: a função print(), para imprimir a mensagem na
tela, e o incremento de uma unidade da variável contadora, (cont+=1). O resultado
da execução desse código é mostrado na Figura 4b, em que é possível verificar que
o bloco de código do comando while é executado e imprime a mensagem dentro
do laço três vezes.

No exemplo a seguir, uma das funções do bloco de instruções é o decre-


mento de uma unidade da variável contadora, diferentemente do exemplo an-
terior, em que uma das funções era o incremento de uma unidade (cont+=1).

No exemplo mostrado na Figura 5, o laço de repetição while utiliza uma variável


contadora que decrementa o seu valor a cada execução do loop. O bloco de instruções
dentro do laço é repetido cinco vezes.

(a)

(b)

Figura 5. (a) Laço de repetição while com decremento da variável contadora e (b) resultado
da execução do código.
Comando while, variáveis contadoras e acumuladoras (utilizando a linguagem Python) 7

O código da Figura 5a inicializa, fora do laço de repetição, a variável contadora de


controle cont com o valor 5. O teste lógico no comando while é cont>=1, ou seja,
o laço vai repetir o bloco de instruções enquanto a variável cont for maior ou igual
a 1. Assim, a condição de parada do laço acontece quando cont assumir um valor
menor do que 1. Nesse exemplo, o bloco de instruções possui dois comandos: a função
print(), para imprimir a mensagem na tela, e o decremento de uma unidade da
variável contadora, (cont-=1). O resultado da execução desse código é mostrado na
Figura 5b, em que podemos averiguar que o bloco do comando while é executado
e imprime a mensagem de dentro do laço cinco vezes.

Instruções break e continue


O comando break, quando utilizado dentro de um laço de repetição, serve
para interromper a repetição, encerrando a execução do loop e, em seguida,
saltando para a linha de código imediatamente após o bloco de instruções do
laço, conforme leciona Perkovic (2016).

O exemplo mostrado na Figura 6 traz o laço de repetição infinito, que é um laço que
apresenta uma condição de teste sempre verdadeira, implementado com while. Ele
contém o valor True (Verdadeiro) como teste lógico e a estrutura condicional if
para determinar quando executar o comando break e encerrar a execução do loop.
O código da Figura 6a é um loop infinito, pois a condição do comando while é
sempre verdadeira (True); assim, não há uma condição de parada. A variável conta-
dora de controle cont é inicializada fora do laço com o valor 1; em toda a execução
do loop, ela é incrementada de uma unidade no comando cont+=1 e testada na
estrutura condicional if (cont>3). Quando o valor de cont for maior do que 3,
o teste lógico da estrutura condicional if é verdadeiro e, então, o comando break
é executado, parando o laço de repetição while. O resultado da execução desse
código é mostrado na Figura 6b, em que é possível perceber que o comando while
imprime a mensagem dentro do laço três vezes, semelhante ao exemplo da Figura 4.
8 Comando while, variáveis contadoras e acumuladoras (utilizando a linguagem Python)

(a)

(b)

Figura 6. (a) Laço de repetição while com instrução break e (b) resultado da execução
do código.

O comando continue interrompe o fluxo de execução do laço de repe-


tição. Porém, ele avança para a próxima execução do loop, conforme explica
Perkovic (2016).

O exemplo mostrado na Figura 7 traz o laço de repetição while e a estrutura con-


dicional if para determinar quando executar o comando continue e saltar para a
nova execução do loop. Ou seja, se a condição do if for verdadeira, o continue é
executado e o loop retorna ao início, ignorando as próximas linhas de código.
Comando while, variáveis contadoras e acumuladoras (utilizando a linguagem Python) 9

(a)

(b)

Figura 7. (a) Laço de repetição while com instrução continue e (b) resultado da
execução do código.

O código da Figura 7a apresenta o while com a variável contadora de controle


cont, que é inicializada fora do laço com o valor 1. A cada execução do loop, ela é
incrementada de uma unidade no comando cont+=1 e testada na estrutura condi-
cional if (cont%2==1), que testa se um valor é ímpar, isto é, se o resto da divisão de
cont/2 é igual a 1. Se a condição for verdadeira, o comando continue é executado,
pulando a linha do comando print (cont) e iniciando a próxima execução do
laço de repetição. O resultado da execução desse código é mostrado na Figura 7b. Ao
final, verificamos que o comando while imprime os números pares positivos até 10.

Teste de mesa para o laço de repetição while


O teste de mesa é uma técnica utilizada para verificar manualmente o fluxo de
execução de um programa, sem utilizar o computador e necessitando apenas
de papel e caneta, conforme aponta Barry (2018). Esse teste é útil para verificar
erros de lógica e, geralmente, é utilizado quando não existe uma ferramenta
automatizada de debug ou de simulação para verificar o funcionamento do
código implementado.
10 Comando while, variáveis contadoras e acumuladoras (utilizando a linguagem Python)

Como o teste de mesa é uma avaliação manual do funcionamento do pro-


grama, seu escopo deve ser muito bem definido, para que o desenvolvedor
consiga rastrear os estados de todas as variáveis observadas. Em programas
maiores, esse tipo de teste pode ser feito em blocos, testando, por exemplo, o
comportamento das variáveis dentro do laço de repetição while.
A configuração dos testes de mesa depende fortemente da função do código
implementado e do tipo de lógica que se pretende avaliar. De forma geral,
segundo Slatkin (2015), para realizar o teste de mesa, é necessário seguir os
seguintes passos:

1. Indicar as variáveis, os testes lógicos e/ou os resultados de operações


que serão rastreadas no teste de mesa.
2. Criar uma tabela com linhas e colunas, em que as colunas serão os
elementos rastreados, que foram identificados no primeiro passo, e
as linhas serão enumeradas de acordo com as instruções observadas/
executadas durante o teste de mesa.
3. Percorrer o trecho de código a ser testado linha por linha, preenchendo
a tabela com os valores atualizados dos elementos rastreados ao final
da execução de cada linha observada.
4. Executar o terceiro passo do teste até o final do trecho de código que
se deseja verificar.

No laço de repetição while, o teste de mesa verifica o seu funcionamento,


atualizando o conteúdo dos elementos rastreados a cada reinício do loop. Dentro
de um laço de repetição while, os elementos que poderão ser rastreados são
número de iteração/repetição do while, status da condição testada, conteúdo
das variáveis contadora e acumuladora (se houver), entre outros. A Figura 8
mostra o laço de repetição que soma o 10 primeiros números positivos (Figura
8a) e o teste de mesa desse código (Figura 8b).
Comando while, variáveis contadoras e acumuladoras (utilizando a linguagem Python) 11

(a)

(b)

Figura 8. (a) Teste de mesa do comando while e (b) tabela com teste de mesa do código.

O teste de mesa da Figura 8b mostra a mensagem impressa com os elemen-


tos rastreados: o número da iteração/repetição do laço de repetição while,
o status da condição testada e os conteúdos das variáveis contadora cont
e acumuladora soma a cada reinício do loop. Na primeira vez que o laço
de repetição é executado, a condição testada é verdadeira, a variável cont
contém o valor 1 e a soma do valor acumulado é 1. Na segunda repetição do
laço, a condição testada ainda é verdadeira, o conteúdo da variável cont é
incrementado de uma unidade, por causa da execução do comando da linha
9 (Figura 8a), cont+=1, e o conteúdo da variável soma é atuaizado para 3.
Isso porque é acumulado o valor anterior (1) dessa variável, sendo somado
com o valor atual da variável cont (2), por meio do comando da linha 6
(Figura 8a), soma += cont. À medida que cada iteração/repetição do laço
while ocorre, a variável contadora cont é incrementada em uma unidade,
e a variável soma acumula o valor do somatório dos n números. O teste de
mesa é realizado até que a condição lógica do laço while assume o valor
False (última linha da Figura 8b).
12 Comando while, variáveis contadoras e acumuladoras (utilizando a linguagem Python)

Variável acumuladora
Variáveis acumuladoras são comumente empregadas em laços de repetição.
Sua função é acumular um determinado valor a cada iteração/repetição do
loop. Dessa forma, o valor da variável acumuladora é somado com um valor
numérico ou com o conteúdo de outra variável, conforme leciona Matthes
(2016).
O código mostrado na Figura 8a possui um laço while com uma variável
acumuladora soma. Essa variável acumula o seu próprio valor anterior, mais
outro valor ou o valor de uma variável (no caso, a variável cont), acumulando,
assim, o valor somado a cada iteração do while.

Aplicações práticas utilizando o laço de


repetição while
Existem diversas aplicações para o laço de repetição while. Dentre elas,
pode-se citar a criação de menus interativos para se comunicar com o usuário e
a impressão de uma sequência numérica, como fatorial, somatório e produtório
de números, progressões aritmética e geométrica, sequência de Fibonacci,
entre outros, conforme expõe Downey (2016).

Sequência de Fibonacci
Segundo Matthes (2016), a sucessão ou sequência de Fibonacci é uma sequência
numérica em que os dois primeiros números têm valor F0= 0 e F1= 1 e os outros
números da sequência são calculados pela equação Fn = F(n-1) + F(n-2). Assim, o ter-
ceiro elemento é calculado por F3 = F2 + F1 = 1, o quarto elemento é F4 = F3 + F2 = 2,
o quinto é F5 = F4 + F3 = 3, e assim por diante. O código da Figura 9 mostra
um programa da sequência de Fibonacci, em que o usuário escolhe quantos
elementos da sequência ele quer imprimir.
O código da Figura 9 possui dois comandos while, sendo que o primeiro
controla a continuidade de execução do programa. Ele repetirá o cálculo da
sequência de Fibonacci (comando a, b = b, a+b) até que o usuário digite
um valor diferente de 1; caso o usuário digite o valor 0, a variável de controle
é atualizada, e é encerrada a execução do programa. O segundo comando
while é responsável por calcular e imprimir os elementos da sequência de
Fibonacci conforme a quantidade de números escolhida pelo usuário.
Comando while, variáveis contadoras e acumuladoras (utilizando a linguagem Python) 13

(a)

(b)

Figura 9. (a) Método format() para strings e (b) um resultado da formatação.

Calculadora simples com menu interativo


O laço de repetição while também é utilizado na construção de menus intera-
tivos, que servem para comunicar ao usuário informações importantes, como
orientações de funcionamento, ajuda, inserção de dados ou encerramento do
programa, conforme aponta Slatkin (2015). A aplicação da Figura 10 mostra
como construir um menu interativo para uma calculadora, que faz diversas
operações entre dois números reais.
14 Comando while, variáveis contadoras e acumuladoras (utilizando a linguagem Python)

Figura 10. Calculadora simples com um menu interativo.


Comando while, variáveis contadoras e acumuladoras (utilizando a linguagem Python) 15

A calculadora da Figura 10 possui um laço de repetição while sempre


verdadeiro (while True:), permitindo que o menu interativo seja apresentado
ao usuário até que o teste lógico da estrutura condicional (if (controle
== 7):) seja verdadeiro. Essa condição do if só será verdadeira se o usuário
escolher a opção 7; então, a instrução break será executada, finalizando o
laço de repetição. Quando o usuário escolhe outra opção (de 1 a 6), a estrutura
condicional composta if-elif interage com o usuário, solicitando a entrada
do(s) valor(es) numérico(s) e realizando a operação matemática escolhida.

BANIN, S. L. Python 3: conceitos e aplicações: uma abordagem didática. São Paulo:


Érica, 2018. 264 p.
BARRY, P. Use a cabeça! Python. 2. ed. Rio de Janeiro: Alta Books, 2018. 616 p. (Série Use
a Cabeça/Head First).
BORGES, L. E. Python para desenvolvedores: aborda Python 3.3. São Paulo: Novatec,
2014. 320 p.
DOWNEY, A. B. Pense em Python: pense como um cientista da computação. São Paulo:
Novatec, 2016. 312 p.
MATTHES, E. Curso intensivo de Python: uma introdução prática e baseada em projetos
à programação. São Paulo: Novatec, 2016. 656 p.
PERKOVIC, L. Introdução à computação usando Python: um foco no desenvolvimento
de aplicações. Rio de Janeiro: LTC, 2016. 516 p.
RAMALHO, L. Python fluente. São Paulo: Novatec, 2015. 800 p.
SLATKIN, B. Python eficaz: 59 maneiras de programar melhor em Python. São Paulo:
Novatec, 2015. 296 p.

Leituras recomendadas
HETTINGER, R.; CARROLL, W. I. Python Enhancement Proposal (PEP) 315: Enhanced
while loop. Python Software Foundation, Wilmington, 2003. Disponível em: https://
www.python.org/dev/peps/pep-0315/. Acesso em: 3 jun. 2019.
LABAKI, J. Testes, loops, varreduras e erros. In: LABAKI, J. Introdução a Python: módulo
A. Ilha Solteira: Departamento de Engenharia Mecânica, Universidade Estadual Pau-
lista “Júlio de Mesquita Filho”, 2004. p. 29–46. Disponível em: https://www.dcc.ufrj.
br/~fabiom/mab225/pythonbasico.pdf. Acesso em: 3 jun. 2019.
16 Comando while, variáveis contadoras e acumuladoras (utilizando a linguagem Python)

PINA JÚNIOR, J. C.; MORIMOTO, C. H. Comando de repetição: while. In: PINA JÚNIOR, J.
C.; MORIMOTO, C. H. Introdução à Computação com Python. São Paulo: Departamento
de Ciência da Computação, IME-USP, 2019. Disponível em: https://panda.ime.usp.br/
cc110/static/cc110/03-while.html. Acesso em: 3 jun. 2019.
VIEGAS, T. B. Correções para PEP8 - Listas 03 e 04. Python Brasil Exercícios, [S. l.], 4 ago.
2014. Disponível em: https://github.com/selatotal/pythonBrasilExercicios/tree/mas-
ter/03_EstruturasRepeticao. Acesso em: 3 jun. 2019.

Você também pode gostar