while ... else

Declarações if podem ter blocos else que são executados caso a condição da declaração if não seja satisfeita. De forma semelhante às declarações if, os loops while também podem ter blocos else, que serão executados caso a condição do 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 um while irá solicitar ao usuário que insira seu nome enquanto não for Alice. Caso o nome seja finalmente Alice, a condição name != 'Alice' não se mantém, e o programa entra no bloco else, onde imprime Hi, Alice!.
 

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

Neste exemplo, sim! Mas o while ... else é muito útil quando estamos lidando com declarações break. No caso de interrompermos o loop while com um break, o else não será executado, pois a condição ainda estava sendo satisfeita quando o programa entrou no loop. Houve algumas discussões para nomear isso como while ... nobreak em vez de while ... else.
Imagine que queremos verificar se o 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 loop while é interrompido com break, o bloco else não será executado; portanto, o programa não imprimirá a segunda mensagem se já tiver encontrado um dígito 5.
Caso o loop while chegue ao fim e a condição não seja mais satisfeita, o bloco else será executado e o programa imprimirá The number does not have a digit 5.
Você 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, sua tarefa é descobrir se ele contém o dígito 3 ou 7. Se contiver, você 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: 2 seconds

Memory limit: 512 MB

Output limit: 1 MB

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