Alternative au do…while en Python 5 Recently updated !
lundi 3 juillet 2017 à 17:25De nombreuses instructions ont été volontairement écartées de Python. Le goto
bien entendu, mais aussi le switch
, unless
et le do...while
.
Le but est de limiter le nombre de mots clés à connaitre afin de comprendre le langage. Les créateurs ont choisi donc de mettre de côté des mots clés trop souvent mal utilisés, pas assez utilisés, ou qui possèdent des alternatives suffisantes.
La boucle while
est rarement utilisée en Python, en tout cas beaucoup, beaucoup moins que sa petit soeur la boucle for
. Avoir besoin d’un do...while
est encore plus rare, et donc ne peut faire partie du club très fermé des mots clés réservés.
Si l’on souhaite obtenir l’effet du do..while
en python, on fait donc généralement une boucle infinie suivie d’un break sur une condition. Exemple:
import random choix = random.randint(0, 1) while True: reponse = int(input('Devinez le nombre: ')) if reponse < choix: print('Plus grand') elif reponse > choix: print('Plus petit') else: break print('Bravo') |
Le défaut de cette technique et qu’elle ne rend pas claire dès le début la condition de sortie de la boucle. Aujourd’hui en parcourant la mailling list python-idea, je suis tombé sur un idée pas conne:
import random choix = random.randint(0, 100) while "L'utilisateur n'a pas encore deviné le nombre": reponse = int(input('Devinez le nombre: ')) if reponse < choix: print('Plus grand') elif reponse > choix: print('Plus petit') else: break print('Bravo') |
Ca marche car les chaînes non vides sont toujours vraie en Python, et ça documente le code :)