Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

[Dúvida] Exercício 3

Com relação ao exercício 3, consegui escrever o seguinte código

for i in range (2):
dados = float(input('digite um valor:'))
if dados <0 or dados >5:
print('Digite um valor entre 0 e cinco')
print(dados)

porém, não consegui pensar numa forma dele forçar o usuário a inserir um valor adequado, o loop simplesmente continua.
Poderia me ajudar, por gentileza?

4 respostas
solução!

Oii, Daniel.

É muito bom ver você praticando. Essa dúvida sobre como "forçar" uma entrada válida é um passo clássico e muito importante no aprendizado de lógica de programação.

O que tá acontecendo no seu código é que o if apenas faz uma verificação única. Se o valor for inválido, ele avisa, mas o fluxo do programa segue para a próxima repetição do for, passando para o próximo dado.

Pra resolver isso, precisamos de um "laço dentro do laço". Enquanto o usuário não digitar o valor correto, o programa não deve avançar. O while é a escolha ideal aqui, pois ele repete um bloco de instruções enquanto uma condição for verdadeira.

Ajustando seu código:

for i in range(15): # O laço principal para os 15 dados
    dados = float(input(f'Digite a nota para o dado {i+1}: '))
    
    # Aqui entra o "bloqueio": enquanto a nota for inválida, ele não sai daqui
    while dados < 0 or dados > 5:
        print('Valor inválido! Digite um valor entre 0 e 5.')
        dados = float(input(f'Digite novamente a nota para o dado {i+1}: '))
    
    # Quando o código chega aqui, temos a garantia de que a nota é válida
    print(f'Nota confirmada: {dados}')

print('Todas as 15 notas foram coletadas com sucesso!')

Por que isso funciona?

  1. O for controla a quantidade total de avaliações que você quer receber (no caso, 15).
  2. O while atua como um "pedágio". Se o usuário digitar algo errado, a condição dados < 0 or dados > 5 será verdadeira e o programa ficará preso dentro desse bloco pedindo a nota novamente.
  3. O programa só sai do while e volta para o próximo ciclo do for quando o usuário digitar um número que torne a condição do while falsa (ou seja, uma nota entre 0 e 5).

Uma dica extra
Note que dentro do while eu usei o input novamente. Isso é necessário para atualizar o valor da variável dados. Se não atualizarmos o valor lá dentro, a condição nunca mudará e teremos um loop infinito.

Conteúdos relacionados
Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!

Muito obrigado, Lorena!

Existe algum lugar aqui na Alura em que posso fazer mais exercícios parecidos com esse?

Oi, Daniel.

Temos os cursos Praticando. Você pode acessar aqui:

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!