Programmation python

Programmation python - Python - Programmation

Marsh Posté le 12-10-2009 à 20:19:26    

Bonjour,
 
j'aurais besoin d'aide pour une programmation en python, je viens de commencer donc je rame un peu :)
 
Voici l'énoncé :
a,b,c trois longueurs à saisir. Determinez si elle permettent de construire un triangle. Si oui, precisez le type de triangle.
 
Voilà ce que j'ai fait, ça me paraît un peu compliqué et en plus ça ne marche pas, j'ai beau chercher le problème je ne le trouve pas!  
 
from math import *
 
a=raw_input(" dimension du côté BC: " )
b=raw_input(" dimension du côté AC: " )
c=raw_input(" dimension du côté AB: " )
a=float(a)
b=float(b)
c=float(c)
 
x1=asin(a/c)
x2=asin(b/c)
x3=atan(c/b)
 
x=x1+x2+x3
 
if x==pi:
    if x1==(pi/2) or x2==(pi/2) or x3==(pi/2):
        print " ABC est un triangle rectangle"
    elif x1==x2 or x2==x3 or x1==x3:
        print "ABC est un triangle isocèle"
    elif x1==x2 and x2==x3 and x3==(pi/3):
        print "ABC est un triangle équilatéral"
    else:
        print "ABC est un triangle quelconque"
else:
    print "ABC n'est pas un triangle"

Reply

Marsh Posté le 12-10-2009 à 20:19:26   

Reply

Marsh Posté le 13-10-2009 à 10:45:43    

Bonjour, quelques remarques sur ton programme :
(0) il fonctionne bien mais...
(1) sur Hardware.fr utilise les balises de code comme je le fais un peu plus loin dans ce message.
(2) ajoute la ligne  

Code :
  1. #  -*- coding: utf-8 -*-


au tout début de ton code, sinon tu auras un problème avec les accents de ton texte
(3) n'utilise pas  

Code :
  1. from math import *


ça paraît plus simple mais en réalité c'est source d'erreurs, pour plus tard, quand ton code aura grossi.
 
(4) à la place de :

Code :
  1. a=float(a)
  2. b=float(b)
  3. c=float(c)


tu peux aussi écrire :

Code :
  1. a,b,c = float(a), float(b), float(c)


 
Bonne journée.

Message cité 1 fois
Message édité par suizokukan le 13-10-2009 à 10:47:15

---------------
rule #1 : trust the python
Reply

Marsh Posté le 13-10-2009 à 10:45:59    

(erreur de ma part)


Message édité par suizokukan le 13-10-2009 à 10:46:24
Reply

Marsh Posté le 13-10-2009 à 12:08:33    

suizokukan a écrit :

Bonjour, quelques remarques sur ton programme :
(0) il fonctionne bien mais...


Pas nécessairement, et ça dépend potentiellement de la plateforme: il fait des égalités strictes sur des flottants :/


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

Marsh Posté le 13-10-2009 à 15:51:38    

Diable, Masklinn, je ne pensais pas que la comparaison directe de deux types float posait problème. Mais alors que faire ? passer par une bibliothèque plus spécialisée ?

Message cité 1 fois
Message édité par suizokukan le 13-10-2009 à 15:51:58

---------------
rule #1 : trust the python
Reply

Marsh Posté le 13-10-2009 à 16:07:18    

suizokukan a écrit :

Diable, Masklinn, je ne pensais pas que la comparaison directe de deux types float posait problème.


Code :
  1. >>> (0.2 - 0.1) == (0.3 - 0.2)
  2. False


[:dawa]

 

Vas lire le goldberg immédiatement, chenapan :o

suizokukan a écrit :

Mais alors que faire ? passer par une bibliothèque plus spécialisée ?


Il faut utiliser un epsilon (en gros tu détermines une marge d'erreur, tu soustraits les deux nombres à comparer et si le résultat est inférieur à ta marge d'erreur tu considères qu'ils sont égaux).

 

Il y a d'autres stratégies, mais elles imposent des limitations (et potentiellement un impact au niveau des perfs) et ne sont pas nécessairement utilisables selon les cas: faire ses calculs avec des entiers (en ajoutant des puissances de 10 aux valeurs initiales, c'est comme ça que sont faits les calculs monétaires) ou en faisant du fixed-point arithmetics ou du decimal. En python, c'est le rôle du module decimal justement.


Message édité par masklinn le 13-10-2009 à 16:10:07

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

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed