En testant les valeurs 5,1,1 obtenu est CONSTRUCTIBLE au lieu dPAS CONSTRUC

Le
domxav17 offline Hors ligne
Bonjour,
voilà j'ai fais cours second de python
dans laquelle il pose une question suivante:

Si on choisit 3 nombres, il n'est pas toujours possible de construire un triangle ayant pour longueur ces nombres. Par exemple, il est impossible de construire un triangle de côtés de longueurs 1, 1 et 5.

Un triangle est constructible si pour chaque coté, sa longueur est inférieur à la somme des longueurs deux autres cotés.

Le but de cet exercice est de créer un programme qui nous dit si le triangle est constructible ou pas à partir des longueurs qui nous sont données.

Entrée : Trois longueurs a, b et c.

Sortie : Affiche "CONSTRUCTIBLE" si on peut construire un triangle ayant des cotés de ces trois longueurs ou bien ";PAS CONSTRUCTIBLE" sinon. N'oubliez pas les guillemets.
Pour les plus rapides, vous pouvez afficher "PLAT"si le triangle qu'on peut construire est plat.

j'ai écrit mon programme:

def ma_fonction(a,b,c):

ab=a*b
bc=c*c
ac=a*c
if ab<bc+ac and bc<ab+ac and ac<ab+bc:
return ";CONSTRUCTIBLE"
elif a<5 and b<5 and c<5:
return "PLAT";
else:
return "PAS CONSTRUCTIBLE"
print(ma_fonction(5,1,1))

en l’exécutant j'ai une erreur message :
"En testant les valeurs 5,1,1 le résultat obtenu est CONSTRUCTIBLE au lieu de PAS CONSTRUCTIBLE"

quelqu'un peut m'aider s'il vous plaît
  • Partager ce contenu :
Vos réponses
Trier par : date / pertinence
domxav17 offline Hors ligne
Le #26561544
Le mardi 01 Décembre 2020 à 14:14 par domxav17 :
Bonjour,
voilà j'ai fais cours second de python
dans laquelle il pose une question suivante:

Si on choisit 3 nombres, il n'est pas toujours possible de construire un
triangle ayant pour longueur ces nombres. Par exemple, il est impossible de
construire un triangle de côtés de longueurs 1, 1 et 5.

Un triangle est constructible si pour chaque coté, sa longueur est
inférieur à la somme des longueurs deux autres cotés.

Le but de cet exercice est de créer un programme qui nous dit si le
triangle est constructible ou pas à partir des longueurs qui nous sont
données.

Entrée : Trois longueurs a, b et c.

Sortie : Affiche "CONSTRUCTIBLE" si on peut construire un
triangle ayant des cotés de ces trois longueurs ou bien ";PAS
CONSTRUCTIBLE" sinon. N'oubliez pas les guillemets.
Pour les plus rapides, vous pouvez afficher "PLAT"si le triangle
qu'on peut construire est plat.

j'ai écrit mon programme:

def ma_fonction(a,b,c):

ab=a*b
bc=c*c
ac=a*c
if ab<bc+ac and bc<ab+ac and ac<ab+bc:
return ";CONSTRUCTIBLE"
elif a<5 and b<5 and c<5:
return "PLAT";
else:
return "PAS CONSTRUCTIBLE"
print(ma_fonction(5,1,1))

en l’exécutant j'ai une erreur message :
"En testant les valeurs 5,1,1 le résultat obtenu est CONSTRUCTIBLE
au lieu de PAS CONSTRUCTIBLE"

quelqu'un peut m'aider s'il vous plaît


j'ai corrigé un peu mon programme:
def ma_fonction(a, b, c):

if a < b+c and b < a+c and c < a+b:
return "CONSTRUCTIBLE"
elif a < 1 and b < 1 and c < 1:
return "PLAT"
else:
return "PAS CONSTRUCTIBLE"
print(ma_fonction(2, 1, 1))
maintenant j'ai erreur suivante:
"En testant les valeurs 2,1,1 le résultat obtenu est PAS CONSTRUCTIBLE au lieu de PLAT"
Pierre Maurette
Le #26561560
domxav17 :
Le mardi 01 Décembre 2020 Í  14:14 par domxav17 :
Bonjour,
voilÍ  j'ai fais cours second de python
dans laquelle il pose une question suivante:
Si on choisit 3 nombres, il n'est pas toujours possible de construire un
triangle ayant pour longueur ces nombres. Par exemple, il est impossible de
construire un triangle de cÍ´tés de longueurs 1, 1 et 5.
Un triangle est constructible si pour chaque coté, sa longueur est
inférieur Í  la somme des longueurs deux autres cotés.
Le but de cet exercice est de créer un programme qui nous dit si le
triangle est constructible ou pas Í  partir des longueurs qui nous sont
données.
Entrée : Trois longueurs a, b et c.
Sortie : Affiche "CONSTRUCTIBLE" si on peut construire un
triangle ayant des cotés de ces trois longueurs ou bien ";PAS
CONSTRUCTIBLE" sinon. N'oubliez pas les guillemets.
Pour les plus rapides, vous pouvez afficher "PLAT"si le triangle
qu'on peut construire est plat.
j'ai écrit mon programme:
def ma_fonction(a,b,c):
ab=a*b
bc=c*c
ac=a*c
if ab<bc+ac and bc<ab+ac and ac<ab+bc:
return ";CONSTRUCTIBLE"
elif a<5 and b<5 and c<5:
return "PLAT";
else:
return "PAS CONSTRUCTIBLE"
print(ma_fonction(5,1,1))
en l’exécutant j'ai une erreur message :
"En testant les valeurs 5,1,1 le résultat obtenu est CONSTRUCTIBLE
au lieu de PAS CONSTRUCTIBLE"
quelqu'un peut m'aider s'il vous plaͮt

j'ai corrigé un peu mon programme:
def ma_fonction(a, b, c):
if a < b+c and b < a+c and c < a+b:
return "CONSTRUCTIBLE"
elif a < 1 and b < 1 and c < 1:
return "PLAT"
else:
return "PAS CONSTRUCTIBLE"
print(ma_fonction(2, 1, 1))
maintenant j'ai erreur suivante:
"En testant les valeurs 2,1,1 le résultat obtenu est PAS CONSTRUCTIBLE au
lieu de PLAT"


Pour juste que ça fonctionne:
def ma_fonction(a, b, c):
if a < b+c and b < a+c and c < a+b:
return "CONSTRUCTIBLE"
elif a == b+c or b == a+c or c == a+b:
return "PLAT"
else:
return "PAS CONSTRUCTIBLE"
En relisant l'énoncé:
def ma_fonction(a, b, c):
if a <= b+c and b <= a+c and c <= a+b:
if a == b + c or b == a + c or c == a + b:
return "CONSTRUCTIBLE PLAT"
else:
return "CONSTRUCTIBLE"
return "PAS CONSTRUCTIBLE"
for testtriplet in ((5,1,1), (2,1,1), (1,1,1)):
print(ma_fonction(*testtriplet))
--
Pierre Maurette
Dominique
Le #26561613
Le 01/12/2020 Í  14:14, domxav17 a écrit :
Bonjour,
quelqu'un peut m'aider s'il vous plaͮt

Bonjour,
VoilÍ  une solution qui marche :
def ma_fonction(t):
if t[0]+t[1]>t[2] and t[1]+t[2]>t[0] and t[0]+t[2]>t[1]:
return 'Constructible'
elif t[0]*t[1]*t[2]==0:
return 'PLAT'
else:
return 'PAS CONSTRUCTIBLE'
t=eval(input())
print(ma_fonction(t))
--
Dominique
Courriel : dominique point sextant ate orange en France
Esto quod es
Dominique
Le #26561612
Le 01/12/2020 Í  14:48, domxav17 a écrit :
maintenant j'ai erreur suivante:
"En testant les valeurs 2,1,1 le résultat obtenu est PAS CONSTRUCTIBLE au lieu
de PLAT"

Pourquoi un triangle qui aurait 2 cÍ´tés=1 serait-il plat ? Pour moi, il
est plat dès lors qu'un seul de ses trois cÍ´tés est =0.
--
Dominique
Courriel : dominique point sextant ate orange en France
Esto quod es
Benoit Izac
Le #26561621
Bonjour,
Le 02/12/2020 Í  05:58, Dominique a écrit dans le message
def ma_fonction(t):
if t[0]+t[1]>t[2] and t[1]+t[2]>t[0] and t[0]+t[2]>t[1]:
return 'Constructible'
elif t[0]*t[1]*t[2]==0:
return 'PLAT'
else:
return 'PAS CONSTRUCTIBLE'
t=eval(input())

C'est un peu tordu car il faut savoir que l'on attend une entrée de la
forme «Â [a, b, c] » (ou n'importe quel objet qui implémente
«Â __getitem__() » pour être plus précis)
print(ma_fonction(t))
print(ma_fonction([2, 1, 1]))

PAS CONSTRUCTIBLE <= faux
Un triangle est plat si la somme des longueurs de deux cÍ´tés est égale
Í  la longueur du troisième cÍ´té ; par exemple :
A B C A C A BC
+---+---+ ou +-------+ ou +-----++
B
Ma version :
def triangle(a, b, c):
for cote in (a, b, c):
opposes = a + b + c - cote
if opposes < cote: return 'PAS CONSTRUCTIBLE'
if opposes == cote: return 'CONSTRUCTIBLE PLAT'
return 'CONSTRUCTIBLE'
--
Benoit Izac
Pierre Maurette
Le #26561623
Benoit Izac :
Bonjour,
Le 02/12/2020 Í  05:58, Dominique a écrit dans le message
def ma_fonction(t):
if t[0]+t[1]>t[2] and t[1]+t[2]>t[0] and t[0]+t[2]>t[1]:
return 'Constructible'
elif t[0]*t[1]*t[2]==0:
return 'PLAT'
else:
return 'PAS CONSTRUCTIBLE'
t=eval(input())

C'est un peu tordu car il faut savoir que l'on attend une entrée de la
forme «Â [a, b, c] » (ou n'importe quel objet qui implémente
«Â __getitem__() » pour être plus précis)
print(ma_fonction(t))

print(ma_fonction([2, 1, 1]))

PAS CONSTRUCTIBLE <= faux
Un triangle est plat si la somme des longueurs de deux cÍ´tés est égale
Í  la longueur du troisième cÍ´té ; par exemple :
A B C A C A BC
+---+---+ ou +-------+ ou +-----++
B
Ma version :
def triangle(a, b, c):
for cote in (a, b, c):
opposes = a + b + c - cote
if opposes < cote: return 'PAS CONSTRUCTIBLE'
if opposes == cote: return 'CONSTRUCTIBLE PLAT'
return 'CONSTRUCTIBLE'

A partir de ce point, on peut faire un peu d'analyse géométrique. Le
but est de ne pas itérer. Dire "il existe un coté plus long que la
somme des deux autres" est équivalent Í  dire "le coté le plus long est
plus long que la somme des deux autres". Ça donne howIsTriangle1. On
peut très facilement trier, ça donne howIsTriangle2.
<code>
JEU2TEST = ((1,1,5), (1,2,1), (1,1,1))
def howIsTriangle1(sidelengths):
maxi, somme = max(sidelengths) << 1 , sum(sidelengths)
return (maxi <= somme, maxi > somme, maxi == somme)
def howIsTriangle2(sidelengths):
maxi, somme = sorted(sidelengths, reverse=True)[0],
sum(sorted(sidelengths, reverse=True)[1:])
return (maxi <= somme, maxi > somme, maxi == somme)
for sidelengths in JEU2TEST:
for f in (howIsTriangle1, howIsTriangle2):
(isCONSTRUCTIBLE, isINCONSTRUCTIBLE, isPLAT) = f(sidelengths)
print ('Cotés: %d, %d, %dn Le triangle est :n CONSTRUCTIBLE:
%sn INCONSTRUCTIBLE: %sn PLAT: %s' %
(sidelengths + (['Non', 'Oui'][isCONSTRUCTIBLE],
['Non', 'Oui'][isINCONSTRUCTIBLE],
['Non', 'Oui'][isPLAT])))
</code>
--
Pierre Maurette
Dominique
Le #26561710
Le 02/12/2020 Í  08:58, Pierre Maurette a écrit :
C'est un peu tordu car il faut savoir que l'on attend une entrée de la
forme «Â [a, b, c] » (ou n'importe quel objet qui implémente
«Â __getitem__() » pour être plus précis)
print(ma_fonction(t))

print(ma_fonction([2, 1, 1]))

PAS CONSTRUCTIBLE  <= faux
Un triangle est plat si la somme des longueurs de deux cÍ´tés est égale
Í  la longueur du troisième cÍ´té ; par exemple :
  A   B   C    A       C    A     BC
  +---+---+ ou +-------+ ou +-----++
               B
Ma version :
def triangle(a, b, c):
    for cote in (a, b, c):
        opposes = a + b + c - cote
        if opposes < cote:  return 'PAS CONSTRUCTIBLE'
        if opposes == cote: return 'CONSTRUCTIBLE PLAT'
    return 'CONSTRUCTIBLE'

A partir de ce point, on peut faire un peu d'analyse géométrique. Le but
est de ne pas itérer. Dire "il existe un coté plus long que la somme des
deux autres" est équivalent Í  dire "le coté le plus long est plus long
que la somme des deux autres". Ça donne howIsTriangle1. On peut très
facilement trier, ça donne howIsTriangle2.
<code>
JEU2TEST = ((1,1,5), (1,2,1), (1,1,1))
def howIsTriangle1(sidelengths):
   maxi, somme = max(sidelengths) << 1 , sum(sidelengths)
   return (maxi <= somme, maxi > somme, maxi == somme)
def howIsTriangle2(sidelengths):
   maxi, somme = sorted(sidelengths, reverse=True)[0],
sum(sorted(sidelengths, reverse=True)[1:])
   return (maxi <= somme, maxi > somme, maxi == somme)
for sidelengths in JEU2TEST:
   for f in (howIsTriangle1, howIsTriangle2):
       (isCONSTRUCTIBLE, isINCONSTRUCTIBLE, isPLAT) = f(sidelengths)
       print ('Cotés: %d, %d, %dn Le triangle est :n CONSTRUCTIBLE:
%sn INCONSTRUCTIBLE: %sn PLAT: %s' %
              (sidelengths + (['Non', 'Oui'][isCONSTRUCTIBLE],
               ['Non', 'Oui'][isINCONSTRUCTIBLE],
               ['Non', 'Oui'][isPLAT])))
</code>

Trop compliqué pour moi, au niveau o͹ j'en suis en Python :-)

--
Dominique
Courriel : dominique point sextant ate orange en France
Esto quod es
Dominique
Le #26561712
Le 02/12/2020 Í  08:31, Benoit Izac a écrit :
Bonsoir Benoͮt,
Je débute en Python et je n'ai pas encore abordé la question des classes...
C'est un peu tordu car il faut savoir que l'on attend une entrée de la
forme «Â [a, b, c] » (ou n'importe quel objet qui implémente
«Â __getitem__() » pour être plus précis)
Un triangle est plat si la somme des longueurs de deux cÍ´tés est égale
Í  la longueur du troisième cÍ´té ; par exemple :
A B C A C A BC
+---+---+ ou +-------+ ou +-----++

Exact, tu as parfaitement raison.
Ma version :
def triangle(a, b, c):
for cote in (a, b, c):
opposes = a + b + c - cote
if opposes < cote: return 'PAS CONSTRUCTIBLE'
if opposes == cote: return 'CONSTRUCTIBLE PLAT'
return 'CONSTRUCTIBLE'


Jolie solution, merci.
--
Dominique
Courriel : dominique point sextant ate orange en France
Esto quod es
Poster une réponse
Anonyme