1 of 19

1

Estrutura de Repetição while

2 of 19

2

Relembrando...

  • As estruturas de repetição (ou laços, ou ainda, loops) permitem ao programador especificar que uma sequência de instruções deve ser repetida.
  • Em Python, estudaremos dois tipos de laços:
    • para .. faça (for)
    • enquanto .. faça (while)
  • Dependendo do problema que desejamos solucionar, podemos escolher a estrutura de repetição mais adequada.

3 of 19

3

Estrutura de repetição enquanto .. faça

  • Esta estrutura é mais utilizada quando não se sabe previamente quantas vezes o bloco de instruções deve ser repetido, embora também possa ser utilizada quando se conhece esse número;
  • Este tipo de laço é chamado de laço condicional;
  • A cada passo, o laço efetua um teste sobre uma variável que tem um valor pré-definido (que pode ser inicializada pelo usuário). Se o teste for verdadeiro, o bloco de instruções é repetido e a variável deve então ser atualizada (pode ser atualizada também pelo usuário, lendo-se do teclado).

4 of 19

4

  • Estrutura geral do laço enquanto .. faça:

Inicialização da(s) variável(is)

enquanto teste faça

Bloco de instruções

Atualização da(s) variável(is)

fimenquanto

1ºpasso - feito uma só vez

2º passo

4ºpasso

3º passo

Repete 2º, 3º e 4º passos enquanto o teste for verdadeiro.

Estrutura de repetição enquanto .. faça

5 of 19

5

Exemplo 1 usando enquanto..faça

  • Escreva um pseudocódigo que mostre na tela 10 vezes a frase "Oi Mundo!"

início

inteiro contador

contador <- 1

enquanto contador <= 10 faça

Escreva ('Oi Mundo!')

contador <- contador + 1

fimenquanto

fim

6 of 19

6

  • Estrutura geral do laço while em Python:

Inicialização da(s) variável(is)

while teste :

Bloco de instruções

Atualização da(s) variável(is)

1ºpasso - feito uma vez só

2º passo

4ºpasso

3º passo

Repete 2º, 3º e 4º passos enquanto o teste for verdadeiro.

Estrutura de repetição while em Python

7 of 19

7

Exemplo 1 usando while

  • Um programa que imprima na tela 10 vezes a frase "Oi Mundo!"

contador = 1

while contador <= 10:

print("Oi Mundo!")

contador += 1

8 of 19

8

Exemplo 2

  • Um programa que leia um número indeterminado de valores inteiros maiores ou iguais a zero, e calcule e imprima na tela a média dos valores lidos. O programa deve finalizar a leitura de dados quando for digitado um valor negativo.

soma = 0

qtd = 0

num = int(input("Digite um número: "))

while num >= 0:

soma += num

qtd += 1

num = int(input("Digite um número: "))

if qtd > 0:

media = soma / qtd

print("A media dos números eh: %f." % media)

9 of 19

9

Exemplo 3

  • Um programa que descubra em que ano a população de Feira de Santana deve alcançar a de Uberlândia, considerando:
    • Em 2018, Feira de Santana tinha 609.913 habitantes e mantinha taxa de crescimento de 2% ao ano
    • Em 2018, Uberlândia tinha 683.247 habitantes e mantinha taxa de crescimento de 1% ao ano

taxa_feira = 1.02

taxa_uberlandia = 1.01

feira = 609193

uberlandia = 683247

ano = 2018

while feira < uberlandia:

feira = feira * taxa_feira

uberlandia = uberlandia * taxa_uberlandia

ano = ano + 1

print('Em {0}, Feira de Santana terá {1} habitantes e Uberlândia, {2}'.format(ano, feira, uberlandia))

10 of 19

10

Estrutura de repetição faça .. enquanto

  • Esta estrutura é mais utilizada quando não se sabe previamente quantas vezes o bloco de instruções deve ser repetido, mas quer que pelo menos uma vez o conjunto de instruções seja executado, muito embora também possa ser utilizada quando se conhece esse número;
  • Este tipo de laço é chamado de laço condicional com teste no fim;
  • A cada passo, o laço executa o bloco de instruções que contém a atualização da variável (que pode ser atualizada pelo usuário) e ao final efetua um teste sobre a variável. Se o teste for verdadeiro, o bloco de instruções é repetido. A inicialização da variável pode ser feita dentro ou fora do bloco de instruções.

11 of 19

11

  • Estrutura geral do laço faça..enquanto

Inicialização da variável

faça

Bloco de instruções

Atualização da variável

enquanto teste

4º passo

2ºpasso

Repete o 2º, 3º e 4º passos enquanto o teste for verdadeiro.

Estrutura de repetição faça..enquanto

Versao I: Inicialização fora do laço

1ºpasso - feito uma vez só

3º passo

12 of 19

12

Exemplo 1 usando faça..enquanto

  • Um algoritmo que mostre 10 vezes na tela a mensagem: "Oi mundo!"

# Algoritmo do Oi Mundo 10 vezes

inteiro contador

contador = 1

faça

escreva("Oi mundo!")

contador = contador + 1

enquanto contador <= 10

13 of 19

13

Exemplo 1 usando do..while

  • Mas Python não tem do .. while! Ahhhhhhhhhhhhh!
  • O que fazemos então para simular um do .. while? Usamos o bom e velho while com uma repetição do que estaria dentro do do .. while antes do comando while. Repare o trecho repetido em itálico.

contador = 1

print("Oi mundo!")

contador += 1

while contador <= 10:

print("Oi mundo!")

contador += 1

14 of 19

14

Exemplo 4

  • Um programa que leia uma quantidade indeterminada de valores inteiros positivos ou o valor zero (pelo menos um valor correto deverá ser digitado), e calcule e mostre na tela a soma dos valores lidos. O programa deve finalizar a leitura de dados quando for digitado um valor negativo.

soma = 0

num = int(input("Digite um número: "))

while (num >= 0):

soma = soma + num

num = int(input("Digite um número: "))

print("A soma dos números digitados eh: %d" % soma)

15 of 19

15

  • Estrutura geral do laço faça..enquanto:

faça

Bloco de instruções

Inicialização/Atualização da variável

enquanto teste

3º passo

2º passo

Repete 1º, 2º e 3º passos enquanto o teste for verdadeiro.

Estrutura de repetição faça..enquanto

Versao II: Inicialização/Atualização dentro do laço

1º passo

16 of 19

16

Exemplo 5

  • Um programa que leia um número inteiro com 4 dígitos e imprima na tela o primeiro dígito deste número. O programa deve repetir a leitura do valor enquanto o usuário digitar um valor válido (diferente de 4 dígitos).
  • Em Pseudocódigo:

início 

inteiro num

faça

escreva ("Digite um número: ")

leia (num)

primeiro =  num // 1000

escreva ('O primeiro dígito é ', primeiro)

enquanto num >=1000 e num <= 9999

fim

17 of 19

17

Exemplo 5

  • Repare o comando repetido para simular o do..while em Python com o uso de um while.

num = int(input("Digite um número: "))

while num >= 1000 and num <= 9999:

primeiro = num // 1000

print("O primeiro dígito é %d." % primeiro)

num = int(input("Digite um número: "))

18 of 19

18

Exemplo 6

  • Um programa que apresenta um menu com várias opções e repete a escolha até que seja digitada a opção de saída.

print("Entre com uma opção do menu abaixo: ")

print("[1] - Inserir dados de aluno.")

print("[2] - Remover aluno do cadastro.")

print("[3] - Alterar os dados de um aluno.")

print("[4] - Sair do sistema de cadastro.")

opção = input(“Escolha sua opção: ")

while (opção !='4'):

if (opção == '1'):

print("Aqui insere aluno.")

elif (opção == '2'):

print("Aqui remove aluno.")

elif (opção == '3'):

print("Aqui altera aluno.")

else:

print("Opção inválida!")

print("Entre com uma opção do menu abaixo: ")

print("[1] - Inserir dados de aluno.")

print("[2] - Remover aluno do cadastro.")

print("[3] - Alterar os dados de um aluno.")

print("[4] - Sair do sistema de cadastro.")

opção = input("Opção: ")

if (opção == '4'):

print("Fim da execução do sistema.")

19 of 19

19

Exercícios

  1. Escreva um programa que calcule e apresente na tela a área de cada círculo através da fórmula A = PI * R ** 2, onde R (o valor que deverá ser digitado pelo usuário) representa o raio do círculo e PI é o número 3,14. Repetir o processo enquanto for digitado um valor de R maior que 0.
  2. Escreva um programa que leia um número indeterminado de notas entre 0 e 10. Ao final, mostre a média das notas e a quantidade de notas maiores ou iguais a 7. A digitação deve ser encerrada quando for digitada uma nota inválida.
  3. Faça um programa que leia uma quantidade não determinada de números positivos. Calcule a média dos valores pares, a média de valores ímpares e a média geral dos números lidos. A leitura encerrará quando for digitado um valor menor ou igual a zero.