Prévia do material em texto
Aula 14 – Estrutura de repetição while
Nessa aula, vamos continuar a estudar os laços e vamos aprender a usar a estrutura de repetição while no Python. Por exemplo:
c=1
while c !=10:
print(c)
c+=1
print(‘Acabou’)
Quando eu sei o limite de onde parar eu utilizo a estrutura ’for’, mas se não sabe o limite é obrigatório usar a estrutura ‘while’.
Já o while pode ser usado no lugar do ‘for’ .
While: estrutura de repetição com teste lógico.
For: estrutura de repetição com variável de controle.
Enquanto não chegar a ‘tal lugar’
While not ‘tal lugar’:
Passo
passo
Pega
pega
- o comando ‘pega’ só vai acontecer quando ele chegar a ‘tal lugar’.
Enquanto não chegar a tal lugar ele segue rodando
Enquanto não ‘chegar’
While not ‘chegar’
Se ‘tal coisa’
If ‘tal coisa’
Passo
passo
Se ‘outra coisa’
If ‘outra coisa’
Pula
Pula
Se ‘mais outra coisa’
If ‘mais outra coisa’
Pega
pega
Pega
pega
for c in range(1, 10):
c = 1
print(c)
while c < 10:
print('fim')
print(c)
c = c + 1
print('fim')
Abaixo: enquanto a resposta for igual a ‘S’ ele vai continuar pedindo para digitar um valor, no que digitar ‘n’ ele vai parar
r = 'S'
while r == 'S':
n = int(input('Digite um valor: '))
r = str(input('Quer continuar? [S/N]')).upper()
print('fim')
Com o ‘while’ eu posso criar situações onde eu faça laços indeterminadamente, eu não tenho que determinar um ’range’ .
n = 1
par = impar = 0
while n != 0:
n = int(input('Digite um valor: '))
if n % 2 == 0:
par += 1
else:
impar += 1
print('Você digitou {} números pares e {} números impares.'.format(par, impar))
Nesse comando acima, ele conta o zero como número par e o zero não é considerado nem par e nem ímpar, o zero é um número nulo, veja no comando abaixo a solução
n = 1
par = impar = 0
while n != 0:
n = int(input('Digite um valor: '))
if n != 0:
if n % 2 == 0:
par += 1
else:
impar += 1
print('Você digitou {} números pares e {} números impares.'.format(par, impar))
Colocamos mais um ‘if’ dizendo que se o ‘n’ for diferente de zero ele executa o próximo comando, que foi separado por uma identação.
Exercício Python 57: Faça um programa que leia o sexo de uma pessoa, mas só aceite os valores ‘M’ ou ‘F’. Caso esteja errado, peça a digitação novamente até ter um valor correto.
sexo = str(input('qual é o seu sexo: [M/F]')).strip().upper()[0]
while sexo not in 'MnFf':
sexo = str(input('Dados inválidos. Digite novamente: ')).strip().upper()[0]
print('Sexo {} registrado com sucesso.'.format(sexo))
Exercício Python 58: Melhore o jogo do DESAFIO 28 onde o computador vai “pensar” em um número entre 0 e 10. Só que agora o jogador vai tentar adivinhar até acertar, mostrando no final quantos palpites foram necessários para vencer.
from random import randint
computador = randint(0, 10)
print('Advinhe o número que eu acabei de pensar. ')
acertou = False
while not acertou:
jogador = int(input('Qual é o seu palpite? '))
if jogador == computador:
acertou = True
print('Acertou')
#1° tem que fazer o computador pensar em um número
#2° tem que fazer o palpite do jogador
# na linha 3 é apenas uma leitura
#3° criar uma variavel para o computador
# enquanto o jogador não acertar ele vai seguir perguntando
# linha 6 vai ler o numero que o jogador digitar
# na linha 7 e 8 é a condição para caso o jogador acerte
#a linha 9 apenas faz uma leitura para dizer que o jogador acertou
PARA SABER QUANTOS PALPITES O JOGADOR FEZ E MOSTRAR NA TELA EU PRECISO ACRESCENTAR:
palpites = 0
#Abaixo da linha 5, depois da variável acertou eu vou criar outra variável com nome de palpites que recebe 0
palpites += 1
#quando o cara jogar (palpites += 1) (na linha 8)
print('Acertou com {} palpites.'.format(palpites))
#No último print eu acrescento com quantos paalpites o jogador acertou
else:
if jogador < computador:
print('Mais... Tente mais uma vez.')
elif computador > jogador:
print('Menos... Tente mais uma vez.')
#Para dar umas dicar para o jogador dizendo que o número é maior ou menor vou criar um 'if' abaixo do acertou = True, condição em que vai ler se o numero que o computador pensou é maior ou menor do que o jogador digitou
from random import randint
from time import sleep
quant = 0
print('Olá sou seu parceiro de jogo. ')
print('Vou pensar em um número entre 0 e 10, será que você acertar? ')
palpite_jogador = int(input('Qual é o seu palpite? '))
quant += 1
computador = randint(0, 10)
while palpite_jogador != computador:
if palpite_jogador > computador:
print('Eu pensei em ...')
sleep(1)
palpite_jogador = int(input('É um número menor. Digite novamente: '))
quant += 1
elif palpite_jogador < computador:
print('Eu pensei em ...')
sleep(1)
palpite_jogador = int(input('É um número maior. Digite novamente: '))
quant += 1
elif palpite_jogador == computador:
print('Eu pensei em ...')
sleep(1)
print(f'Acertooou!!!! Eu pensei {computador}')
print(f'Acerto com {quant} palpites')
Exercício Python 059: Crie um programa que leia dois valores e mostre um menu na tela:
[ 1 ] somar
[ 2 ] multiplicar
[ 3 ] maior
[ 4 ] novos números
[ 5 ] sair do programa
Seu programa deverá realizar a operação solicitada em cada caso.
from time import sleep
valor1 = int(input('Digite um valor: '))
valor2 = int(input("Digite outro valor: "))
opção = 0
while opção != 5:
print('''[1] somar
[2] multiplicar
[3] maior
[4] novos números
[5] sair do programa''')
opção = int(input('Escolha sua opção:'))
if opção == 1:
soma = valor1 + valor2
print('{} + {} = {}'.format(valor1, valor2, soma))
elif opção == 2:
produto = valor1 * valor2
print('{} * {} = {}'.format(valor1, valor2, produto))
elif opção == 3:
if valor1 > valor2:
maior = valor1
else:
maior = valor2
print('entre {} e {} o maior é {}.'.format(valor1, valor2, maior))
elif opção == 4:
print('Informe os números novamente:')
valor1 = int(input('Digite um valor: '))
valor2 = int(input("Digite outro valor: "))
elif opção == 5:
print('Finalizando...')
else:
print('Opção inválida. Tente novamente!')
print('~*' * 10)
sleep(2)
print('Fim do programa. Volte sempre!')
Exercício Python 060: Faça um programa que leia um número qualquer e mostre o seu fatorial. Exemplo:
5! = 5 x 4 x 3 x 2 x 1 = 120
from math import factorial
num = int(input('Digite um número: '))
fac = factorial(num)
print('O fatorial de {} é {}.'.format(num, fac))
OUTRA FORMA
n = int(input('Digite um número para fatorar: '))
c = n
f = 1
print('Calculando {}!'.format(n), end=' = ')
while c > 0:
print('{}'.format(c), end='')
print(' x ' if c > 1 else ' = ', end='')
f *= c
c -= 1 #tirar um do c = c - c = 1
print('{} '.format(f))
OUTRA FORMA DE FATORAR
from math import factorial
n = int(input('Digite um número para fatorar: '))
c = n
f = factorial(n)
print('Calculando {}! = '.format(n),end='')
while c > 0:
print('{}'.format(c), end='')
print(' x ' if c > 1 else ' = ', end='')
c -= 1
print(' {}.'.format(f))
FATORIAL COM FOR
num = int(input('Digite um número: '))
print(f'Calculando {num}!', end=' -> ')
f = 1
for c in range(num, 0, -1):
print(f'{c} ', end='')
print('x ' if c > 1 else ' = ', end='')
f *= c
print(f)
num = int(input('Digite um número: '))
f = 1
c = 2
while c <= num:
f *= c
c += 1
print(f)
Exercício Python 61: Refaça o DESAFIO 51, lendo o primeiro termo e a razão de uma PA, mostrando os 10 primeiros termos da progressão usando a estrutura while.
print('GERADOR DE PA')
print('--*'* 10)
primeirotermo = int(input('Primeiro termo: '))
razão = int(input('Razão da PA: '))
termo = primeirotermo #aqui ele me mostra o primeiro termo
cont = 1 #aqui ele vai contar quantos termos forão
while cont <= 10: #enquanto o contador for menor ou igual a 10
print('{} ->'.format(termo), end='')
cont += 1
termo += razão
print('-FIM-')
Exercício Python 62: Melhore o DESAFIO 61, perguntando para o usuário se ele quer mostrar mais alguns termos. O programa encerrará quando ele disser que quer mostrar 0 termos.
print('GERADOR DE PA')
print('--*' * 10)
primeirotermo = int(input('Primeiro termo: '))
razão = int(input('Razão da PA: '))
termo = primeirotermo #aqui ele me mostra o primeiro termo
cont = 1 #aqui ele vai contar quantos termos forão
total = 0
mais = 10 #vou simular que o cara quer mais 10 termos, qie é o que começa o programa, o programa começa mostrando 10 termos, depois é que o usuario pode escolher
while mais != 0:
total = total + mais
while cont <= total: #esse total será o total de termos que ele quer mostrar
print('{} ->'.format(termo), end='')
cont += 1
termo += razão
print('PAUSA')
mais = int(input('Quantos termos a mais você quer mostrar? '))
print('Progressão finalizada com {} termos mostrados.'.format(total))
Exercício Python 63: Escreva um programa que leia um número N inteiro qualquer e mostre na tela os N primeiros elementos de uma Sequência de Fibonacci. Exemplo:
0 – 1 – 1 – 2 – 3 – 5 – 8
print('_' * 30)
print('Sequência de Fibonacci')
print('_' * 30)
n = int(input('Quantos termos você quer mostrar? '))
t1 = 0
t2 = 1
print('~' * 30)
print('{} -> {}'.format(t1, t2), end='')
cont = 3
while cont <= n:
t3 = t1 +t2
print(' -> {}'.format(t3), end='')
t1 = t2
t2= t3
cont += 1
print(' -> FIM <-')
Exercício Python 64: Crie um programa que leia vários números inteiros pelo teclado. O programa só vai parar quando o usuário digitar o valor 999, que é a condição de parada. No final, mostre quantos números foram digitados e qual foi a soma entre eles (desconsiderando o flag).
num = 0
cont = 0 #esse contador recebe 0 pq eu não li numero nenhum ainda
soma = 0
while num != 999: #condição de parada é 999, o flag é 999
num = int(input('Digite um número [999 para parar]: '))
soma = soma + num
cont = cont + 1 #quando eu ler o numero o contador recebe contador + 1
print('Você digitou {} números e a soma entre eles foi {}'.format(cont, soma))
· Nesta resolução acima existe um problema, pois vai somar o 999 como contador e na soma também, lendo o seguinte resultado:
Você digitou 4 números e a soma entre eles foi 1005
E eu não quero que some o 999 nem conte como número digitado
Então eu posso fazer o seguinte:
num = 0
cont = 0 #esse contador recebe 0 pq eu não li numero nenhum ainda
soma = 0
while num != 999: #condição de parada é 999, o flag é 999
soma = soma + num
cont = cont + 1 #quando eu ler o numero o contador recebe contador + 1
num = int(input('Digite um número [999 para parar]: '))
print('Você digitou {} números e a soma entre eles foi {}'.format(cont, soma))
trocando o campo sublinhado de lugar ele já não soma mais o 999 mas continua contando 999 como número digitado
print('Você digitou {} números e a soma entre eles foi {}'.format(cont - 1, soma - 999))
nesta resolução acima, também funciona
Mas na resolução abaixo também funciona trocando os comandos para ler o numero de lugar e adicionando o mesmo comando no inicio
num = 0
cont = 0 #esse contador recebe 0 pq eu não li numero nenhum ainda
soma = 0
num = int(input('Digite um número [999 para parar]: '))
while num != 999: #condição de parada é 999, o flag é 999
soma = soma + num
cont = cont + 1 #quando eu ler o numero o contador recebe contador + 1
num = int(input('Digite um número [999 para parar]: '))
print('Você digitou {} números e a soma entre eles foi {}'.format(cont, soma))
Exercício Python 65: Crie um programa que leia vários números inteiros pelo teclado. No final da execução, mostre a média entre todos os valores e qual foi o maior e o menor valores lidos. O programa deve perguntar ao usuário se ele quer ou não continuar a digitar valores.
resp = 'S'
soma = quant = média = maior = menor = 0
while resp in 'Ss':
num = int(input('Digite um número: '))
soma += num
quant += 1
if quant == 1:
maior = menor = num
else:
if num > maior:
maior = num
if num < menor:
menor = num
resp = str(input('Quer continuar? [S/N] ')).upper().strip()[0]
média = soma / quant
print('Você digitou {} número e a média foi {}.'.format(quant, média))
print('O maior valor foi {} e o menor valor foi {}'.format(maior, menor))
resposta = 'S'
contador = soma = maior = menor = 0
while resposta in 'S':
numero = int(input('Digite um número: '))
resposta = str(input('Quer continuar? [S/N] ')).strip().upper()[0]
contador += 1
soma += numero
if contador == 1:
maior = menor = numero
else:
if numero > maior:
maior = numero
if numero < menor:
menor = numero
print(f'A quantidade de número solicitados foi: {contador}')
print(f'A soma de todos os numeros é {soma}')
print(f'A média de todos os números é : {soma / contador}')
print(f'O maior número é: {maior}')
print(f'O menor número é: {menor}')
TABUADA COM WHILE
t = i = 0
num = int(input('Digite um número: '))
while i <= 9:
i += 1
print(f'{num} x {i} = {num * i}')
vamos supor que eu tenho número inteiro grande, com muitos dígitos, e eu quero que você faça programa que vai calcular a soma dos dígitos desse número. Então, se o número é 6532, ele vai somar seis mais cinco mais três mais dois. E ele vai dizer: seis mais cinco é onze, com cinco, 16. Então, dado isso aqui ele tem que dar a soma dos dígitos que nesse caso aqui seria 16. Como que você vai conseguir fazer isso?
decrescente = True
anterior = int(input('Digite o primeiro número da sequência: '))
valor = 1
while valor != 0 and decrescente:
valor = int(input('Digite o próximo número da sequência: '))
if valor > anterior:
decrescente = False
anterior = valor
if decrescente:
print('A sequência está em ordem decrescente. :-)')
else:
print('A sequência não está em ordem decrescente. :-(')
QUANTIDADE DE PAR E IMPAR
terminou = False
p = i = 0
while (not terminou):
n = int(input("Digite um número, ou zero para terminar: "))
if n == 0:
terminou = True
else:
if n % 2 == 0:
p = p + 1
else:
i = i + 1
print ("P = ", p)
print ("I = ", i)