Ca c'est l'algorithme qu'on apprend dans les cours d'algo, l'algorithme "scolaire". Celui où on reste bien sage et où on écoute le professeur qui dit que le "break" c'est pas propre et que le "continue" c'est une hérésie et qu'une fonction doit n'avoir qu'un seul "return". Celui où on dit "oui professeur" et où on lui offre une pomme à la fin du cours.
Ensuite, on arrive dans le vrai monde, celui où on se dit que si on peut n'écrire qu'une instruction au lieu de deux identiques quitte à mettre un petit break qui ne mange pas de pain c'est sympa, celui où on préfère sortir de la fonction dès qu'elle a obtenu une certitude via un return en plein milieu et celui où on a inventé le while ((x=input(...)) != valeur_finale) qui a été porté en Python v3.8 tellement c'était pratique sous le nom d'opérateur morse.
Et là on se dit que l'école c'était bien joli mais bon, maintenant il faut arrêter de se pignoler avec la théorie et faire du concret (en essayant de ne pas tomber dans l'excès car en réalité c'est lui qui est néfaste et non les outils qu'on utilise).
Ca par exemple c'est un excès. while est un très bon outil s'il est employé dans son concept d'usage. Et inversement ne pas l'utiliser là où il serait nécessaire juste pour une question de goût c'est se priver d'une possibilité pratique et devoir la remplacer alors par d'autres outils dans une écriture bien souvent plus chaotique.
Parfait exemple illustratif. Remplacer ce qui aurait été si simple avec un while par un appel récursif. L'appel récursif qui va devoir sauvegarder le contexte de travail pour générer un nouveau sous-contexte vierge (ce n'est pas gratuit en terme de RAM et de proc), et ce autant de fois qu'on se trompe dans la saisie. Bon ok tu me diras que la récursion est limitée à 1000 sous Python donc tu peux admettre que le gogol qui répond ne se trompera probablement pas 1000 fois mais qui te dit que ce que tu codes ne deviendra pas demain une librairie utilisable par d'autres et donc y compris par certains qui définiront cette limite à 3, 2 ou 1 ?
Sinon il reste que cela peut amener des erreurs d'étourderie qui n'y auraient pas été avec un while comme ce "else" inutile (mais qui est traité par le proc) ou oublier de replacer le prompt à afficher dans l'appel récursif.
Accessoirement la liste en intension c'est une bonne idée (content que tu aies bien pigé le truc) mais si "numbers" n'a pas vocation à évoluer on conseille plutôt le tuple que la liste qui prend moins de place en RAM.
Ma fonction fait 7 lignes (avec les commentaires) là où la tienne en a 7 (sans les commentaires). Ne pas oublier les principes zen de Python dont l'un deux dit que simple est mieux que complexe (https://www.python.org/dev/peps/pep-0020/)
Code python : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 def get_user_int_input(msg=''): while True: x=input(msg) if x.isdigit(): return int(x) print("Vous devez saisir un chiffre, svp, recommencez.") # while # get_user_input() n=get_user_int_input("Nombre d'entree ?") numbers = tuple(get_user_int_input() for i in range(n))
Partager