Triage en programmation orienter objet (python) [Résolu]

Signaler
-
Messages postés
321
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
2 août 2020
-
Bonjour,
voici mon code qui devrait effectuer les méthodes de triages pour un tableau t , lorsque je fais l'appellation ''
g=Triage([1,9,10,0,2,17,-7,-2])'' et ''g.BulleA()'' 

on me dit BulleA() missing 1 required positional argument: 't'

Quelqu'un pourrait m'aider SVP ? voir le code ci-dessous

import numpy as np

#Triage en mode ascendant et descendant  avec les méthodes : Bulles, Swap, Insertion, Selection

class Triage():
    def __init__(soi,t):
        soi.t=t
#
    def Swap(soi,i,j):        
        temp=soi.t[i]
        soi.t[i]=soi.t[j]
        soi.t[j]=temp
        return(soi.t)


    def BulleA(soi,t):
        N=len(soi.t)
        for i in np.arange(0,N-1):
             for j in np.arange(0,N-1-i):
                if (soi.t[j]>soi.t[j+1]):
                    Triage.Swap(soi.t,j,j+1)
        return(soi.t)            
#   
    def BulleD(soi):
        N=len(soi.t)
        for i in np.arange(0,N-1):
            for j in np.arange(0,N-1-i):
                if (soi.t[j]<soi.t[j+1]):
                    Triage.Swap(soi.t,j,j+1)
        return(soi.t) 
#    
    def InserA(soi):
        N=len(soi.t)
        for i in np.arange(0,N-1):
            for j in np.arange(i,-1,-1):
                if (soi.t[j]>soi.t[j+1]):
                    Triage.Swap(soi.t,j,j+1)
        return(soi.t)                 
#  
    def InserD(soi):
        N=len(soi.t)
        for i in np.arange(0,N-1):
            for j in np.arange(i,-1,-1):
                if (soi.t[j]<soi.t[j+1]):
                    Triage.Swap(soi.t,j,j+1)
        return(soi.t)   
#        
    def SelecA(soi):
        N=len(soi.t)
        for i in np.arange(0,N-1):
            bas=i   
            for j in np.arange(i+1,N):
                if (soi.t[j]<soi.t[bas]):
                    bas=j
            Triage.Swap(soi.t,i,bas)
        return(soi.t)    
 #       
    def SelecD(soi):   
        N=len(soi.t)
        for i in np.arange(0,N-1):
            bas=i   
            for j in np.arange(i+1,soi.N):
                if (soi.t[j]>t[bas]):
                    bas=j
            Triage.Swap(soi.t,i,bas)
        return(soi.t)

12 réponses

Messages postés
321
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
2 août 2020
54
Regarde la définition de la fonction:

def BulleA(soi, t):

elle admet 2 arguments : soi et t

soi, c'est normal, ca représente l'instance créée à partir de la classe Triage, en l'occurrence g :

g=Triage([1,9,10,0,2,17,-7,-2])

mais il y a aussi l'argument t, qu'il faut bien initialiser quand on invoque la fonction

il faudrait faire normalement g.BulleA(t)

Mais le problème vient de la définition de la fonction:

Etant donné que t est initialisé à la création de l'instance g, avec la fonction __init__, t est

maintenant un attribut de g et donc, dans les méthodes de la classe on peut le retrouver avec

soi.t, donc il faut écrire def BulleA(soi): comme d'ailleurs dans la

plupart des autres méthodes de cette classe, et du coup, à l'intérieur de BulleA, t est connu :

N=len(soi.t) fonctionne sans avoir à passer t en argument

Donc le prof a raison, on invoque la fonction avec g.BulleA()
Messages postés
14567
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
4 août 2020
559
Bonjour

en python, il y a un truc fondamental => l'indentation.

Comme tout site de code qui se respecte, CCM dispose d'un outils qui permet (entre autre) de préserver l'indentation : les balises de code.
Voici un petit tuto sur leur bonne utilisation https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code

Utilisateur anonyme
C'est seulement le copier coller qui a perdue l'identation, mais c'est bien fait
Messages postés
14567
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
4 août 2020
559 > Utilisateur anonyme
Oui c’est le copier coller sans les balises de codes, j’ai vu que tu as édité de le message, mais sans pour autant les ajouter au bon endroit.
Ton code est toujours inexploitable pour celui qui voudrait t’aider

alors comment on fait pour que l'identation soit copier ?
Messages postés
14567
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
4 août 2020
559
Tu lis et tu appliques correctement le tuto que je t’ai mis en lien
Messages postés
321
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
2 août 2020
54
Bonjour LaurieVL

Sais tu ce que signifie
BulleA() missing 1 required positional argument: 't'
en français ?

Compare la définition de ta fonction BulleA() : def BulleA(.......
avec l'appel (pas l'appellation ! :-) ) de cette même fonction : g.BulleA()
Il n'y a pas un truc qui t'interpelle ?

Ou alors c'est que tu as copié/collé et que tu ne connais pas bien Python .....
Messages postés
14567
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
4 août 2020
559
Bonjour Phil, elle a édité son message plusieurs fois sans arriver à positionner correctement les balises de code.
Finalement, c'est Jordane qui l'a fait.
Il est donc bien possible qu'elle soit totalement novice.
Messages postés
321
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
2 août 2020
54 >
Messages postés
14567
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
4 août 2020

Bonjour Whismeril,

Tu as surement raison, car son problème est assez basique

Comme le répondent souvent des intervenants sur ce forum, quand on débute, il faudrait commencer par des choses simples ...
Utilisateur anonyme >
Messages postés
321
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
2 août 2020

je suis étudiante en génie ce n'est pas moi qui décide les travaux que je dois faire et c'est mon premier cours de programmation j'essaie de rendre un travail
Messages postés
11735
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
5 août 2020
671 > Utilisateur anonyme
je t'ai proposé un exercice plus facile, qui t'aidera à apprendre et à progresser.
Messages postés
11735
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
5 août 2020
671 >
Messages postés
321
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
2 août 2020

surprenant aussi que des novices écrivent "mon programme" alors qu'ils ne le comprennent pas.

Vous êtes vraiment des personnes désagréables à critiquer sans raison
Je vois bien que vous n'avais rien d'autre à faire mais SVP aller ailleurs si ce n'est pas pour aider ou garder un minimum de savoir vivre
Messages postés
11735
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
5 août 2020
671
désolé, nous avons en effet sans doute négligé de te communiquer ceci: https://www.commentcamarche.net/faq/10925-demander-de-l-aide-pour-vos-exercices-sur-ccm

Vous n'aidez pas vous ne faites que dire que je suis novice alors vous riez de ma situation sans aucune aide de votre part je ne comprend pas ce que vous faites ici.

Un forum est fait pour posez des question,
ce que j'ai fait. si vous ne voulez pas répondre c'est bien mais ne répondez pas et c'est tout.

Sinon merci à jordane qui a éditer le texte
Messages postés
14567
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
4 août 2020
559
Laurie, s'interroger sur le fait que tu sois novice n'est pas une critique.
On a tous débuté un jour, mais pour y arriver il ne faut pas mettre la charrue avant les boeufs.
Dire que pour un novice cet exercice est trop optimiste, là c'est une critique, mais constructive

je suis étudiante en génie ce n'est pas moi qui décide les travaux que je dois faire et c'est mon premier cours de programmation j'essaie de rendre un travail


Ça tant que tu ne le dis pas comment veux tu qu'on le devine. Surtout que le code en question est loin de faire penser à un premier exercice.

Il y a de nombreux flemmards qui viennent sur les forums, sans avoir rien suivi en cours depuis plusieurs semaines/mois et qui espèrent qu'on bonne âme fera le boulot à leur place.

C'est contraire à l'esprit de ce forum, ici on tache de donner des pistes de réflexions à ceux qui essayent.
On y met quelques conditions
  • disposer d'un code facile à lire et indenté
  • répondre aux questions que l'on te pose, car contrairement à toi, nous n'avons pas à disposition certains éléments de contexte qui nous semblent importants pour pouvoir répondre, ton niveau fait partie de ces éléments.
  • avoir l'impression que le demandeur a fourni un travail personnel avant de venir poster.


Si nos questions te vexent, cela peut vouloir dire que tu es susceptible, et bien soit tu le surmontes et peut-être que finalement on pourra t'aider.
Mais cela peut aussi vouloir dire que la situation n'est pas si honnête que tu le dis et que ça t'a piqué au vif.

On veut bien te laisser le bénéfice du doute, mais il faut y mettre du tiens.

yg_be t'as proposé des exercices plus simples, c'est un très bon conseil.
Supposons qu'on te demande de calculer une puissance, alors que tu n'as pas encore appris la multiplication. C'est un peu l'impression que tu donnes. Comprends tu?



Je vous explique je suis de bonne foi

J'ai suivie mes cours mais a cause de l’arrêt des classe peu de formation a été fait à distance et j'ai déjà travaillé sur le triage en python le problème je crois est la partie orienter objet !

Ça c'est nouveau est j'ai ça a faire a remettre dans mon travail et sérieusement, je ne vois pas comment le faire marcher autrement que ce que j’ai fait la. C'est pourquoi je me suis tourné vers le forum, je n'y était pas avant. Si quelqu’un repère l'erreur que j'ai fait ça aurait été utile pour moi, je ne demande pas de le faire a ma place de me diriger si quelqun le veut bien parce la je suis dans le néant avec ce problème
Messages postés
321
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
2 août 2020
54
Ok LaurieVL,

Dans ma réponse de 11h39, je t'ai quand meme donné une piste …
Utilisateur anonyme
Étant donné que c'est pour un cours, le professeur nous demande d'obtenir la réponse en tapant exactement :
g.Bulle() , alors c'est censé fonctionner avec cet appellation selon lui

Pour être sur d'avoir compris tu me dit que ce n'est pas la fonction le problème mais bien comment elle est évoqué ?
Messages postés
11735
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
5 août 2020
671 > Utilisateur anonyme
si tu as comme instruction d’appeler g.Bulle(), alors comment dois-tu déclarer Bulle? avec quels paramètres?

avant de faire des exercices complexes orientés objet, commence par des exercices beaucoup plus simples, cela va te permettre de comprendre, d'apprendre, et de progresser. commence par une classe beaucoup plus simple.

cela me semble tout de même très logique: si tu ne vois pas comment faire, commence avec des exercices plus simples.
tu ne progresseras pas si nous te donnons la solution d'un exercice.
Messages postés
321
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
2 août 2020
54
Bonjour LaurieVL,

tu ne nous a pas dit si ma réponse du 24 avril à 21h12 avait résolu ton problème ….

:-)
Messages postés
321
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
2 août 2020
54
Bonjour LaurieVL,


Le 24 avril à 18h08, tu as su nous tancer vertement à propos de nos réponses :-)

Maintenant, à toi de faire preuve de savoir-vivre en nous répondant:

As-tu enfin réglé ton problème ?
Utilisateur anonyme
Oui en fait je l'ai résolue c'était bulle et insert l'erreur je m'en suit rendu compte en regardant select

Désoler mais ton commentaire n'a pas aider
Messages postés
321
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
2 août 2020
54
Hé bien voila, il suffisait de le dire ....