IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

aide pour trouver une erreur sur un code basique


Sujet :

Python

  1. #1
    Candidat au Club
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Novembre 2023
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Novembre 2023
    Messages : 5
    Points : 4
    Points
    4
    Par défaut aide pour trouver une erreur sur un code basique
    Bonjour,

    je travaille avec un tableau de joueurs suivant :

    Joueur Enchère moy score forme
    A 10 32
    B 11 43
    C 23 60
    D 1 2
    E 1 0
    F 1 0
    G 5 3
    H 4 2
    I 6 17
    J 3 6
    K 9 4
    L 15 56
    M 16 45

    Je cherche à créer une fonction qui me renvoie les joueurs ayant la meilleure de score tout en respectant mon budget. (je définis dans ma fonction, le nombre de joueurs que je veux sélectionner et mon budget) mais j'ai une erreur :
    TypeError: string indices must be integers, not 'str'
    que je n'arrive pas à régler. Pourriez vous m'aider à solutionner mon problème svp ?

    voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    def mercato3(nb_joueurs, budget_poste):
     
        # Initialiser la liste des joueurs sélectionnés
        selected_joueurs = []
     
        budget_restant = budget_poste
     
        # Parcourir le tableau et ajouter les noms qui entrent dans le budget.
        for joueur in df:
             if joueur["Enchère moy"] <= budget_restant - nb_joueurs - 1 :
                    selected_joueurs.append(joueur)
                    budget_restant -= joueur["Enchère moy"]
                    if len(selected_joueurs) == nb_joueurs:
                        break
     
        return selected_joueurs

  2. #2
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 985
    Points
    30 985
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par bobpaulson Voir le message
    mais j'ai une erreur : TypeError: string indices must be integers, not 'str' que je n'arrive pas à régler.
    Surtout ne nous donnes pas le message en intégralité (contenant donc la ligne ayant provoqué l'erreur ainsi que sa position dans le code plus la pile des appels), ce serait trop facile. On se demande même pourquoi Python s'emmerde à les mettre vu que ça ne t'intéresse visiblement pas. Sans même parler de ton code illisible qui montre que tu n'es pas allé lire les règles
    Donc le message est simple: tu as une chaine, exemple s="Hello World", tu as le droit de demander s[0], s[1], s[2] etc (donc des indices numériques) mais pas d'indice autre (style s["Enchère moy"]).
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Candidat au Club
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Novembre 2023
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Novembre 2023
    Messages : 5
    Points : 4
    Points
    4
    Par défaut reponse
    désolé pour cet oubli...
    voici le code erreur complet :
    ---------------------------------------------------------------------------
    TypeError Traceback (most recent call last)
    Cell In[108], line 1
    ----> 1 mercato3(3,100)

    Cell In[106], line 10, in mercato3(nb_joueurs, budget_poste)
    8 # Parcourir le tableau et ajouter les noms qui entrent dans le budget.
    9 for joueur in df:
    ---> 10 if joueur["Enchère moy"] <= budget_restant - nb_joueurs - 1 :
    11 selected_joueurs.append(joueur)
    12 budget_restant -= joueur["Enchère moy"]

    TypeError: string indices must be integers, not 'str'
    Je vous remercie de m'inviter à relire les règles. Je vois pourtant que la politesse semble être le code de conduite du site, je vous invite à relire votre message qui ne semble pas emprunt de courtoisie et de bienveillance, notions de politesse élémentaires pourtant !

  4. #4
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 985
    Points
    30 985
    Billets dans le blog
    1
    Par défaut
    Hey !!! Tu remarqueras que l'erreur se situe sur la ligne if joueur["Enchère moy"] qui est justement celle de mon exemple. Ca c'est ce qui s'appelle "avoir le nez fin". Va donc voir mon explication à ce propos...

    Citation Envoyé par bobpaulson Voir le message
    Je vous remercie de m'inviter à relire les règles.
    Relire? Pour "re" lire quelque chose encore faut-il l'avoir déjà lu. Moi je t'ai invité à aller les "lire" !!!

    Citation Envoyé par bobpaulson Voir le message
    Je vois pourtant que la politesse semble être le code de conduite du site, je vous invite à relire votre message qui ne semble pas emprunt de courtoisie et de bienveillance, notions de politesse élémentaires pourtant !
    Oui, exactement. La politesse c'est commencer par poster un message complet, un code lisible, surtout en Python où les tabulations sont un élément assez marquant du langage ; et éventuellement réutilisable (ce qui n'est pas le cas ici avec cette variable "df" de for joueur in df qui n'existe pas). Et j'en connais certains qui rajouteraient que la politesse c'est aussi faire un peu marcher son cerveau surtout quand l'erreur est parfaitement expliquée avec la ligne incriminée parfaitement montrée par Python et que c'est un détail expliqué dans tous les tutoriaux de débutants.
    Donc la politesse ça commence par se donner avant de l'exiger en retour.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Membre expérimenté
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    870
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 870
    Points : 1 522
    Points
    1 522
    Billets dans le blog
    4
    Par défaut
    .Bonjour.
    Il manque une méthode appliquée à ton dataframe afin d utiliser le nom d une colonne comme indice. Je n'ai pas le nom de cette méthode en tête et là je suis sur mon tel. Mais en ouvrant un tutoriel sur pandas ou en regardant sa doc, tu retrouvera son nom ...
    #Rien de nouveau sous le soleil, tout est vanité comme courir après le vent!
    Developpement pour Android avec Python3/Kivy/Buildozer

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par bobpaulson Voir le message
    Je cherche à créer une fonction qui me renvoie les joueurs ayant la meilleure de score tout en respectant mon budget.
    Cela suppose sans doute ranger les joueurs en fonction de leur score décroissant puis récupérer un a un (dans cet ordre) tant que çà reste dans le budget.

    Dans votre code on ne sait pas ce qu'est l'objet dfb (si df et un dataframe pandas, for ... in df ne retourne pas la ligne mais son index!) ni comment il est rangé.
    Après çà plante, c'est dommage mais est-il utile de corriger un code qui à priori ne fait pas ce qu'on attend?

    note: on peut vouloir le plus de joueur en prenant ceux qui coûtent le moins cher indépendamment de leur score... ce qui est un autre tri.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Candidat au Club
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Novembre 2023
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Novembre 2023
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Merci Homnidé, je vais regarder la librairie Pandas.

    Merci également wiztricks d'avoir pris le temps de regarder. En fait j'avais effectivement zappé de coller la première cellule qui est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    import pandas as pd
    df = pd.read_excel('essai.xlsx')
    df = df.sort_values(by=['score forme', 'Enchère moy'], ascending=False)
    c'est tout ce que j'ai.
    J'ai l'impression que mon code n'est pas loin de faire ce que je veux... Mais j'ai toujours cette erreur qui me gène. Je suis un tout débutant en python, j'essaie de décrypter les codes erreur, de regarder des tuto ou de lire des articles pour me décoincer... mais dans l'impasse j'ai tenté la solution "entraide".

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par bobpaulson Voir le message
    Je suis un tout débutant en python, j'essaie de décrypter les codes erreur, de regarder des tuto ou de lire des articles pour me décoincer... mais dans l'impasse j'ai tenté la solution "entraide".
    Si vous êtes tout débutant avec Python, vous ne pouvez pas décemment utiliser pandas sans avoir le niveau pour faire cet exercices avec les outils de base du langage que sont liste de listes, sort,...

    Sinon votre soucis est dans le for joueur in df: et la solution est sans doute la réponse à la question de savoir itérer les lignes d'un dataframe... que vous devriez trouver dans votre cours/tuto/internet/...

    note: ça peut se faire de plusieurs façons, reste à savoir laquelle vous avez appris...

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  9. #9
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 985
    Points
    30 985
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Hominidé Voir le message
    Il manque une méthode appliquée à ton dataframe afin d utiliser le nom d une colonne comme indice.
    D'après le message d'erreur, "joueur" n'est pas un dataframe mais une string. Ce n'est pas sur "df" qu'il applique l'indice mais sur "joueur" qui a été itéré à partir de "df"...

    Citation Envoyé par bobpaulson Voir le message
    J'ai l'impression que mon code n'est pas loin de faire ce que je veux...
    Ca dépend de l'algo. Tu prend chaque joueur un après l'autre en enlevant sa valeur du budget. Ainsi si tu as 3 joueurs avec 800€, 700€ et 300€ et un budget de 1000€ tu ne peux prendre que celui à 800. Mais si lui tu ne le prends pas, tu peux alors prendre les deux à 700 et 300. Vaut-il mieux un joueur à 800 ou deux joueurs à 700 et 300 ?

    Citation Envoyé par bobpaulson Voir le message
    Mais j'ai toujours cette erreur qui me gène.
    Si quelqu'un te dit "je n'arrive pas à diviser par 0" et que tu lui dis "normal on ne peut pas" et qu'il revient en disant "j'ai toujours cette erreur de division par 0 qui me gêne" comment tu vas le prendre ?
    Je te dis que tu n'as pas le droit d'utiliser un indice "chaine". Donc soit tu as la politesse de me faire confiance et tu remplaces joueur["Enchère moy"] par joueur[x] (x devant être impérativement un nombre entier situé entre 0 et "taille de joueur"), soit tu continues à vouloir faire entrer des carrés dans des trous ronds et ça continuera à ne pas rentrer.
    Ensuite tu peux aussi te demander ce que contient "joueur"...

    Citation Envoyé par bobpaulson Voir le message
    Je suis un tout débutant en python, j'essaie de décrypter les codes erreur, de regarder des tuto ou de lire des articles pour me décoincer...
    Et tu as tenté un print(joueur) qui est quand-même la base du debug ??? Tu peux aussi rajouter print(type(joueur)) pour avoir une meilleure vision...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  10. #10
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Je te dis que tu n'as pas le droit d'utiliser un indice "chaine". Donc soit tu as la politesse de me faire confiance et tu remplaces joueur["Enchère moy"] par joueur[x] (x devant être impérativement un nombre entier situé entre 0 et "taille de joueur")
    On itère sur les lignes d'un dataframe pandas. De ce fait, on ne peut pas vous faire confiance car ignorant ce point, vous dites juste des bêtises.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  11. #11
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 985
    Points
    30 985
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    On itère sur les lignes d'un dataframe pandas.
    Ah oui? Alors pourquoi le message d'erreur commence par TypeError: string indices must be... qui signifie clairement qu'il cherche à indicer une string et qu'on trouvera le même message d'erreur en tapant simplement print("Hello"["xxx"]) dans Python ???

    Citation Envoyé par wiztricks Voir le message
    De ce fait, on ne peut pas vous faire confiance car ignorant ce point, vous dites juste des bêtises.
    Vérifions donc cette "assertion" de notre "expert"...
    • créer un fichier "essai.xlsx" contenant les données montrées dans le premier post...
      A 10 32
      B 11 43
      C 23 60
      D 1 2
      E 1 0
      F 1 0
      G 5 3
      H 4 2
      I 6 17
      J 3 6
      K 9 4
      L 15 56
      M 16 45
      ... et téléchargeable ci-dessous
    • taper le (petit) code suivant
      Code python : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      >>> import pandas as pd
      >>> df=pd.read_excel("essai.xlsx")
      >>> print(df)
          A  10  32
      0   B  11  43
      1   C  23  60
      2   D   1   2
      3   E   1   0
      4   F   1   0
      5   G   5   3
      6   H   4   2
      7   I   6  17
      8   J   3   6
      9   K   9   4
      10  L  15  56
      11  M  16  45
      >>> for joueur in df: print(joueur, type(joueur))
      ... 
      A <class 'str'>
      10 <class 'int'>
      32 <class 'int'>
      >>> df=df.sort_values(by=['A'])
      >>> for joueur in df: print(joueur, type(joueur))
      ... 
      A <class 'str'>
      10 <class 'int'>
      32 <class 'int'>

    Et voilà. A <class 'str'>. Je dis ça je dis rien
    Fichiers attachés Fichiers attachés
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  12. #12
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Et voilà. A <class 'str'>. Je dis ça je dis rien
    Il vaudrait mieux en effet.
    Si les colonnes ont des headers comme mentionné:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    >>> df.columns = 'Joueur' ,'Enchère moy',  'score forme'
    on pourra écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    >>> for i, row in df.iterrows():
    ...     print(row['Enchère moy'])
    ...
    11
    23
    1
    ...
    et voilà.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  13. #13
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 985
    Points
    30 985
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Si les colonnes ont des headers comme mentionné:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    >>> df.columns = 'Joueur' ,'Enchère moy',  'score forme'
    Ah? C'est juste les headers qui te manquent ? C'est vrai qu'ils m'ont échappé quand j'ai copié son exemple mais je n'ai pas pensé que cela porterait à conséquence.
    Mais si ça te fait plaisir...
    Nom : essai.png
Affichages : 101
Taille : 50,3 Ko
    Résultat inchangé (ou presque)...
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>> for joueur in df: print(joueur, type(joueur))
    ... 
    Joueur <class 'str'>
    Enchère moy <class 'str'>
    score forme <class 'str'>

    Citation Envoyé par wiztricks Voir le message
    on pourra écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>> for i, row in df.iterrows():
    ...     print(row['Enchère moy'])
    Oh c'est quoi cette mauvaise foi évidente ? On "pourra" peut-être... mais ce n'est pas ce qu'il a écrit !!! Relis mes réponses si tu as du mal à additionner deux et deux. J'ai juste écrit que en l'état des choses, "joueur" est (du verbe "être" signifiant "état existant") une string et donc qu'il ne peut pas lui mettre un indice autre que numérique. Et c'est cette affirmation que tu as qualifié gratuitement de "bêtises" et que je défends. Après si on change joueur on pourra lui appliquer n'importe quelle méthode associée à ce changement mais avec des "si" on fait ce que l'on veut.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  14. #14
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Oh c'est quoi cette mauvaise foi évidente ? On "pourra" peut-être... mais ce n'est pas ce qu'il a écrit !!! Relis mes réponses
    J'essaie juste de prendre en compte ce que raconte le PO:
    je travaille avec un tableau de joueurs suivant :

    Joueur Enchère moy score forme
    A 10 32
    B 11 43
    C 23 60
    D 1 2
    E 1 0
    qui fait que le code initial:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        for joueur in df:
             if joueur["Enchère moy"] <= budget_restant - nb_joueurs - 1 :
                      ...
    note: c'est ce que le PO a écrit en quoi suis je de mauvaise foi? Il suffit de lire et d'essayer de comprendre.

    code qui marchera tout seul en écrivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        for joueur in df.iterrows():
             if joueur["Enchère moy"] <= budget_restant - nb_joueurs - 1 :
                      ...
    Ce n'est pas si compliqué...

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  15. #15
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 985
    Points
    30 985
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    note: c'est ce que le PO a écrit en quoi suis je de mauvaise foi?
    Tu es de mauvause foi quand je dis au PO que la variable "joueur" est une string et qu'on ne peut pas lui indicer autre chose qu'un int et que tu rétorques "vous racontez des bêtises" parce que ce n'est pas le cas : en l'état des choses, la variable "joueur" est une string et à une string on ne peut pas lui indicer autre chose qu'un int.
    Ensuite si on change le code pour qu'elle soit autre chose alors elle sera autre chose et ce sera une autre histoire qui aura lieu dans le futur et là mon discours sera tout autre. Mais tu ne peux pas dénigrer une affirmation basée sur l'état présent de la variable en te référant à ce qu'elle aurait pu être (note bien le conditionnel) si le code avait été différent. C'est ça la mauvaise foi.

    Citation Envoyé par wiztricks Voir le message
    Il suffit de lire et d'essayer de comprendre.
    Ben justement, c'est ce que je lis et comprends du message d'erreur (ce dont j'ai fait déjà deux fois la remarque et que tu oblitères soigneusement)

    Citation Envoyé par wiztricks Voir le message
    Ce n'est pas si compliqué...
    Exactement !!!
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  16. #16
    Candidat au Club
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Novembre 2023
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Novembre 2023
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Bon déjà, un grand merci de regarder mon sujet avec attention même si je ne souhaitais pas que cela crée de l'animosité. En tout cas, c'est sympa de m'aider.

    Quelques commentaires :


    Citation Envoyé par Sve@r Voir le message
    Je te dis que tu n'as pas le droit d'utiliser un indice "chaine". Donc soit tu as la politesse de me faire confiance et tu remplaces joueur["Enchère moy"] par joueur[x] (x devant être impérativement un nombre entier situé entre 0 et "taille de joueur"), soit tu continues à vouloir faire entrer des carrés dans des trous ronds et ça continuera à ne pas rentrer.
    C'est pas que je ne veux pas, c'est simplement que je ne comprends pas de quelle manière changer mon code en mettant joueur[x]... peut-être que c'est super simple mais vraiment je ne vois pas comment faire...

    Citation Envoyé par Sve@r Voir le message
    Ca dépend de l'algo. Tu prend chaque joueur un après l'autre en enlevant sa valeur du budget. Ainsi si tu as 3 joueurs avec 800€, 700€ et 300€ et un budget de 1000€ tu ne peux prendre que celui à 800. Mais si lui tu ne le prends pas, tu peux alors prendre les deux à 700 et 300. Vaut-il mieux un joueur à 800 ou deux joueurs à 700 et 300 ?
    En fait mon but est qu'il aille me cherche le joueur avec le meilleur score et respectant le budget et ensuite 2 autres joueurs même nuls avec même une valeur à 1 si besoin. J'ajouterai ensuite un argument à ma fonction pour faire un choix plus homogène comme vous le suggérez. Mais dans un premier temps je veux récupérer la star des joueurs en fonction du budget.

    @wiztricks, un grand merci pour la méthode ITERROWS puisque grâce à cela, je renvoie enfin quelque chose qui s'approche de ma solution souhaitée.
    j'ai donc ajouté :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     for i, joueur in df.iterrows():
    , même si je ne comprends pas bien le "i", en tapant ensuite mercato(3, 20), j'obtiens :
    Nom : Capture d'écran 2023-11-14 001609.png
Affichages : 97
Taille : 8,0 Ko

    Il y a donc un bon progrès même si en testant avec un DataFrame plus grand (cf ci dessous) mon but est de respecter le nombre de 3 Joueurs (ou sinon renvoyer "impossible". Dans mon cas je voulais qu'il me renvoie un dernier joueur à 1 puisque ca respectait le budget.
    Je vais essayer d'ajouter des conditions pour donner plus d'instructions à la fonction.

    Encore merci.
    Si vous avez des précisions ou d'autres idées, je reste preneur :-)

    Joueur Enchère moy score forme
    A 10 32
    B 11 43
    C 23 60
    D 1 2
    E 1 0
    F 1 0
    G 5 3
    H 4 2
    I 6 17
    J 3 6
    K 9 4
    L 15 56
    M 16 45
    N 19 34
    O 20 12
    P 18 56
    Q 15 43
    R 3 6
    S 2 29
    T 1 0
    U 2 9
    V 5 6
    W 3 10
    X 14 18
    Y 15 26
    Z 17 48

  17. #17
    Membre chevronné
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 608
    Points : 2 072
    Points
    2 072
    Par défaut
    Je ne veux pas être méchant, mais les dataframes sont qqchose d'un peu pointu.
    Si vous débutez, je pense que ce n'est pas la bonne méthode.
    Certes, avec de l'aide et de la bonne volonté des uns et des autres, vous aurez un truc qui fonctionne, mais au final, vous n'aurez pas progressé et vous en serez au même point au prochain projet.
    Commencez par des listes, des listes de listes, de print(machin), print(type(machin)) et vous allez mieux comprendre ce qui se passe.
    Pas d'aide par mp.

  18. #18
    Candidat au Club
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Novembre 2023
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Novembre 2023
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Bonjour,
    Je ne me suis pas lancé dans les data frame et pandas sans avoir vu les notions de base : liste, liste de liste, compréhension de liste, boucles, qq fonctions de base... j'ai bien avancé maintenant sur les data frames, le préprocessing mais j'essaie de me lancer des challenges pour continuer de progresser.

  19. #19
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par bobpaulson Voir le message
    j'ai donc ajouté :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     for i, joueur in df.iterrows():
    , même si je ne comprends pas bien le "i", en tapant ensuite mercato(3, 20)
    Le i va et vient suivant que le dataframe est avec ou sans index. Avec l'index .iterrows() remonte index et ligne, sans l'index, ça remonte juste la ligne.

    C'est la raison pour laquelle il est difficile de travailler sur un sujet de dataframe sans pouvoir construire ce dataframe (il y a plein de façons) et "tester" ce qu'on cherche à faire avec.

    Citation Envoyé par Sve@r Voir le message
    Tu es de mauvause foi quand je dis au PO que la variable "joueur" est une string et qu'on ne peut pas lui indicer autre chose qu'un int et que tu rétorques "vous racontez des bêtises"
    Ca c'est Python qui le dit... mais comme nous sommes (supposément) un peu plus intelligents que la machine, on reconnaît que joueur["Enchère moy"] est l'accès à la colonne d'une Serie et que si on se retrouve avec objet autre, l'erreur est avant.
    Donc vous racontez des bêtises... je persiste.


    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  20. #20
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 126
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 126
    Points : 1 636
    Points
    1 636
    Par défaut
    Sinon pandas dispose d'une documentation détaillée pour comprendre ses fonctions https://pandas.pydata.org/docs/refer....iterrows.html

Discussions similaires

  1. [XL-2013] aides pour trouvers une erreur et ajout de nouvel formules
    Par SEBASTIENRAP dans le forum Conception
    Réponses: 1
    Dernier message: 20/08/2021, 07h33
  2. Aide pour identifier une erreur de syntaxe
    Par tribalou dans le forum Cobol
    Réponses: 10
    Dernier message: 21/02/2008, 00h46
  3. [Free Pascal] Aide pour comprendre une erreur de compilation
    Par SimoBenz dans le forum Free Pascal
    Réponses: 7
    Dernier message: 05/12/2006, 18h43
  4. aide pour créer une faq sur inno setup
    Par fsx999 dans le forum Langage
    Réponses: 3
    Dernier message: 12/06/2006, 20h16
  5. Réponses: 21
    Dernier message: 10/04/2006, 14h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo