Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1413 connectés 

  FORUM HardWare.fr
  Programmation
  Python

  Problème avec les boucles

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problème avec les boucles

n°1928707
oxdo
Posté le 03-10-2009 à 20:15:12  profilanswer
 

Bonjour je suis débutant en Python. Je doit faire un programme pour calculer la racine carré d'un nombre par itération puis calculer l'erreur par rapport à la valeur exact en utilisant la fonction sqrt().
Je voudrais que lorsque je tape un caractère ou une valeur négative il me le signal par un petit message et j'ai donc utilisé des if, elif et else. Mais ça ne marche pas.
Par contre le calcul marche très bien donc pas de problèmes pour ça.
 

Code :
  1. # -*- coding: cp1252 -*-
  2. from math import*
  3. ############################################
  4. # Programme TP1 programme1.py              #
  5. # Auteur : ...                 #
  6. # Derniere mise a jour : 03 octobre 2009   #
  7. ############################################
  8. def iter(xi,C):       # definition d'une fonction
  9.   xip1=0.5*(xi+C/xi)  # xip1 = x(i+1)
  10.   return xip1
  11. #######################
  12. # Programme principal #
  13. xi=1
  14. k=xi
  15. e=1.
  16. erreur=1
  17. while (1) :  # boucler jusqu'a ce que la reponse soit la bonne
  18.   try :
  19.     C=input("Calcul de la racine carré de c. \n Ecrire une valeur positive pour c : " )
  20.     break
  21.   except :
  22.     print "Je ne sais pas lire cela! Essayez de nouveau."
  23. if (C>0.) :
  24.     while (xi<20 and e>0.00001) :
  25.         j=iter(k,C)
  26.         e=abs(j-k)
  27.         xi=xi+1
  28.         k=j
  29.         print "Le résultat est : x =",j
  30.         f=sqrt(C)
  31.         erreur=abs(k-f)
  32.         print "Et l'erreur est de : ", erreur
  33. elif (type(C)==type("bonjour" )) :
  34.   print "Vous avez entré une chaine de caractère!"
  35. elif (C<=0.) :
  36.   print "Vous avez entré un nombre négatif!"
  37. else :
  38.   print "Je ne peux pas identifier ce que vous avez entré!"


 
 
 
   
 
 
 

mood
Publicité
Posté le 03-10-2009 à 20:15:12  profilanswer
 

n°1928747
suizokukan
Posté le 04-10-2009 à 09:40:47  profilanswer
 

Bonjour oxdo,
sans être - et de loin - un expert voici ce que ton code m'inspire :
 
(1) type("bonjour" ) s'écrit en Python "str" : if type(C)==str:
 
(2) on peut calculer la racine de 0, non ? Pourquoi exclure ce cas ?
 
(3) break n'est pas utilisé à la fin d'un try
 
(4) je crois que l'organisation de ton code est problématique. Voilà comment je ferais :
 

Code :
  1. try:
  2.     while(1):
  3.         récupérer la valeur de C
  4.         vérifier que C est un nombre >= 0, sinon lancer une exception
  5.         lancer le calcul
  6. except:
  7.     récupérer une éventuelle exception


Message édité par suizokukan le 04-10-2009 à 09:41:16

---------------
rule #1 : trust the python
n°1928749
masklinn
í dag viðrar vel til loftárása
Posté le 04-10-2009 à 09:59:07  profilanswer
 

Autres remarques:

  • Ne pas utiliser input(), utiliser raw_input à la place et faire ses conversions soi même
  • while 1 devrait être écrit while True
  • Pas besoin de parenthèses partout
  • Enfin, qu'est-ce qui ne marche pas?


Également: éviter de redéfinir des builtins (iter), ne pas utiliser "from a import *" (lister ce que tu importes, ou passer par le module), "definition d'une fonction" => l'exemple parfait du commentaire qui ne sert strictement à rien, utiliser un docstring et indiquer ce que fait la fonction, ne pas utiliser "except:", ça attrape beaucoup trop d'exceptions, pourquoi limiter le nombre de pas à 20?

Code :
  1. xip1=0.5*(xi+C/xi)
  2. return xip1


Peut tout aussi bien être écrit

Code :
  1. return 0.5 * (xi + C/xi)


Code :
  1. xi=1
  2. k=xi


=>

Code :
  1. k = xi = 1
 

Finalement, c'est probablement le genre de calculs qui pourraient être exprimés de manière intéressante avec un générateur.


Message édité par masklinn le 04-10-2009 à 10:11:11

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Python

  Problème avec les boucles

 

Sujets relatifs
probleme installation de forum sur freeProbleme de Div et evenement (js)
Probleme fopenProblème dans ma boucle
Problème grosse requête PHP ![PHP] Problème de validation de schéma XSD
Problème requête select avec double résultatsProblème de création de boucles
[RESOLU]PHP et MySQL problème avec des boucles!![PHP] Problème dans une imbrication de boucles for
Plus de sujets relatifs à : Problème avec les boucles


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR