Les valeurs 1,1,1.4142135623730951 le résultat isocèle au lieu de rec. isocèle

domxav1759 -  
 Utilisateur anonyme -
Bonjour,
En testant les valeurs 1,1,1.4142135623730951 le résultat obtenu est ISOCELE au lieu de RECTANGLE ISOCELE

from math import *

def ma_fonction(a,b,c):
    if a*b==b*c and b*c==a*c and a*c==a*b:
       return "EQUILATERAL"
    elif a*b==b*c or b*c==a*c or a*c==a*b and a*b*a*b+b*c*b*c==a*c*a*c or b*c*b*c+a*c*a*c==a*b*a*b or a*c*a*c+a*b*a*b==b*c*b*c:
        return "ISOCELE"
    else:
        if a*b==b*c or b*c==a*c or a*c==a*b :
            return "ISOCELE"
        elif(a*a==b*b+c*c or b*b==a*a+c*c or c*c==a*a+b*b):
            return "RECTANGLE"
        else:
            return "QUELCONQUE"

print(ma_fonction(1,1,1.4142135623730951))


Veuillez m'aider s'il vous plaît

Configuration: Windows / Firefox 83.0
A voir également:

4 réponses

NHenry Messages postés 15217 Date d'inscription   Statut Modérateur Dernière intervention   363
 
A cause de la condition :
a*b==b*c or b*c==a*c or a*c==a*b
Quand tu as des conditions avec and et or, toujours mettre des parenthèses pour éviter les erreurs de priorités

De plus ton triangle est rectangle et isocèle (2 côtés à 1).
0
Utilisateur anonyme
 
Bonsoir à tous les 2

J’ajoute que tes conditions sont plus compliquées que nécessaire.

Par exemple, la définition d’un triangle équilatéral est que les longueurs des 3 côtés sont égales et toi tu as écrit cette condition
   if a*b==b*c and b*c==a*c and a*c==a*b:

Oui mathématiquement a*b == b*c est égal à a == c, mais pourquoi faire plus de calculs qu’il n’en faut. Ça ralenti l’exécution et surtout ça augmente le risque d’erreurs en codant.

En appliquant cette simplification, la condition se résume à
   if b==c and b==a and c==b:

Maintenant, que c’est plus simple, et plus clair, on s’aperçoit que tu testes 2 fois la même condition à savoir si b est égal à c
Au final
   if b==c and b==a :
est le strict nécessaire pour savoir si ce triangle est équilatéral.

Après avoir réduit tes autres conditions au strict nécessaire, il sera plus simple de voir où mettre des parenthèses pour éviter des problèmes de priorité comme l’a souligné NHenry
0
domxav1759
 
parenthèses à mettre chaque or
ou une pair de parenthèses pour ensemble or comme ceci:


elif ((a*b==b*c) or (b*c==a*c) or (a*c==a*b)) and (a*b*a*b+b*c*b*c==a*c*a*c) or (b*c*b*c+a*c*a*c==a*b*a*b) or (a*c*a*c+a*b*a*b==b*c*b*c):


merci à votre aide
0
domxav1759
 
quel est le formule pour rectangle isocèle
est ce que ce bien ça?
a*a == b*b+c*c or b*b == a*a+c*c or c*c == a*a+b*b:

en l' appliquant ça
il me donne erreur suivant:
le résultat obtenu est ISOCELE au lieu de RECTANGLE ISOCELE


from math import *
def ma_fonction(a, b,c ):

if a == b or b == c or a == c:
return "ISOCELE"
elif a==b==c:
return "EQUILATERAL"
elif c ** 2 == a ** 2 + b ** 2:
return "rectangle"
elif a*a == b*b+c*c or b*b == a*a+c*c or c*c == a*a+b*b: # rectangle isocele
return "rectangle isocèle"
else:
return "QUELCONQUE"


print(ma_fonction(1, 1, 1.4142135623730951))


en l’exécutant dans l’éditeur "pycharme"
il me donne output suivante:
ISOCELE

s'il vous plaît
0
Utilisateur anonyme
 
Bonjour

Pour tes prochains posts, merci de lire attentivement ce petit tuto https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code

Pour ton problème, quand tu as une cascade de if / else if, si plusieurs conditions sont vraies, la quelle est « choisie » par cette cascade?

Par exemple, ma variable est une voiture de marque « truc ».
if vehicule == moto :
    #choix 1
elif vehicule == voiture :
    #choix 2
elif vehicule == voiture and  vehicule.marque == truc :
    #choix 3

Quel choix est fait?
0