exercice python jeu de la vie objet

python

a marqué ce sujet comme résolu.

Bonjour a tous j’aurais besoin d’un coup de main svp pour mon exercice python je suis coincé a partir de ces instructions merci de votre aide
voici ce que j’ai fais pour l’instant qui était des instructions du début de l’exercice

class Cell:
    def __init__(self):
           self.actuel = False
           self.futur = False
           self.voisins = None

je bloque pour faire la méthode vivant sinon pour les deux autres j’ai fais quelque chose mais lorsque je teste avec python sa ne fonctionne pas je n’ai pas compris pk • vivant() qui retourne l’état actuel (vrai ou faux) • set_voisins() qui permet d’affecter comme voisins la liste v passée en paramètre • get_voisins() qui retourne la liste des voisins de la cellule

def set_voisins(self,v):
        v=[]
        self.voisins=v

    def get_voisins(self):
        return self.voisins

Salut,

Qu’est-ce que tu veux dire par

sa ne fonctionne pas

Tu as une erreur ou tu as un résultat différent de ce que tu attends ?

C’est peut être juste un problème de formatage sur le forum, mais il faut que def set_voisins soit indenté au même niveau que les autres définitions (et le contenu décalé en conséquence). Par ailleurs, dans set_voisins, la première ligne écrase le contenu de v que tu passes en argument, donc ta méthode ne va pas se comporter comme attendu.

Enfin, plus une remarque qui n’est très probablement pas de ta faute parce que c’est ce qui est demandé, il est inutile de définir set_voisins et get_voisins si tout ce que ça fait est d’accéder/modifier directement l’attribut voisins. Autant accéder à cet attribut directement. Et si on a besoin d’un setter et d’un getter plus compliqué, on va plutôt utiliser @property, mais c’est encore un échelon au-dessus en terme d’apprentissage. Tout ça pour dire que définir des méthodes get_something et set_something en Python, c’est un anti-pattern.

+2 -0

oui c’est juste un problème avec le forum pour

class Temps:
    def set_voisins(self,v):
        v=[]
        self.voisins=v

    def get_voisins(self):
        return self.voisins

mais pour le tester je dois écrire quoi dans la console

p1=Temps()

le problème c’est que sa m’affiche une erreur mais à mon avis c’est moi qui m’y prend mal pour le tester

le problème c’est que sa m’affiche une erreur mais à mon avis c’est moi qui m’y prend mal pour le tester

La ligne p1=Temps() en elle même est la bonne façon de créer une instance de la classe Temps, donc le problème ne vient pas de là.

Tu dis avoir une erreur, mais on est pas devin, quel est l’erreur en question ?

J’ai aussi deux remarques :

  • c’est quoi cette classe Temps ? Ces deux méthodes ne devraient pas faire partie de Cell ?
  • il te reste toujours le problème que tu écrases la valeur de v que tu donnes à set_voisins.
+0 -0

pour de ce qui est le problème avec v je n’arive pas à trouver la solution je dois pas besoin créer une variable v ?

Non, elle est créée pour toi avec la valeur que tu lui donnes lorsque tu appelles la fonction (tout comme self d’ailleurs, qui nomme l’instance de la classe depuis laquelle tu appelles la méthode). Il te suffit d’enlever la ligne v = [].

oui c’est plutot cell j’ai juste changer le nom

Évite de poster un code qui ne correspond pas à ce que tu as, ça rend juste les choses plus difficiles à suivre… Par ailleurs si tu as toujours un message d’erreur, donne-le nous comme demandé précédemment. Donne nous le maximum d’information pour que l’on puisse t’aider, plus tes questions sont complètes et claires et plus on pourra t’aider efficacement. :)

+0 -0

L’erreur te dit quel est le problème :

__init__() takes 1 positional argument but 2 were given

Si j’en crois le code dans ton premier message, tu définis __init__ comme prenant seulement un argument self qui sera l’instance de la classe. Lorsque tu appelles Cell([1, 2, 3, 4]), tu vas appeler Cell.__init__(self, [1, 2, 3, 4]) et Python ne sait pas quoi faire de la liste.

Si tu veux effectivement passer une liste à __init__, il faut le déclarer comme ceci (j’imagine que c’est la liste de voisins) :

def __init__(self, voisins):
    self.voisins = voisins
    # reste de __init__

Ou alors, tu ne changes pas le code et tu crées l’instance sans passer de voisins et tu utilises l’interface que tu as créée :

p1 = Cell()
p1.set_voisins([1, 2, 3, 4])
+0 -0

Heu là je ne comprends pas ce dont tu parles. Qu’est-ce qui te renvoie False ? Je ne suis toujours pas devin, sans voir le code que tu exécutes je ne peux pas savoir ce dont tu parles. :)

+0 -0

Euh… Pour être sûr qu’on est bien sur la même longueur d’onde, tu peux poster ton code complet ? Et aussi nous dire dans quel logiciel/outil tu tapes ces commandes ?

Avec le code que tu as posté dans tes messages précédents, la méthode set_voisins devrait renvoyer None (puisque tu ne renvoies rien explicitement, il n’y a pas de return), et en principe le REPL Python (l’invite avec les chevrons qui évalue ligne par ligne ce que tu lui donnes) n’affiche pas None du tout. Tu ne devrais rien avoir du tout d’affiché après l’appel à set_voisins, donc soit tu as changé le code, soit tu as un environnement de travail très étrange.

+0 -0

je travail avec python 3.7 et je tape le code ci-dessus dans la console

class Cell:
    def __init__(self):
           self.actuel = False
           self.futur = False
           self.voisins = None
    def set_voisins(self,v):
        return self.voisins==v

    def get_voisins(self):
        return self.voisins
+0 -0

C’est get_voisins qui est censé renvoyer une liste ; set_voisins est censé modifier l’attribut voisins de l’instance, comme ce que tu avais fait au début (au v = [] près…).

et quand je met =(assignation) à la place de ==(test égalité) sa me met invalid syntax c’est pour cela que j’avais mis deux égales

Il faut enlever le return. Tu dois simplement avoir self.voisins = v dans la méthode set_voisins.

+0 -0

ok merci j’ai bien compris ensuite pour la méthode vivant() j’ai fais cela et sa fonctionne

def vivant(self):
        return self.actuel

ensuite je dois créer naitre() qui met l’état futur de la cellule à True

 def naitre(self):
        return self.futur=True

sa me met erreur invalid syntax j’ai compris car y’avais un return mais comment je pourrais faire sans svp

Je pense que non, tu n’as pas compris la différence entre assignation et égalité. Donc je préfère te renvoyer vers un cours Python pour que tu puisses voir d’où vient ton erreur : https://inforef.be/swi/download/apprendre_python3_5.pdf

Ben… C’est pareil que pour set_voisins, il ne faut pas de return.

J’ai l’impression que tu mets un peu la charrue avant les bœufs, tu te bats avec une classe mais tu as encore des lacunes sur l’écriture d’une simple fonction et les opérations d’affectation. Je te conseille de reprendre les bases calmement pour être sûr de bien comprendre la syntaxe et les opérations de base en Python avant de t’attaquer à des choses un peu plus abstraites comme les classes.

+0 -0

c’est un exercice que je dois rendre je n’ai pas le choix je dois le rendre pour bientôt donc si vous pouvez m’aider un peu plus ou me donner la solution svp sachant que ce n’est que le début de l’exercice j’ai encore plein d’autre chose à faire svp

+0 -2

Non, on ne le fera pas à ta place, ce n’est pas nous qui avons besoin de nous creuser la tête sur le problème que tu as à résoudre. Ça ne rendrait service à personne.

Par contre, on peut bien sûr t’expliquer ce qui te bloque au-fur-et-à-mesure que tu produis ton code.

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte