while ... else

As instruções if podem ter blocos else que são executados caso a condição da instrução if não seja satisfeita. De forma semelhante às instruções if, os ciclos while também podem ter blocos else, que serão executados caso a condição do ciclo while não seja satisfeita.
name = input()
if name != 'Alice':
    print('I don\'t know you')
else:
    print('Hi, Alice!')

print('End!')
name = input()
while name != 'Alice':
    print('I don\'t know you')
    name = input()
else:
    print('Hi, Alice!')

print('End!')
O programa com while irá pedir ao utilizador que introduza o seu nome enquanto não for Alice. Quando finalmente o nome for Alice, a condição name != 'Alice' deixa de ser verdadeira, e o programa entra no bloco else, onde imprime Hi, Alice!.
 

Não poderíamos simplesmente fazer isso fora do while mesmo antes de print('End!')?

Neste exemplo, sim! Mas o while ... else torna-se muito útil quando lidamos com instruções break. No caso de interrompermos o ciclo while com um break, o bloco else não será executado, pois a condição ainda era verdadeira quando o programa entrou no ciclo. Houve algumas discussões para chamar isto de while ... nobreak em vez de while ... else.
Imagine que queremos verificar se um número tem o dígito 5:
n = 123409087542108
while n != 0:
    if n % 10 == 5:
        print('The number contains a digit 5!')
        break
    n //= 10
else:
    print('The number does not have a digit 5')
Assim, sempre que o ciclo while é interrompido com um break, o bloco else não é executado; portanto, o programa não imprimirá a segunda mensagem se já tiver encontrado o dígito 5.
Caso o ciclo while chegue ao fim e a condição deixe de ser verdadeira, o bloco else será executado e o programa imprimirá The number does not have a digit 5.
Pode interpretar o conceito de while ... else como while ... nobreak, mas escrevê-lo com else nos programas.

Desafio

Dado um número inteiro na entrada, a sua tarefa é determinar se ele contém o dígito 3 ou 7. Se o número contiver um desses dígitos, deve imprimir The number contains a digit 3 or 7. Se não, o programa deve imprimir The number neither has a digit 3 nor a digit 7.
Entrada
Saída
1208452
The number neither has a digit 3 nor a digit 7
12939078123
The number contains a digit 3 or 7
 

Constraints

Time limit: 1 seconds

Memory limit: 512 MB

Output limit: 1 MB

To check your solution you need to sign in
Sign in to continue