Atividade 1: while
O while
é uma estrutura de repetição comum em quase todas as linguagens de programação, assim como o if
(já visto anteriormente). Estas duas estruturas possuem semelhanças: ambas possuem uma condição e o passo que deve ser executado deve estar devidamente identado.
Para facilitar a compreensão, imagine o while
como uma estrutura if
que executa um bloco de código enquanto a condição for verdadeira ou o laço seja explicitamente encerrado com break
. Caso ela seja falsa, executa outro bloco de instrução.
Contudo, existe uma observação a ser feita em laços como o while
e o for
(será visto posteriormente). Acima foi dito que um determinado bloco de código será executado enquanto uma condição for verdadeira. Você consegue identificar o problema que pode ser causado para a máquina?
Veja o fluxograma abaixo:
graph TD
id((Início)) -- Enquanto --> id1{Condição}
id1 -- True --> id2[Executa este bloco] --> id1
id1 -- False -->id4((Fim))
Exemplo 1: Contador de 1 a 10.
Imprima os valores de 1 a 10 utilizando while
:
%%{init: {'theme': 'base', 'themeVariables': {'fontSize': '18px'}}}%%
flowchart LR
id1((count=1))
subgraph " "
id2{count<br>menor/igual a<br>10}
id2 -- True --> id3((count=count+1)) --> id2
end
id2 -- False --> id4((count é maior<br>que 10))
id1 -- Enquanto --> id2
id4 --> id5((Fim))
count = 1 while count <= 10: print(count) count += 1
1
2
3
4
5
6
7
8
9
10
Exemplo 2: Investimento
Paulo quer começar a investir, mas apenas quando tiver R$ 20.000,00. Todos os anos, ele recebe um bônus líquido de R$ 2.000,00 e guarda em seu cofre. No momento, ele tem apenas R$ 4.000,00. Utilizando while
, informe ao Paulo quando ele poderá, finalmente, começar a aplicar o seu patrimônio.
saldo_atual = 4000 bonus_anual = 2000 count = 0 # contador while saldo_atual < 20000: print("Lamento, Paulo. Ainda não possui {saldo_desejado}. Você possui apenas R$ {saldo_atual}.".format(saldo_desejado=20000, saldo_atual=saldo_atual)) saldo_atual += bonus_anual # saldo_atual = saldo_atual + bonus_atual count += 1 # count = count + 1 if saldo_atual >= 20000: print("{} conseguiu em {} anos!".format("Paulo", count))
Lamento, Paulo. Ainda não possui 20000. Você possui apenas R$ 4000.
Lamento, Paulo. Ainda não possui 20000. Você possui apenas R$ 6000.
Lamento, Paulo. Ainda não possui 20000. Você possui apenas R$ 8000.
Lamento, Paulo. Ainda não possui 20000. Você possui apenas R$ 10000.
Lamento, Paulo. Ainda não possui 20000. Você possui apenas R$ 12000.
Lamento, Paulo. Ainda não possui 20000. Você possui apenas R$ 14000.
Lamento, Paulo. Ainda não possui 20000. Você possui apenas R$ 16000.
Lamento, Paulo. Ainda não possui 20000. Você possui apenas R$ 18000.
Paulo conseguiu em 8 anos!
Exemplo 3: def
e Fibonacci.
A palavra reservada def
é para a criação de funções em python. Não é objetivo deste capítulo aprofundar-se sobre as funções, porém é necessário, à primeira vista, entender a sua importância.
Imagine que você queira fazer um pequeno programa em python que simule uma calculadora. Pense a nível de projeto:
-
Funcionalidades de uma calculadora: “quais operações eu quero que ela realize?”
-
Interações com o usuário: ler os valores fornecidos pelo usuário, retornar para ele o resultado.
Por cima descrevemos o que seria o projeto de uma calculadora. Agora imagine tudo isso em um arquivo em código “contínuo”. Ficaria imenso!
Você decide compartilhar o seu código com o seu amigo e quando ele vê aquele código imenso, já até sente preguiça de continuar a leitura.
Isso é bastante desagradável, porém utilizar funções para “enxutar” o seu código ajuda muito. Veja que, em termos de tamanho, não deve mudar muita coisa. Contudo, em termos de legibilidade (acredite, isso importa muito!) influencia.
Sem mais delongas, vamos ver a sintaxe para criar uma função através do exemplo abaixo, em que queremos retornar ao usuário a série de Fibonacci.
Escrevendo uma série de Fibonacci até um valor delimitador.
# def e fibonacci def fibonacci(n): # funcao fibonacci limitado ao parametro n a, b = 0, 1 # a = 0, b = 1 while a < n: print(a, end = ' ') a, b = b, a+b # a = b, b = a + b print() # chamando a funcao criada acima fibonacci(10)
0 1 1 2 3 5 8
Links úteis:
Tarefa 1: Faça uma calculadora de soma e subtração. Utilize def
e while
.
Exemplo 4: break
O break
é um comando que encerra o loop imediatamente, sem se importar com as instruções seguintes. É muito útil para o que podemos chamar de “erros críticos”. Vamos abstrair em um exemplo: pense que você está dirigindo um carro e o semáforo sinaliza amarelo e, em poucos segundos, altera para o vermelho. Não importa se vem carros ou não, você deve parar. O que chamamos de “erro crítico”, nesse caso, seria avançar o sinal.
Para exercitar tente fazer a tarefa abaixo:
Tarefa 1: Veja o código abaixo e faça o que se pede:
- Existe algum problema neste código?
- Se sim, qual é o problema? Corrija-o.
- Faça um fluxograma deste código.
qtd_operacoes = 1
while qtd_operacoes <= 3:
x = float(input("x = "))
y = float(input("y = "))
if y == 0:
break # Este comando para o loop
else:
print("{} / {} = {:.2f}".format(x, y, x/y))
Atividade 2: while-else
Você viu anteriormente que o while
trata de executar um bloco de código enquanto uma condição é verdadeira. Se você incluir um else
será possível executar uma “contra ação”, isto é, executar outro bloco de código caso a condição seja falsa.
Exemplo 5: Números pares
Imprimir os números pares de 0 a 10.
numerospares = 0 while numerospares <= 10: print(numerospares) numerospares += 2 # numerospares=numerospares + 2 else: print('O intervalo foi ultrapassado.')
0
2
4
6
8
10
O intervalo foi ultrapassado.
Exemplo 6: Digitando uma senha
Peça ao usuário para que ele digite uma senha. Esta senha não pode iniciar com um número decimal. Utilizando While
, faça uma verificação para que todas as vezes que o usuário entre com uma senha inválida, mostre uma mensagem e peça para ele repetir até que seja uma senha aceitável.
senha_usuario = input('Senha: ') while senha_usuario[0].isdecimal(): print('Senha inválida. Tente novamente!') print('-'*50) senha_usuario = input('Outra senha: ') else: print("Senha válida!") print('FIM')
Senha: 1MinhaSenha
Senha inválida. Tente novamente!
--------------------------------------------------
Outra senha: MinhaSenha
Senha válida!
FIM
Atividade 3: while-continue
Além do break, temos também o continue, que é o seu oposto. Enquanto o primeiro para o código totalmente, sem se importar com o que vem depois; o continue ignora as próximas instruções e passa para a próxima iteração.
Exemplo 7: Classificando números
Neste exemplo vamos imprimir todos os números e dizendo se é par ou ímpar, em um intervalo de 0 a 10.
num = 0 # inicializa a variavel num while num <= 10: # itera sobre num num += 1 # adiciona sempre 1 passo if num % 2 == 0: # para verificar se é par ou nao print('{} é par.'.format(num)) # imprime se for par continue # aqui ele continua a iteracao print('{} é ímpar.'.format(num)) # imprime se for ímpar print('FIM.') # fim do codigo
1 é ímpar.
2 é par.
3 é ímpar.
4 é par.
5 é ímpar.
6 é par.
7 é ímpar.
8 é par.
9 é ímpar.
10 é par.
11 é ímpar.
FIM.
Tarefa 3: Faça um programa que leia e valide as seguintes informações:
- Nome do usuário: maior que 3 caracteres;
- Idade do usuário: entre 0 e 150;
- Salario do usuário: maior que 0;
- Estado civil do usuário: solteiro, casado, viúvo e divorciado.
Tarefa 4: Faça um programa que calcule as raízes de uma equação do 2º grau enquanto o usuário desejar. Utilize def
e while
.
Tarefa 5: Um número complexo é composto pela parte real e parte imaginária. Considere z um número complexo da forma: \(z = a + jb\) em que: \(j = \sqrt{-1} \rightarrow j^{2} = -1\) Veja o fluxograma abaixo para saber o valor de j elevado a qualquer expoente.
%%{init: {'theme': 'base', 'themeVariables': {'fontSize': '16px'}}}%%
graph TD
id1((j elevado <br> a n)) --> id2{n é par} -- True --> id3((j elevado<br> a 2k)) --> id5{k é par} -- True --> id6((j elevado<br> a n é igual a 1))
id5 -- False --> id7((j elevado<br> a n é igual a -1))
id2 -- False --> id4((j elevado<br>a 2k+1)) --> id8{k é par} -- True --> id9((j elevado<br>a n é igual a j))
id8 -- False --> id10((j elevado<br> a n é igual a -j))
Pratique com j elevado 1000 e com j elevado a 1001.
Agora que você já sabe como descobrir o valor de j elevado a qualquer expoente, faça um programa que peça ao usuário o valor do expoente três vezes e, utilizando while
, retorne para ele o resultado. Faça apenas para expoentes pares.
Atividades 4: Para casa
Exercício 1: Expoente ímpares
Aprimore a Tarefa 5 para expoentes ímpares.
Dica: reutilize o código.
Exercício 2: Calculando fatorial
Faça um programa que calcule o fatorial de um número mostrando as suas multiplicações para o usuário. Também imprima o valor final.
Dica: por definição, o fatorial de um número n é: n! = 1 x 2 x 3 x … x (n - 1) x n. Exemplo: 3! = 3 x 2 x 1; 5! = 5 x 4 x 3 x 2 x 1.
Exercício 3: Lista de compras
Paulo tem apenas R$ 200,00 e decide ir ao supermercado. Ele pede para que você faça um programa simples que adiciona produtos em sua cesta enquanto o valor total não ultrapassar o que tem em mãos.
Produto | Valor | Quantidade desejada |
---|---|---|
Sabão em pó | R$ 5,00 | 2 |
Arroz | R$ 40,00/kg | 2 |
Energético | R$ 8,00 | 5 |
Produtos de limpeza | R$ 55,00 | 1 |
Picanha | R$ 70,00/kg | 2,5 |
Imprima para o Paulo o que você conseguiu colocar e diga o valor total.
Observação: Embora ele tenha R$ 200,00, talvez ele não queira gastar tudo. Crie a cesta dele de acordo com as suas preferências, mas lembre-se que não pode ultrapassar o saldo.
Exercício 4: Imprimindo números
Imprima todos os números sejam menores que 100 quando elevados ao quadrado.
Sugestão: Utilize
def
Exercício 5: Fluxogramas
Crie fluxogramas que representem esses dois códigos.
Dica: Você pode utilizar o
mermaid
em uma célula Markdown que é habilitado através da extensão@agoose77/jupyterlab-markup
(Ver capítulo 4). A documentação domermaid
está disponível aqui, e existe um editor online disponível aqui.
Código 1:
i = 0
j = 10
n = 0
while i < j :
i = i + 1
j = j − 1
n = n + 1
Código 2:
i = 0
j = 10
n = 0
while i != j :
i = i + 2
j = j – 2
n = n + 1