while ... else

Операторы if могут иметь блоки else, которые выполняются в случае, если условие оператора if не было выполнено. Аналогично, циклы while могут иметь блоки else, которые будут выполнены, если условие цикла while не было выполнено.
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!')
Программа с циклом while будет запрашивать у пользователя имя до тех пор, пока оно не станет 'Alice'. Если в итоге введено имя 'Alice', условие name != 'Alice' становится ложным, и программа переходит в блок else, где выводит Hi, Alice!.
 

Разве мы не можем сделать это вне цикла while, прямо перед print('End!')?

В этом примере — да! Но конструкция while ... else очень удобна, когда мы работаем с операторами break. Если мы выходим из цикла while с помощью break, блок else не будет выполнен, так как условие всё ещё было истинным при входе в цикл. Было обсуждение назвать эту конструкцию while ... nobreak вместо while ... else.
Представьте, что мы хотим проверить, содержит ли число цифру 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')
Таким образом, когда цикл while прерывается, блок else не выполняется, поэтому программа не выведет второе сообщение, если уже нашла цифру 5.
Если цикл while доходит до конца и условие перестаёт быть истинным, блок else будет выполнен, и программа выведет The number does not have a digit 5.
Вы можете интерпретировать конструкцию while ... else как while ... nobreak, но записывать её с помощью else в программах.

Задание

Дано целое число на входе. Ваша задача — определить, содержит ли оно цифру 3 или 7. Если содержит, выведите The number contains a digit 3 or 7. Если не содержит, программа должна вывести The number neither has a digit 3 nor a digit 7.
Ввод
Вывод
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