Nombre positif
Je realise des excercices du livre " 100 exercices PYTHON pour s'entrainer".
l'exercice 6 demande en gros de tester une valeur et le resultat doit tester si le nombre est positif ou negatif.
Et j'ai voulue trouver comment controler la saisie utilisateur.
j'ai tesé plien de chose avec des boucles avec des list des isdigit etc .....
Mais cela fonctionnais mal avec les caractere speciaux ou autre "enfin je n'ai pas trouvé de solution".
Et en cherchant solution je suis tomber sur la gestion d'erreur "Try except" et j'ai vue des tuto sur les Fonction.
Donc j'ai melanger tous ça :
Dite moi si j'en est fait un bon usage, merci:
# 12/05/2024
# exercice qui teste un nombre positif ou negatif
# premiere uutilisation de fonction et Try except (gestion erreur).
# teste de saisie utilisateur
# premier teste de convertion (int) possible
def teste_nb(nb):
try:
nb = int(nb)
print(f"La chaîne '{nb}' a été convertie en entier.")
test_nb_pos(nb)
except ValueError:
print("----→ Erreur ←----")
print("La chaîne ne représente pas un entier.")
print("----→ Recommencer svp ←----")
user_nb()
# teste du nombe positif ou non
def test_nb_pos(nb):
if nb > 0 :
print(f"le nombre {nb} est un nombre positif !")
elif nb < 0 :
print(f"{nb} est un nombre negatif !")
else:
print(f"{nb} est égale à False ")
def user_nb():
teste_nb(input("entre un nombre : ".capitalize()))
# le programme demare ici
user_nb()
# fin
Bonjour Claude,
C'est un très bon début bravo !
Voici une correction que je te propose :
from textwrap import dedent
def verification(nombre: str) -> int:
try:
nombre = int(nombre)
print(f"La chaîne '{nombre}' a été convertie en entier.")
return nombre
except ValueError:
print(dedent("""
----→ Erreur ←----
La chaîne ne représente pas un entier.
----→ Recommencer svp ←----
"""))
def verification_positif(nombre: int) -> None:
if nombre > 0:
print(f"le nombre {nombre} est un nombre positif !")
elif nombre < 0:
print(f"{nombre} est un nombre negatif !")
else:
print(f"{nombre} est égale à 0")
if __name__ == '__main__':
nombre = None
while nombre is None:
nombre = verification(input("entre un nombre : ".capitalize()))
verification_positif(nombre)
En règle générale :
-
Attention à ne pas trop utiliser les fonctions et à les utiliser pour réaliser une seule action.
- Dans ton cas, ta fonction
teste_nbessayait de convertir le nombre, puis d'exécuter une action en conséquence. J'ai enlevé cette logique pour la mettre dans la boucle principale (voir le glossaire__name__). Ainsi, ta fonction ne fait qu'une chose : essayer de convertir le nombre sous forme de chaîne de caractères en entier.
- Dans ton cas, ta fonction
-
Pareil pour la logique principale, là c'était confus tu avais une fonction
user_nbavec une seule ligne de code, qui appelle la fonctionteste_nb, et cette fonction appelle à son tour la fonctionuser_nbdans le cas où tu n'entres pas un nombre. Ça fait du code éparpillé et c'est difficile de suivre le chemin de ton script. En suivant le principe qu'une fonction ne doit réaliser qu'une action, ça permet de mieux comprendre ce que font les fonctions et d'avoir la logique au même endroit (dans mon cas, dans la bouclewhile). -
N'hésite pas à nommer explicitement les objets dans ton script.
nb->nombreounumber,pos->positif. Aujourd'hui on a de la place sur nos écrans et il est toujours préférable d'être le plus explicite possible pour que le script soit facile à lire et comprendre.
Également, j'ai ajouté une petite fonction bien pratique : dedent, qui permet de mettre tout dans un print et de ne pas afficher les indentations.
Voilà pour la correction, bonne continuation !
Inscris-toi
(c'est gratuit !)
Tu dois créer un compte pour participer aux discussions.
Créer un compte