Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > fr.comp.lang.python > #3396

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

From Pierre Maurette <maurette.pierre@free.fr>
Newsgroups fr.comp.lang.python
Subject Re: En testant les valeurs 5,1,1 obtenu est CONSTRUCTIBLE au lieu dPAS CONSTRUC
Date 2020-12-02 08:58 +0100
Organization A noiseless patient Spider
Message-ID <mn.121a7e4c409632ae.79899@free.fr> (permalink)
References <CoqdnTE5mZ1Z3FvCnZ2dnUU798zNnZ2d@giganews.com> <rq76ug$m28$1@gioia.aioe.org> <87mtywr7dr.fsf@izac.org>

Show all headers | View raw


Benoit Izac :
> Bonjour,
>
> Le 02/12/2020 à 05:58, Dominique a écrit dans le message
> <rq76ug$m28$1@gioia.aioe.org> :
>
>> 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, %d\n Le triangle est :\n CONSTRUCTIBLE: 
%s\n INCONSTRUCTIBLE: %s\n PLAT: %s' %
               (sidelengths + (['Non', 'Oui'][isCONSTRUCTIBLE],
                ['Non', 'Oui'][isINCONSTRUCTIBLE],
                ['Non', 'Oui'][isPLAT])))

</code>

-- 
Pierre Maurette

Back to fr.comp.lang.python | Previous | NextPrevious in thread | Next in thread | Find similar


Thread

En testant les valeurs 5,1,1 obtenu est CONSTRUCTIBLE au lieu dPAS CONSTRUC domxav17 <nospam_domxav17@gmail.com.invalid> - 2020-12-01 07:14 -0600
  Re: En testant les valeurs 5,1,1 obtenu est CONSTRUCTIBLE au lieu dPAS CONSTRUC domxav17 <nospam_domxav17@gmail.com.invalid> - 2020-12-01 07:48 -0600
    Re: En testant les valeurs 5,1,1 obtenu est CONSTRUCTIBLE au lieu dPAS CONSTRUC Pierre Maurette <maurette.pierre@free.fr> - 2020-12-01 16:47 +0100
    Re: En testant les valeurs 5,1,1 obtenu est CONSTRUCTIBLE au lieu dPAS CONSTRUC Dominique <zzz@aol.com.invalid> - 2020-12-02 06:01 +0100
  Re: En testant les valeurs 5,1,1 obtenu est CONSTRUCTIBLE au lieu dPAS CONSTRUC Dominique <zzz@aol.com.invalid> - 2020-12-02 05:58 +0100
    Re: En testant les valeurs 5,1,1 obtenu est CONSTRUCTIBLE au lieu dPAS CONSTRUC Benoit Izac <use.reply.to@INVALID.ADDRESS> - 2020-12-02 08:31 +0100
      Re: En testant les valeurs 5,1,1 obtenu est CONSTRUCTIBLE au lieu dPAS CONSTRUC Pierre Maurette <maurette.pierre@free.fr> - 2020-12-02 08:58 +0100
        Re: En testant les valeurs 5,1,1 obtenu est CONSTRUCTIBLE au lieu dPAS CONSTRUC Dominique <zzz@aol.com.invalid> - 2020-12-02 19:17 +0100
      Re: En testant les valeurs 5,1,1 obtenu est CONSTRUCTIBLE au lieu dPAS CONSTRUC Dominique <zzz@aol.com.invalid> - 2020-12-02 19:19 +0100

csiph-web