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

[Dúvida] Aula 4- Estruturas de repetição, Questão 3

Bom dia gente

Estou aqui fazendo os desafios da aula 4, abordando estruturas de repetição com laços while e for. O enunciado dispõe o seguinte:

"Para tratar uma quantidade de 15 dados de avaliações de pessoas usuárias de um serviço da empresa, precisamos verificar se as notas são válidas. Então, escreva um programa que vai receber a nota de 0 a 5 de todos os dados e verificar se é um valor válido. Caso seja inserido uma nota acima de 5 ou abaixo de 0, repita até que a pessoa usuária insira um valor válido."

Para resolver segui uma estrutura bem semelhante ao recomendado pelos orientadores, com a seguinte formula:

for notas in range(15):
  nota = int(input('Avalie nosso serviço de 0 a 5: '))
  while (nota < 0) or (nota > 5):
    print('Nota inválida, por favor, nos avalie de 0 a 5')

Só que está ocorrendo o seguinte: quando a nota entra dentro do laço gerado pelo While ele entra em um loop infinito, imprimindo sempre o print "Nota invalida..."

Pensei em solucionar esse problema por meio do comando de controle break, mas tenho a impressão que isso não resolveria a proposta do exercício, pois a contagem das notas da avaliação se interromperia ao invés de pedir um novo valor e apresentar uma correção.

Vocês possuem uma solução melhor para esse problema ?

2 respostas
solução!

O problema no seu código é que você está usando um loop for para iterar sobre as 15 notas, mas dentro desse loop, está utilizando um loop while que pode entrar em um estado de loop infinito se a nota inserida for inválida. Isso acontece porque o loop for não será capaz de continuar para a próxima iteração até que a condição do while seja falsa.

Uma solução para isso é usar apenas um loop while para garantir que a nota seja válida antes de prosseguir para a próxima iteração. Aqui está uma versão modificada do seu código:

notas = []
for _ in range(15):
    while True:
        nota = int(input('Avalie nosso serviço de 0 a 5: '))
        if 0 <= nota <= 5:
            break
        else:
            print('Nota inválida, por favor, nos avalie de 0 a 5')
    notas.append(nota)

# Agora você pode usar a lista 'notas' conforme necessário
print('Notas válidas:', notas)

Neste código, utilizei um loop while True para garantir que o programa continuará pedindo uma nota até que uma nota válida seja inserida. Se a nota inserida estiver no intervalo de 0 a 5, o loop é interrompido usando break. Caso contrário, uma mensagem de "Nota inválida" é exibida, e o loop continua até que uma nota válida seja fornecida. As notas válidas são armazenadas em uma lista chamada notas.

Muito obrigado Carlos!!