projet de programmation (ISN) (python 3.4)

projet de programmation (ISN) (python 3.4) - Python - Programmation

Marsh Posté le 05-01-2015 à 12:22:29    

Bonjour je suis en CPGE scientifique et j'ai un projet à faire sur les arbres et héritage.
En étant en 2e année je souhaite m'améliorer dans l'informatique pour le concours sachant que ce n'est pas du tout mon point fort  
j'espère avoir au plus vite une aide pour mon projet  
 
Merci :D

Reply

Marsh Posté le 05-01-2015 à 12:22:29   

Reply

Marsh Posté le 06-01-2015 à 12:37:54    

Encore faudrait-il poser une question ?


---------------
[VDS] Divers oldies PCI, Teensy 2 [ACH] Corsair Strafe, vieux claviers
Reply

Marsh Posté le 07-01-2015 à 07:30:02    

http://yves.noyer.perso.sfr.fr/Inf [...] rojet2.pdf
voila le projet  
comment faire la méthode avec décalage?

Reply

Marsh Posté le 07-01-2015 à 11:09:29    

Pourquoi ne pas étudier le code Python d'un projet similaire au tien ? Un exemple intéressant : https://github.com/caesar0301/treelib.


---------------
rule #1 : trust the python
Reply

Marsh Posté le 07-01-2015 à 11:24:35    

oui merci mais c'est les méthodes que je n'arrive pas vraiment à faire

Reply

Marsh Posté le 08-01-2015 à 13:01:21    

Montre-nous ce que tu as fait pour que nous en discutions. Où en es-tu ?


---------------
rule #1 : trust the python
Reply

Marsh Posté le 08-01-2015 à 17:45:53    

Poste ton code dans un message : l'usage sur ce forum est de montrer un bout de code que d'autres pourront copier/coller pour en discuter la teneur. Les images que tu as postées ne permettent pas cela. Il existe des balises permettant d'encadrer le code dans le petit éditeur qui s'ouvre quand tu crées un nouveau message.


---------------
rule #1 : trust the python
Reply

Marsh Posté le 09-01-2015 à 07:45:54    

class SonOf: #nom du graphe
    def __init__(self,name, father = None): #methode constructeur  
        self.name = name
        self.father = None        
 
class Leaf(SonOf): #classe Leaf herite de SonOf
    def __init__(self,name,value,father = None):
        SonOf.__init__(self,name,father = None) #on appelle explicitement le constructeur de SonOf
        self.value = value
     
    def display(self, decalage = 0):
         print('la feuille {0} a pour valeur {1}'.format(self.name, self.value, decalage))
         
    def __lt__(self,feuille_a_comparer): #comparer 2 feuille
        if self.value < feuille_a_comparer.value:
            return True
        else :
            return False
     
 
class Node(SonOf): #classe Node herite de SonOf
    def __init__(self,name,sons=[],father=None): #sons=liste de fils
        self.name = name
        self.father = None
        self.list_sons = self.Node
        self.list_sons = self.Leaf
        SonOf.__init__(self,name,father = None)
        self.list_sons = sons
     
    def add_son(self,s):
        self.Leaf = s
        self.Node = s
        self.list_sons[s] = True
        return "father.attribut = s" # ajoute le ls s a la liste des ls, indique le nouveau pere de s en modiant son attribut father
     
    def remove_son(self,s,node):
        try :
             self.list_sons[node].remove(node,s)
        except :
             print('Error')
        self.father[s] = None
         
    def display(self,decalage=0): #affiche le nom du noeud + appel meth display
        for e in self.list_sons():
            print('fils {0} de {1}')
        return self.display
         
         
class Tree(Node,Leaf): #héritage
    def __init__(self,name,father=None,sons=[],value=None):
        self.value=[]
        self.value=None
        self.sons=None
        self.sons=[]
        if value != None:
            Leaf.__init__(self,name,value,father = None)
            self.sons=[]
        else:  
            Leaf.__init__(self,name,value,father = None)
            self.value=None
     
    def display(self,decalage=0):

Reply

Marsh Posté le 09-01-2015 à 21:25:47    

Qu'appelles-tu "la méthode avec décalage" ? A quelle page du pdf cela correspond-il ?


---------------
rule #1 : trust the python
Reply

Marsh Posté le 09-01-2015 à 21:25:47   

Reply

Marsh Posté le 10-01-2015 à 11:15:44    

page 2, question 2 pour la méthode display

Reply

Marsh Posté le 10-01-2015 à 15:00:47    

Pour avoir n fois le caractère espace :

Code :
  1. shift = " "*n



---------------
rule #1 : trust the python
Reply

Marsh Posté le 11-01-2015 à 12:20:17    

je dois mettre n en paramètre ?

Reply

Marsh Posté le 11-01-2015 à 14:34:46    

Je ne dois pas être clair... Je pensais à quelque chose comme :
 

Code :
  1. def display(self, decalage = 0):
  2.      print(" "*decalage + 'la feuille {0} a pour valeur {1}'.format(self.name, self.value))


---------------
rule #1 : trust the python
Reply

Marsh Posté le 12-01-2015 à 13:25:02    

ah d'accord c'est bon j'ai compris :) merci beaucoup ;)

Reply

Marsh Posté le 12-01-2015 à 14:16:13    

comment faire cette méthode display question 4 de la classe Node "appelle recursivement la méthode display des descendants.
Le decalage est par defaut de 0 espacement vers la gauche, mais chaque appel interne augmente l’espacement de 1"
 
Les méthodes que j'ai faites semblent correctes ?

Reply

Marsh Posté le 12-01-2015 à 17:54:51    

Non. En très gros l'idée est d'avoir une fonction Node.display() qui, en pseudo-code, ressemble à ça :

Code :
  1. res = ""
  2.   si le node courant n'a pas de fils :
  3.       res = leaf.display( decalage ), leaf étant le leaf du node courant
  4.   sinon :
  5.       pour chaque fils du node courant :
  6.           res += fils.leaf( decalage + 1 ), leaf étant le leaf du fils dans ta boucle
  7.   return res


Si tu n'as jamais fait de programmation, ça peut te paraître difficile. Mais cette partie de l'exercice est très formatrice pour un débutant.


---------------
rule #1 : trust the python
Reply

Marsh Posté le 13-01-2015 à 08:13:33    

def display(self,decalage=0): #affiche le nom du noeud + appel meth display
        res = ""
        for Node in self.list_sons[Node]:
            res += sons.leaf( decalage + 1 )
        else:
            res = Leaf.display( decalage )
        return res
 
 
J'ai fait comme ça mais je crois que ce n'est pas bon :/

Reply

Marsh Posté le 13-01-2015 à 13:14:18    

Sans entrer dans le détail, tu voulais sans doute écrire quelque chose comme :

Code :
  1. def display(self,decalage=0):
  2.     res = ""
  3.     for Node in self.list_sons[Node]:
  4.          if Node-a-plusieurs-fils:               # <<<<<<<<<<<<<<<
  5.             res += sons.leaf( decalage + 1 )
  6.         else:
  7.             res = Leaf.display( decalage )
  8.     return res


---------------
rule #1 : trust the python
Reply

Marsh Posté le 14-01-2015 à 07:50:13    

oui voilà mais c'est écrit
- "local variable Node (defined in enclosing scope on l.30 referenced before assignment)
-undefined name 'a plusieurs fils'
-undefined name 'sons'

Reply

Marsh Posté le 14-01-2015 à 23:07:12    

ag974 : je ne comprends ton dernier post. Est-ce là un message d'erreur renvoyé par Python quand tu exécutes ton code ? Tu sembles avoir copié/collé mon pseudo-code : ça ne peut pas marcher ainsi ! Je te laisse le réécrire en Python : fais une nouvelle proposition pour que je puisse t'aider.


Message édité par suizokukan le 15-01-2015 à 09:41:55

---------------
rule #1 : trust the python
Reply

Marsh Posté le 15-01-2015 à 07:20:45    

def nodes(self):
        return self.list_node.keys()
 
def display(self,decalage=0): #affiche le nom du noeud + appel meth display
        res = ""
        for node in self.list_sons[node]:
            if node-a-plusieurs-fils:
                res =+ sons.Leaf(decalage + 1)
            else:
                res = Leaf.display(decalage)
        return res
 
je ne comprends pas 'node a plusieur fils'

Reply

Marsh Posté le 15-01-2015 à 16:24:38    

vous pouvez mettre comment je devrai écrire sur python svp ^^

Reply

Marsh Posté le 18-01-2015 à 08:35:58    

c'st bon ce que j'ai fais ou pas ?

Reply

Marsh Posté le 23-01-2015 à 16:40:23    

j'ai besoin d'aide svp !

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed