Exercice python (débutant)
Répondre à la discussion
Affichage des résultats 1 à 9 sur 9

Exercice python (débutant)



  1. #1
    JohannLiebert

    Exercice python (débutant)


    ------

    Bonjour,
    J'aurais besoin d'une aide concernant l'exercice suivant. La consigne demande de trier une liste en fonction de la durabilité, à une exception près : si la durabilité d'un projet est inférieure d'une unité mais qu'il présente au moins 30% d'intérêt en plus, le projet moins durable doit être conservé. Le soucis c'est que le code que j'ai fais répond à moitié à l'exeption. Merci d'avance.

    Code:
    def on_sait_jamais(tuple1, tuple2):
        if tuple1[1] + 1 == tuple2[1]:
            if tuple2[2] > tuple1[2] + 0.30 * tuple1[2]:
                return True
            else :
                return False
        else:
            return False
    
    
    def my_sort ( liste ) :
        for j in range (len(liste)) :
            mini = j
            for i in range ( j, len(liste)) :
                if liste[i][1] < liste[mini][1] :
                    if on_sait_jamais (liste[i], liste[mini]) is True:
                        mini = mini
                    else :
                        mini = i
    
    
                if liste[i][1] == liste[mini][1] and liste[i][2] > liste[mini][2] :
                    mini = i
    
    
            liste[j], liste[mini] = liste[mini], liste [j]
        return liste
    
    
    
    
    projets = [
           ('BlueBees', 1, 0.04),
           ('Aerospace', 3, 0.02),
           ('CacaoForLife', 2, 0.1),
           ('ChicPen', 2, 0.05),
           ('PetrolForLife', 4, 0.35)
    ]
    print(my_sort(projets))

    -----
    Images attachées Images attachées  
    Dernière modification par JohannLiebert ; 17/12/2023 à 17h12.

  2. #2
    umfred

    Re : Exercice python (débutant)

    moi je ferais 2 tris successifs, le 1er tri par durabilité puis intérêts, le 2nd pour gérer l'exception (on saura déjà que la durabilité est dans l'ordre croissant, plus facile pour les comparer un à un pour déterminer l'écart de durabilité)

  3. #3
    pm42

    Re : Exercice python (débutant)

    Citation Envoyé par umfred Voir le message
    moi je ferais 2 tris successifs, le 1er tri par durabilité puis intérêts, le 2nd pour gérer l'exception (on saura déjà que la durabilité est dans l'ordre croissant, plus facile pour les comparer un à un pour déterminer l'écart de durabilité)
    On peut aussi utiliser la fonction sorted en lui passant une fonction de comparaison avec l'argument key=
    C'est cette fonction qui va implémenter la logique de comparaison qui est assez simple surtout si on la code dans le bon sens :
    - si le rendement d'un des 2 projets est plus grand de 30% ou plus, il est lui même plus grand
    - si 2 projets ont le même classement, on compare par rendement
    - sinon, on compare les classements

  4. #4
    MissJenny

    Re : Exercice python (débutant)

    je ne sais pas si c'est possible en python, mais par exemple sous R on pourrait définir une "classe" projet et ensuite ajouter des "méthodes" pour les fonctions < , <=, == etc adaptées à la classe projet. Ca permet d'utiliser ensuite une fonction de tri générique.

  5. A voir en vidéo sur Futura
  6. #5
    pm42

    Re : Exercice python (débutant)

    Citation Envoyé par MissJenny Voir le message
    je ne sais pas si c'est possible en python, mais par exemple sous R on pourrait définir une "classe" projet et ensuite ajouter des "méthodes" pour les fonctions < , <=, == etc adaptées à la classe projet. Ca permet d'utiliser ensuite une fonction de tri générique.
    Il suffisait de lire l'énoncé qui demande d'utiliser des tuples et pas des classes. Et éventuellement ma réponse.

    On peut également noter que définir de telles fonctions dans une classe est parfois utile mais globalement, on préfère passer une fonction de comparaison quelconque à l'algorithme de tri.

    Si on a une classe qui contient différents attributs comme c'est le cas ici et qu'on veut trier suivant un attribut ou un autre ou une combinaison d'attributs, c'est la façon simple et flexible de le faire.
    Définir les méthodes de comparaison dans la classe suppose qu'on va toujours trier sur les mêmes critères.

  7. #6
    vgondr98

    Re : Exercice python (débutant)

    Code:
    def on_sait_jamais(tuple1, tuple2):
        if tuple1[1] + 1 == tuple2[1]:
            if tuple2[2] > tuple1[2] + 0.30 * tuple1[2]:
                return True
            else :
                return False
        else:
            return False
    Dans ta fonction de comparaison, il me semble qu'il manque le else if tuple1[2] + 1 == tuple2[1]:

  8. #7
    vgondr98

    Re : Exercice python (débutant)

    Sinon, si c'est comme en javascript, la fonction de comparaison doit retourner un entier negatif, un entier positif ou 0 en cas d'égalité.
    Est-ce bien le cas ?

  9. #8
    JohannLiebert

    Re : Exercice python (débutant)

    Je viens de faire comme tu (umfred) as dis et ça a marché ! Merci à tous d'avoir pris le temps de me répondre. voici le code que j'ai fait :
    Code:
    def my_sort ( liste ) :
        for j in range (len(liste)) :
            mini = j
            for i in range ( j, len(liste)) :
                if liste[i][1] < liste[mini][1] :
                    mini = i
                if liste[i][1] == liste[mini][1] and liste[i][2] > liste[mini][2] :
                    mini = i
    
    
            liste[j], liste[mini] = liste[mini], liste [j]
    
        for k in range(len(liste)) :
            minin = k
            for u in range(k, len(liste)) :
                if liste[minin][1] + 1 == liste[u][1] :
                    if liste[minin][2] * 1.3 < liste[u][2] :
                        minin = u
            liste[minin], liste[k] = liste[k], liste[minin]
        return liste

  10. #9
    umfred

    Re : Exercice python (débutant)

    Le 1er tri, je sais qu'on peut le faire avec sorted() (ou list.stort()) et probablement le 2nd aussi comme l'indique pm42 (mais je ne me suis pas penché sur le problème).
    Après, comme il s'agit d'un exercice, voir les méthodes qui ont été utilisés auparavant (même si ça n'empêche pas d'aller chercher d'autres méthodes hors cours/tp, par exemple dans la doc officielle)

Discussions similaires

  1. Python débutant
    Par JohannLiebert dans le forum Programmation et langages, Algorithmique
    Réponses: 13
    Dernier message: 10/11/2023, 20h39
  2. Débutant en Python: la boucle For
    Par Jon83 dans le forum Programmation et langages, Algorithmique
    Réponses: 3
    Dernier message: 13/09/2022, 16h16
  3. debutant sur Python
    Par invite97b2fcf1 dans le forum Programmation et langages, Algorithmique
    Réponses: 2
    Dernier message: 30/12/2016, 11h35
  4. Python (débutant)
    Par invitee0960580 dans le forum Programmation et langages, Algorithmique
    Réponses: 2
    Dernier message: 06/12/2012, 14h28
  5. Python débutant
    Par invitee0960580 dans le forum Programmation et langages, Algorithmique
    Réponses: 3
    Dernier message: 20/11/2012, 14h19