Partage
  • Partager sur Facebook
  • Partager sur Twitter

Nombre d'animaux à 4 pattes ou à 2 pattes

Sujet résolu
    14 février 2016 à 6:37:01

    Bonjour, j'ai besoin de votre aide svp. Connaissant le nombre de têtes et de pattes des animaux d'une ferme (poulets et chiens), il faut calculer et retourner le nombre de poulets et de chiens dans une liste. Par exemple, si les deux paramètres de la fonction sont (5, 12) c'est-à-dire 5 têtes et 12 pattes, l'output doit être sous la forme d'une liste [4, 1]. Mais si le calcul est impossible, par exemple avec (7, 12), la fonction doit retourner None.

    J'ai déterminé que : chickens = 2*heads - legs/2

    et que : dogs = legs/2 - heads.

    J'ai pu écrire ce script simple mais ce n'est pas le travail demandé. Je sèche pour écrire la fonction, un peu d'aide serait la bienvenue... Merci par avance.

    heads = 5
    legs = 12
    print(int(2*heads-legs/2), "chickens,",int(legs/2-heads), "dogs")

    -
    Edité par Anpiet 14 février 2016 à 6:42:25

    • Partager sur Facebook
    • Partager sur Twitter
      14 février 2016 à 9:05:32

      Pour la structure de la fonction, ça se passe comme ça :

      def fonction(heads, legs):
          resultat_1 = # calculs
          resultat_2 = # calculs
          return [resultat_1, resultat_2]  #la fonction renvoie une liste avec les deux résultats (énoncé)
      
      heads = 5
      legs = 12
      nb_animaux = fonction(heads, legs)   #appel de la fonction
      #donc nb_animaux est une liste
      #et pour utiliser le resultat de la fonction : nb_animaux[0] et nb_animaux[1] 

      c'est vrai qu'il y a plusieurs conditions à vérifier :

          - 2*heads <= legs (au moins 2 pattes par tête)
          - legs est pair
          -  (peut être d'autres conditions)

      Pour les tester, le mieux est d'introduire les tests (if .... (elif) ... else) dans la fonction : elle retournera la liste de 2 éléments si tout va bien, ou None s'il y a une erreur

      Et je pense qu'il vaut mieux calculer ne nombre de chiens en premier (car ils ont plus de pattes):
      ex : si heads = 2 et legs = 6 (un chien et un poulet) : 
         chiens en premier :
             1 chien -> heads diminué de 1 et legs diminué de 4. On a a present heads = 1 et legs = 2
             1 poulet -> heads diminué de 1 et legs diminué de 2. On a a present heads = 0 et legs = 0   -> fini

         mais si c'est les poulets en premier :
             1 poulet -> heads diminué de 1 et legs diminué de 2. On a a present heads =1 et legs = 4
             1 poulet  (il y a encore suffisamment le pattes et têtespour un poulet)  -> heads diminué de 1 et legs diminué de 2. On a à présent heads =0 et legs = 2 : bloqué

      -
      Edité par bnwp 14 février 2016 à 9:06:23

      • Partager sur Facebook
      • Partager sur Twitter
        14 février 2016 à 9:09:39

        Et autre remarque : il faut calculer le nombre de poulets ET de chiens, pas l'un ou l'autre (les chiens et poulets ne se partagent pas les têtes et pattes !)
        Donc une fois que tu as calculé le nb de chiens,  pense à retirer nb_chiens à heads et nb_chiens*4 à legs, sinon tu utilises 2 fois les données du problème
        • Partager sur Facebook
        • Partager sur Twitter
          14 février 2016 à 20:33:55

          Merci beaucoup pour ton aide, bnwp. Grâce à toi, j'ai pu (après beaucoup d'essais infructueux...) finaliser mon programme qui me donne satisfaction. Le voici, en te souhaitant une bonne journée :

          def number_of_animals(heads, legs):
              if legs%2==0 and 2*heads <= legs:
                  chickens = 2*heads - legs/2
                  dogs = heads - chickens  
                  return [int(chickens), int(dogs)]         
              else:
                  return None 



          • Partager sur Facebook
          • Partager sur Twitter

          Nombre d'animaux à 4 pattes ou à 2 pattes

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown