while ... else

Les instructions if peuvent avoir des blocs else qui sont exécutés si la condition de l'instruction if n'est pas satisfaite. De même, les boucles while peuvent également avoir des blocs else, qui seront exécutés lorsque la condition de la boucle while n'est plus satisfaite.
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!')
Le programme avec un while va demander à l'utilisateur de saisir son nom tant qu'il n'est pas égal à Alice. Si finalement le nom est Alice, la condition name != 'Alice' n'est plus vraie, et le programme entre dans le bloc else où il affiche Hi, Alice!.
 

Ne pourrions-nous pas simplement faire cela en dehors du while juste avant print('End!') ?

Dans cet exemple, oui ! Mais while ... else devient très pratique lorsque nous utilisons des instructions break. Si nous sortons de la boucle while avec un break, le bloc else ne sera pas exécuté car la condition était toujours vérifiée lorsque le programme est entré dans la boucle. Il y a eu des discussions pour nommer cela while ... nobreak au lieu de while ... else.
Imaginez que nous voulons vérifier si le nombre contient le chiffre 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')
Ainsi, chaque fois que la boucle while est interrompue avec un break, le bloc else ne sera pas exécuté ; par conséquent, le programme n'affichera pas le second message s'il a déjà trouvé le chiffre 5.
Si la boucle while atteint la fin et que la condition n'est plus satisfaite, le bloc else sera exécuté et le programme affichera The number does not have a digit 5.
Vous pouvez interpréter le concept de while ... else comme while ... nobreak, mais l'écrire avec else dans les programmes.

Défi

Étant donné un entier en entrée, votre tâche est de déterminer s'il contient le chiffre 3 ou 7 parmi ses chiffres. S'il en contient, vous devez afficher The number contains a digit 3 or 7. Sinon, le programme doit afficher The number neither has a digit 3 nor a digit 7.
Entrée
Sortie
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