Module mvc.models.noeud

Gestion des noeuds

Expand source code
#!/usr/bin/python3
# -*- coding: utf8 -*-

# @author : Sébastien LOZANO
"""Gestion des noeuds"""


class Noeud:
    """La classe Noeud sert pour chaque sommet(vertex) du graphe.

        Attributs
        ---------
        - nom     : str  - Identification du noeud par un nom par souci de lisibilité (affichage).
        - voisins : list - Les noeuds voisins, par défaut None, stockés dans une list.
        - nbArcs  : int  - Le nombre d'arcs partant ou arrivant à une instance de la classe.
        - capital : int  - Le capital d'une entreprise à un instant donné.

    """  # noqa : E501

    def __init__(self, nom: str, voisins=None, nbArcs=0, capital=0) -> None:
        """Constructeur

        Tests
        -----
        >>> n1 = Noeud('n1')
        >>> print(n1)
        Noeud(nom=n1, voisins=[], nbArcs=0, capital=0)
        >>> n2 = Noeud('n2')
        >>> n2.addVoisin(n1)
        >>> print(n2)
        Noeud(nom=n2, voisins=['n1'], nbArcs=1, capital=0)
        >>> print(n1)
        Noeud(nom=n1, voisins=['n2'], nbArcs=1, capital=0)
        """  # noqa : E501
        pass
        assert isinstance(nom, str), "Le nom d'un noeud doit être un string."  # noqa : E501
        assert isinstance(voisins, list) or voisins is None,"Les voisins d'un noeud sont soit une liste soit None."  # noqa : E501
        assert isinstance(nbArcs, int), "Le nombre d'arcs partant du noeud doit être un entier."  # noqa : E501
        assert isinstance(capital, int), "Le capital d'une noeud noeud doit être un entier."  # noqa : E501
        self.nom = nom
        if voisins is None:
            self.voisins = []
        else:
            self.voisins = voisins
        self.nbArcs = nbArcs
        self.capital = capital

    def __str__(self) -> str:
        """Représentation en chaine de caractères d'une instance de la classe Noeud.

        Remarque
        --------
        Pour les noeuds voisins, on n'affiche que le nom des voisins dans cette représentation.

        Tests
        -----
        >>> n1 = Noeud('n1')
        >>> print(n1)
        Noeud(nom=n1, voisins=[], nbArcs=0, capital=0)
        >>> n2 = Noeud('n2')
        >>> n2.addVoisin(n1)
        >>> print(n2)
        Noeud(nom=n2, voisins=['n1'], nbArcs=1, capital=0)
        """  # noqa : E501
        voisins = []
        for voisin in self.voisins:
            voisins.append(voisin.nom)
        return "Noeud(nom={}, voisins={}, nbArcs={}, capital={})".format(
            self.nom,
            voisins,
            self.nbArcs,
            self.capital
        )

# ================================================================
# =========== GETTERS ============================================
# ================================================================
    def getNom(self) -> str:
        """Renvoie le nom du Noeud.

        Tests
        -----
        >>> n1 = Noeud('n1')
        >>> n1.getNom()
        'n1'
        """
        pass
        return self.nom

    def getVoisins(self) -> list:
        """Renvoie le tableau des noeuds voisins du Noeud.

        Tests
        -----
        >>> n1 = Noeud('n1')
        >>> n2 = Noeud('n2')
        >>> n3 = Noeud('n3')
        >>> n4 = Noeud('n4')
        >>> n1.addVoisin(n2)
        >>> n1.addVoisin(n3)
        >>> n1.addVoisin(n4)
        >>> for i in range(len(n1.getVoisins())):
        ...     print(n1.getVoisins()[i])
        ...
        Noeud(nom=n2, voisins=['n1'], nbArcs=1, capital=0)
        Noeud(nom=n3, voisins=['n1'], nbArcs=1, capital=0)
        Noeud(nom=n4, voisins=['n1'], nbArcs=1, capital=0)
        """
        pass
        return self.voisins

    def getNbArcs(self) -> int:
        """Renvoie le nombre d'arcs partant ou arrivant sur le Noeud.

        Tests
        -----
        >>> n1 = Noeud('n1')
        >>> n2 = Noeud('n2')
        >>> n3 = Noeud('n3')
        >>> n4 = Noeud('n4')
        >>> n1.addVoisin(n2)
        >>> n1.addVoisin(n3)
        >>> n1.addVoisin(n4)
        >>> n1.getNbArcs()
        3
        """
        pass
        return self.nbArcs

    def getCapital(self) -> int:
        """Renvoie le capital de l'instance de Noeud.

        Tests
        -----
        >>> n1 = Noeud('n1')
        >>> print(n1.getCapital())
        0
        >>> n1.setCapital(10)
        >>> print(n1.getCapital())
        10
        """
        pass
        return self.capital

# ================================================================
# =========== SETTERS ============================================
# ================================================================
    def setNom(self, nouveauNom: str) -> None:
        """Redéfinit le nom du Noeud.

        Paramètres
        ----------
        nouveauNom : str - Le nouveau nom du noeud

        Tests
        -----
        >>> n1 = Noeud('n1')
        >>> print(n1)
        Noeud(nom=n1, voisins=[], nbArcs=0, capital=0)
        >>> n2 = Noeud('n2')
        >>> n2.addVoisin(n1)
        >>> print(n2)
        Noeud(nom=n2, voisins=['n1'], nbArcs=1, capital=0)
        >>> n1.setNom('n3')
        >>> print(n1)
        Noeud(nom=n3, voisins=['n2'], nbArcs=1, capital=0)
        >>> print(n2)
        Noeud(nom=n2, voisins=['n3'], nbArcs=1, capital=0)
        """
        pass
        assert isinstance(nouveauNom, str), "Le nom d'un noeud doit être un string."  # noqa : E501
        self.nom = nouveauNom

    def setVoisins(self, nouveauxVoisins: list) -> None:
        """Redéfinit le tableau des Voisins d'un Noeud.

        Paramètres
        ----------
        nouveauxVoisins : list - Un tableau avec les noms des voisins du noeud.

        Tests
        -----
        >>> n1 = Noeud('n1')
        >>> n2 = Noeud('n2')
        >>> n3 = Noeud('n3')
        >>> n4 = Noeud('n4')
        >>> n1.addVoisin(n2)
        >>> n1.addVoisin(n3)
        >>> n1.addVoisin(n4)
        >>> print(n1)
        Noeud(nom=n1, voisins=['n2', 'n3', 'n4'], nbArcs=3, capital=0)
        >>> n1.setVoisins(None)
        >>> print(n1)
        Noeud(nom=n1, voisins=[], nbArcs=0, capital=0)
        >>> print(n2)
        Noeud(nom=n2, voisins=[], nbArcs=0, capital=0)
        >>> print(n3)
        Noeud(nom=n3, voisins=[], nbArcs=0, capital=0)
        >>> print(n4)
        Noeud(nom=n4, voisins=[], nbArcs=0, capital=0)
        >>> n5 = Noeud('n5')
        >>> n6 = Noeud('n6')
        >>> n1.setVoisins([n5,n6])
        >>> print(n1)
        Noeud(nom=n1, voisins=['n5', 'n6'], nbArcs=2, capital=0)
        >>> print(n5)
        Noeud(nom=n5, voisins=['n1'], nbArcs=1, capital=0)
        >>> print(n6)
        Noeud(nom=n6, voisins=['n1'], nbArcs=1, capital=0)
        """
        pass
        assert isinstance(nouveauxVoisins, list) or nouveauxVoisins is None, "Les voisins d'un noeud doivent être un tableau ou None."  # noqa : E501
        # On supprime :
        # -> l'instance du Noeud du tableau des voisins de chaque voisin
        # -> chaque voisin actuel du tableau des voisins de l'instance du Noeud
        k = self.lengthOfVoisins()-1
        while k >= 0:
            self.removeVoisin(self.voisins[k])
            k -= 1
        # On réaffecte les nouveauxVoisins à l'instance du Noeud
        if (nouveauxVoisins is None):
            self.voisins = []
        else:
            for voisin in nouveauxVoisins:
                self.addVoisin(voisin)

    def setNbArcs(self, nouveauNbArcs: int) -> None:
        """Redéfinit le nombre d'arcs partant ou arrivant du Noeud.

        Paramètres
        ----------
        nouveauNbArcs : int - Nouveau nombre d'arcs partant/arrivant du noeud

        Remarques
        ---------
        - Cette méthode ne semble pas avoir tellement d'intérêt étant donné
        qu'on peut très bien incrémenter directement l'attribut nbArcs.
        - Peut-être pour les arcs parallèles

        Tests
        -----
        >>> n1 = Noeud('n1')
        >>> n2 = Noeud('n2')
        >>> n1.addVoisin(n2)
        >>> print(n1)
        Noeud(nom=n1, voisins=['n2'], nbArcs=1, capital=0)
        >>> n1.setNbArcs(5)
        >>> print(n1)
        Noeud(nom=n1, voisins=['n2'], nbArcs=5, capital=0)
        """
        pass
        assert isinstance(nouveauNbArcs, int), "Le nouveau nombre d'arcs doit être un entier"  # noqa : E501
        self.nbArcs = nouveauNbArcs

    def setCapital(self, nouveauCapital: int) -> None:
        """Redéfinit le capital de l'instance de Noeud.

        Paramètres
        ----------
        nouveauCapital : int - Le nouveau capital

        Tests
        -----
        >>> n1 = Noeud('n1')
        >>> print(n1.getCapital())
        0
        >>> n1.setCapital(10)
        >>> print(n1.getCapital())
        10
        """
        pass
        assert isinstance(nouveauCapital, int), "nouveauCaptial doit être un entier."  # noqa : E501
        self.capital = nouveauCapital

# ================================================================
# =========== OUTILS =============================================
# ================================================================
    def addVoisin(self, nouveauVoisin) -> None:
        """Ajoute le noeud nouveauVoisin dans le tableau des voisins d'une instance d'un objet Noeud.

        Ajoute aussi l'instance de Noeud au tableau des voisins de nouveauVoisin !

        Incrémente le nombre d'arcs de chaque instance.

        Paramètres
        ----------
        nouveauVoisin: une instance de la classe Noeud.

        Tests
        -----
        >>> n1 = Noeud('n1')
        >>> n2 = Noeud('n2')
        >>> print(n1)
        Noeud(nom=n1, voisins=[], nbArcs=0, capital=0)
        >>> print(n2)
        Noeud(nom=n2, voisins=[], nbArcs=0, capital=0)
        >>> n1.addVoisin(n2)
        >>> for i in range(len(n1.getVoisins())):
        ...     print(n1.getVoisins()[i])
        ...
        Noeud(nom=n2, voisins=['n1'], nbArcs=1, capital=0)
        >>> for i in range(len(n2.getVoisins())):
        ...     print(n2.getVoisins()[i])
        ...
        Noeud(nom=n1, voisins=['n2'], nbArcs=1, capital=0)
        """  # noqa : E501
        pass
        assert isinstance(nouveauVoisin, Noeud), "nouveauVoisin doit être une instance de la classe Noeud."  # noqa : E501
        assert nouveauVoisin not in self.voisins, "On ne peut pas ajouter un voisin déjà existant."  # noqa : E501

        # Ne pas utiliser les assertions pour valider les données
        # car elles peuvent être désactivées.
        # On lève donc une erreur en cas de souci
        if nouveauVoisin in self.voisins:
            raise ValueError(f'On ne peut pas ajouter un voisin déjà existant à {self.nom}')  # noqa : E501
        else:
            # On modifie la liste des voisins de chaque noeud.
            self.voisins.append(nouveauVoisin)
            nouveauVoisin.voisins.append(self)
            # On incrémente le nombre d'arcs de chaque noeud
            self.setNbArcs(self.nbArcs + 1)
            nouveauVoisin.setNbArcs(nouveauVoisin.nbArcs + 1)

    def removeVoisin(self, ancienVoisin) -> None:
        """Supprime l'ancienVoisin du tableau des voisins d'une instance d'un objet Noeud.
        
        Supprime aussi l'instance de Noeud au tableau des voisins d'ancienVoisin !

        Paramètres
        ----------
        ancienVoisin: une instance de la classe Noeud.

        Remarques
        ---------
        Si on supprime le noeud ancienVoisin, c'est qu'il n'y a plus d'arcs qui le lie à l'instance de la classe.

        Tests
        -----
        >>> n1 = Noeud('n1')
        >>> n2 = Noeud('n2')
        >>> n3 = Noeud('n3')
        >>> print(n1)
        Noeud(nom=n1, voisins=[], nbArcs=0, capital=0)
        >>> print(n2)
        Noeud(nom=n2, voisins=[], nbArcs=0, capital=0)
        >>> print(n3)
        Noeud(nom=n3, voisins=[], nbArcs=0, capital=0)
        >>> n1.addVoisin(n2)       
        >>> n1.addVoisin(n3)
        >>> print(n1)
        Noeud(nom=n1, voisins=['n2', 'n3'], nbArcs=2, capital=0)
        >>> print(n2)
        Noeud(nom=n2, voisins=['n1'], nbArcs=1, capital=0)
        >>> print(n3)
        Noeud(nom=n3, voisins=['n1'], nbArcs=1, capital=0)
        >>> n3.removeVoisin(n1)
        >>> print(n1)
        Noeud(nom=n1, voisins=['n2'], nbArcs=1, capital=0)
        >>> print(n3)
        Noeud(nom=n3, voisins=[], nbArcs=0, capital=0)
        """  # noqa : E501
        pass
        assert isinstance(ancienVoisin, Noeud), "ancienVoisin doit être une instance de la classe Noeud."  # noqa : E501
        assert ancienVoisin in self.voisins, "On ne peut pas supprimer un voisin qui n'existe pas."  # noqa : E501

        # Ne pas utiliser les assertions pour valider les données
        # car elles peuvent être désactivées.
        # On lève donc une erreur en cas de souci
        if ancienVoisin not in self.voisins:
            raise ValueError(f'On ne peut pas supprimer un voisin de {self.nom} qui n\'existe pas')  # noqa : E501
        else:
            # list.remove() ne supprime que le premier élément trouvé mais
            # la structure de Noeud fait qu'il n'y a pas de doublon de voisins
            self.voisins.remove(ancienVoisin)
            ancienVoisin.voisins.remove(self)
            # On décrémente le nombre d'arcs de chaque noeud
            self.setNbArcs(self.nbArcs - 1)
            ancienVoisin.setNbArcs(ancienVoisin.nbArcs - 1)

    def isVoisin(self, voisinCandidat) -> bool:
        """Renvoie un booléen selon que l'instance du Noeud est voisin de Voisin ou non.

        Paramètres
        ----------
        voisinCandidat: une instance de la classe Noeud.

        Tests
        -----
        >>> n1 = Noeud('n1')
        >>> n2 = Noeud('n2')
        >>> n3 = Noeud('n3')
        >>> n1.addVoisin(n2)       
        >>> n2.addVoisin(n3)
        >>> for i in range(len(n1.getVoisins())):
        ...     print(n1.getVoisins()[i])
        ...
        Noeud(nom=n2, voisins=['n1', 'n3'], nbArcs=2, capital=0)
        >>> for i in range(len(n2.getVoisins())):
        ...     print(n2.getVoisins()[i])
        ...
        Noeud(nom=n1, voisins=['n2'], nbArcs=1, capital=0)
        Noeud(nom=n3, voisins=['n2'], nbArcs=1, capital=0)
        >>> for i in range(len(n3.getVoisins())):
        ...     print(n3.getVoisins()[i])
        ...
        Noeud(nom=n2, voisins=['n1', 'n3'], nbArcs=2, capital=0)
        >>> n1.isVoisin(n2)
        True
        >>> n1.isVoisin(n3)
        False
        >>> n3.isVoisin(n2)
        True
        """  # noqa : E501
        pass
        assert isinstance(voisinCandidat, Noeud), "voisin doit être une instance de la classe Noeud."  # noqa : E501
        isVoisin = False
        if voisinCandidat in self.voisins:
            isVoisin = True

        return isVoisin

    def lengthOfVoisins(self) -> int:
        """Renvoie le nombre de voisins d'une instance de la class Noeud.

        Tests
        -----
        >>> n1 = Noeud('n1')
        >>> n1.lengthOfVoisins()
        0
        >>> n2 = Noeud('n2')
        >>> n1.addVoisin(n2)
        >>> n1.lengthOfVoisins()
        1
        >>> n3 = Noeud('n3')
        >>> n2.addVoisin(n3)
        >>> n2.lengthOfVoisins()
        2
        """
        pass
        return len(self.voisins)

    def hasVoisins(self) -> bool:
        """Renvoie True si le noeud a au moins un voisin connecté.

        Tests
        -----
        >>> n1 = Noeud('n1')
        >>> n1.hasVoisins()
        False
        >>> n2 = Noeud('n2')
        >>> n1.addVoisin(n2)
        >>> n1.hasVoisins()
        True
        """
        pass
        hasVoisins = False
        if (self.lengthOfVoisins() == 0):
            hasVoisins = False
        else:
            hasVoisins = True
        return hasVoisins


if __name__ == "__main__":
    import doctest
    doctest.testmod()

Classes

class Noeud (nom: str, voisins=None, nbArcs=0, capital=0)

La classe Noeud sert pour chaque sommet(vertex) du graphe.

Attributs

  • nom : str - Identification du noeud par un nom par souci de lisibilité (affichage).
  • voisins : list - Les noeuds voisins, par défaut None, stockés dans une list.
  • nbArcs : int - Le nombre d'arcs partant ou arrivant à une instance de la classe.
  • capital : int - Le capital d'une entreprise à un instant donné.

Constructeur

Tests

>>> n1 = Noeud('n1')
>>> print(n1)
Noeud(nom=n1, voisins=[], nbArcs=0, capital=0)
>>> n2 = Noeud('n2')
>>> n2.addVoisin(n1)
>>> print(n2)
Noeud(nom=n2, voisins=['n1'], nbArcs=1, capital=0)
>>> print(n1)
Noeud(nom=n1, voisins=['n2'], nbArcs=1, capital=0)
Expand source code
class Noeud:
    """La classe Noeud sert pour chaque sommet(vertex) du graphe.

        Attributs
        ---------
        - nom     : str  - Identification du noeud par un nom par souci de lisibilité (affichage).
        - voisins : list - Les noeuds voisins, par défaut None, stockés dans une list.
        - nbArcs  : int  - Le nombre d'arcs partant ou arrivant à une instance de la classe.
        - capital : int  - Le capital d'une entreprise à un instant donné.

    """  # noqa : E501

    def __init__(self, nom: str, voisins=None, nbArcs=0, capital=0) -> None:
        """Constructeur

        Tests
        -----
        >>> n1 = Noeud('n1')
        >>> print(n1)
        Noeud(nom=n1, voisins=[], nbArcs=0, capital=0)
        >>> n2 = Noeud('n2')
        >>> n2.addVoisin(n1)
        >>> print(n2)
        Noeud(nom=n2, voisins=['n1'], nbArcs=1, capital=0)
        >>> print(n1)
        Noeud(nom=n1, voisins=['n2'], nbArcs=1, capital=0)
        """  # noqa : E501
        pass
        assert isinstance(nom, str), "Le nom d'un noeud doit être un string."  # noqa : E501
        assert isinstance(voisins, list) or voisins is None,"Les voisins d'un noeud sont soit une liste soit None."  # noqa : E501
        assert isinstance(nbArcs, int), "Le nombre d'arcs partant du noeud doit être un entier."  # noqa : E501
        assert isinstance(capital, int), "Le capital d'une noeud noeud doit être un entier."  # noqa : E501
        self.nom = nom
        if voisins is None:
            self.voisins = []
        else:
            self.voisins = voisins
        self.nbArcs = nbArcs
        self.capital = capital

    def __str__(self) -> str:
        """Représentation en chaine de caractères d'une instance de la classe Noeud.

        Remarque
        --------
        Pour les noeuds voisins, on n'affiche que le nom des voisins dans cette représentation.

        Tests
        -----
        >>> n1 = Noeud('n1')
        >>> print(n1)
        Noeud(nom=n1, voisins=[], nbArcs=0, capital=0)
        >>> n2 = Noeud('n2')
        >>> n2.addVoisin(n1)
        >>> print(n2)
        Noeud(nom=n2, voisins=['n1'], nbArcs=1, capital=0)
        """  # noqa : E501
        voisins = []
        for voisin in self.voisins:
            voisins.append(voisin.nom)
        return "Noeud(nom={}, voisins={}, nbArcs={}, capital={})".format(
            self.nom,
            voisins,
            self.nbArcs,
            self.capital
        )

# ================================================================
# =========== GETTERS ============================================
# ================================================================
    def getNom(self) -> str:
        """Renvoie le nom du Noeud.

        Tests
        -----
        >>> n1 = Noeud('n1')
        >>> n1.getNom()
        'n1'
        """
        pass
        return self.nom

    def getVoisins(self) -> list:
        """Renvoie le tableau des noeuds voisins du Noeud.

        Tests
        -----
        >>> n1 = Noeud('n1')
        >>> n2 = Noeud('n2')
        >>> n3 = Noeud('n3')
        >>> n4 = Noeud('n4')
        >>> n1.addVoisin(n2)
        >>> n1.addVoisin(n3)
        >>> n1.addVoisin(n4)
        >>> for i in range(len(n1.getVoisins())):
        ...     print(n1.getVoisins()[i])
        ...
        Noeud(nom=n2, voisins=['n1'], nbArcs=1, capital=0)
        Noeud(nom=n3, voisins=['n1'], nbArcs=1, capital=0)
        Noeud(nom=n4, voisins=['n1'], nbArcs=1, capital=0)
        """
        pass
        return self.voisins

    def getNbArcs(self) -> int:
        """Renvoie le nombre d'arcs partant ou arrivant sur le Noeud.

        Tests
        -----
        >>> n1 = Noeud('n1')
        >>> n2 = Noeud('n2')
        >>> n3 = Noeud('n3')
        >>> n4 = Noeud('n4')
        >>> n1.addVoisin(n2)
        >>> n1.addVoisin(n3)
        >>> n1.addVoisin(n4)
        >>> n1.getNbArcs()
        3
        """
        pass
        return self.nbArcs

    def getCapital(self) -> int:
        """Renvoie le capital de l'instance de Noeud.

        Tests
        -----
        >>> n1 = Noeud('n1')
        >>> print(n1.getCapital())
        0
        >>> n1.setCapital(10)
        >>> print(n1.getCapital())
        10
        """
        pass
        return self.capital

# ================================================================
# =========== SETTERS ============================================
# ================================================================
    def setNom(self, nouveauNom: str) -> None:
        """Redéfinit le nom du Noeud.

        Paramètres
        ----------
        nouveauNom : str - Le nouveau nom du noeud

        Tests
        -----
        >>> n1 = Noeud('n1')
        >>> print(n1)
        Noeud(nom=n1, voisins=[], nbArcs=0, capital=0)
        >>> n2 = Noeud('n2')
        >>> n2.addVoisin(n1)
        >>> print(n2)
        Noeud(nom=n2, voisins=['n1'], nbArcs=1, capital=0)
        >>> n1.setNom('n3')
        >>> print(n1)
        Noeud(nom=n3, voisins=['n2'], nbArcs=1, capital=0)
        >>> print(n2)
        Noeud(nom=n2, voisins=['n3'], nbArcs=1, capital=0)
        """
        pass
        assert isinstance(nouveauNom, str), "Le nom d'un noeud doit être un string."  # noqa : E501
        self.nom = nouveauNom

    def setVoisins(self, nouveauxVoisins: list) -> None:
        """Redéfinit le tableau des Voisins d'un Noeud.

        Paramètres
        ----------
        nouveauxVoisins : list - Un tableau avec les noms des voisins du noeud.

        Tests
        -----
        >>> n1 = Noeud('n1')
        >>> n2 = Noeud('n2')
        >>> n3 = Noeud('n3')
        >>> n4 = Noeud('n4')
        >>> n1.addVoisin(n2)
        >>> n1.addVoisin(n3)
        >>> n1.addVoisin(n4)
        >>> print(n1)
        Noeud(nom=n1, voisins=['n2', 'n3', 'n4'], nbArcs=3, capital=0)
        >>> n1.setVoisins(None)
        >>> print(n1)
        Noeud(nom=n1, voisins=[], nbArcs=0, capital=0)
        >>> print(n2)
        Noeud(nom=n2, voisins=[], nbArcs=0, capital=0)
        >>> print(n3)
        Noeud(nom=n3, voisins=[], nbArcs=0, capital=0)
        >>> print(n4)
        Noeud(nom=n4, voisins=[], nbArcs=0, capital=0)
        >>> n5 = Noeud('n5')
        >>> n6 = Noeud('n6')
        >>> n1.setVoisins([n5,n6])
        >>> print(n1)
        Noeud(nom=n1, voisins=['n5', 'n6'], nbArcs=2, capital=0)
        >>> print(n5)
        Noeud(nom=n5, voisins=['n1'], nbArcs=1, capital=0)
        >>> print(n6)
        Noeud(nom=n6, voisins=['n1'], nbArcs=1, capital=0)
        """
        pass
        assert isinstance(nouveauxVoisins, list) or nouveauxVoisins is None, "Les voisins d'un noeud doivent être un tableau ou None."  # noqa : E501
        # On supprime :
        # -> l'instance du Noeud du tableau des voisins de chaque voisin
        # -> chaque voisin actuel du tableau des voisins de l'instance du Noeud
        k = self.lengthOfVoisins()-1
        while k >= 0:
            self.removeVoisin(self.voisins[k])
            k -= 1
        # On réaffecte les nouveauxVoisins à l'instance du Noeud
        if (nouveauxVoisins is None):
            self.voisins = []
        else:
            for voisin in nouveauxVoisins:
                self.addVoisin(voisin)

    def setNbArcs(self, nouveauNbArcs: int) -> None:
        """Redéfinit le nombre d'arcs partant ou arrivant du Noeud.

        Paramètres
        ----------
        nouveauNbArcs : int - Nouveau nombre d'arcs partant/arrivant du noeud

        Remarques
        ---------
        - Cette méthode ne semble pas avoir tellement d'intérêt étant donné
        qu'on peut très bien incrémenter directement l'attribut nbArcs.
        - Peut-être pour les arcs parallèles

        Tests
        -----
        >>> n1 = Noeud('n1')
        >>> n2 = Noeud('n2')
        >>> n1.addVoisin(n2)
        >>> print(n1)
        Noeud(nom=n1, voisins=['n2'], nbArcs=1, capital=0)
        >>> n1.setNbArcs(5)
        >>> print(n1)
        Noeud(nom=n1, voisins=['n2'], nbArcs=5, capital=0)
        """
        pass
        assert isinstance(nouveauNbArcs, int), "Le nouveau nombre d'arcs doit être un entier"  # noqa : E501
        self.nbArcs = nouveauNbArcs

    def setCapital(self, nouveauCapital: int) -> None:
        """Redéfinit le capital de l'instance de Noeud.

        Paramètres
        ----------
        nouveauCapital : int - Le nouveau capital

        Tests
        -----
        >>> n1 = Noeud('n1')
        >>> print(n1.getCapital())
        0
        >>> n1.setCapital(10)
        >>> print(n1.getCapital())
        10
        """
        pass
        assert isinstance(nouveauCapital, int), "nouveauCaptial doit être un entier."  # noqa : E501
        self.capital = nouveauCapital

# ================================================================
# =========== OUTILS =============================================
# ================================================================
    def addVoisin(self, nouveauVoisin) -> None:
        """Ajoute le noeud nouveauVoisin dans le tableau des voisins d'une instance d'un objet Noeud.

        Ajoute aussi l'instance de Noeud au tableau des voisins de nouveauVoisin !

        Incrémente le nombre d'arcs de chaque instance.

        Paramètres
        ----------
        nouveauVoisin: une instance de la classe Noeud.

        Tests
        -----
        >>> n1 = Noeud('n1')
        >>> n2 = Noeud('n2')
        >>> print(n1)
        Noeud(nom=n1, voisins=[], nbArcs=0, capital=0)
        >>> print(n2)
        Noeud(nom=n2, voisins=[], nbArcs=0, capital=0)
        >>> n1.addVoisin(n2)
        >>> for i in range(len(n1.getVoisins())):
        ...     print(n1.getVoisins()[i])
        ...
        Noeud(nom=n2, voisins=['n1'], nbArcs=1, capital=0)
        >>> for i in range(len(n2.getVoisins())):
        ...     print(n2.getVoisins()[i])
        ...
        Noeud(nom=n1, voisins=['n2'], nbArcs=1, capital=0)
        """  # noqa : E501
        pass
        assert isinstance(nouveauVoisin, Noeud), "nouveauVoisin doit être une instance de la classe Noeud."  # noqa : E501
        assert nouveauVoisin not in self.voisins, "On ne peut pas ajouter un voisin déjà existant."  # noqa : E501

        # Ne pas utiliser les assertions pour valider les données
        # car elles peuvent être désactivées.
        # On lève donc une erreur en cas de souci
        if nouveauVoisin in self.voisins:
            raise ValueError(f'On ne peut pas ajouter un voisin déjà existant à {self.nom}')  # noqa : E501
        else:
            # On modifie la liste des voisins de chaque noeud.
            self.voisins.append(nouveauVoisin)
            nouveauVoisin.voisins.append(self)
            # On incrémente le nombre d'arcs de chaque noeud
            self.setNbArcs(self.nbArcs + 1)
            nouveauVoisin.setNbArcs(nouveauVoisin.nbArcs + 1)

    def removeVoisin(self, ancienVoisin) -> None:
        """Supprime l'ancienVoisin du tableau des voisins d'une instance d'un objet Noeud.
        
        Supprime aussi l'instance de Noeud au tableau des voisins d'ancienVoisin !

        Paramètres
        ----------
        ancienVoisin: une instance de la classe Noeud.

        Remarques
        ---------
        Si on supprime le noeud ancienVoisin, c'est qu'il n'y a plus d'arcs qui le lie à l'instance de la classe.

        Tests
        -----
        >>> n1 = Noeud('n1')
        >>> n2 = Noeud('n2')
        >>> n3 = Noeud('n3')
        >>> print(n1)
        Noeud(nom=n1, voisins=[], nbArcs=0, capital=0)
        >>> print(n2)
        Noeud(nom=n2, voisins=[], nbArcs=0, capital=0)
        >>> print(n3)
        Noeud(nom=n3, voisins=[], nbArcs=0, capital=0)
        >>> n1.addVoisin(n2)       
        >>> n1.addVoisin(n3)
        >>> print(n1)
        Noeud(nom=n1, voisins=['n2', 'n3'], nbArcs=2, capital=0)
        >>> print(n2)
        Noeud(nom=n2, voisins=['n1'], nbArcs=1, capital=0)
        >>> print(n3)
        Noeud(nom=n3, voisins=['n1'], nbArcs=1, capital=0)
        >>> n3.removeVoisin(n1)
        >>> print(n1)
        Noeud(nom=n1, voisins=['n2'], nbArcs=1, capital=0)
        >>> print(n3)
        Noeud(nom=n3, voisins=[], nbArcs=0, capital=0)
        """  # noqa : E501
        pass
        assert isinstance(ancienVoisin, Noeud), "ancienVoisin doit être une instance de la classe Noeud."  # noqa : E501
        assert ancienVoisin in self.voisins, "On ne peut pas supprimer un voisin qui n'existe pas."  # noqa : E501

        # Ne pas utiliser les assertions pour valider les données
        # car elles peuvent être désactivées.
        # On lève donc une erreur en cas de souci
        if ancienVoisin not in self.voisins:
            raise ValueError(f'On ne peut pas supprimer un voisin de {self.nom} qui n\'existe pas')  # noqa : E501
        else:
            # list.remove() ne supprime que le premier élément trouvé mais
            # la structure de Noeud fait qu'il n'y a pas de doublon de voisins
            self.voisins.remove(ancienVoisin)
            ancienVoisin.voisins.remove(self)
            # On décrémente le nombre d'arcs de chaque noeud
            self.setNbArcs(self.nbArcs - 1)
            ancienVoisin.setNbArcs(ancienVoisin.nbArcs - 1)

    def isVoisin(self, voisinCandidat) -> bool:
        """Renvoie un booléen selon que l'instance du Noeud est voisin de Voisin ou non.

        Paramètres
        ----------
        voisinCandidat: une instance de la classe Noeud.

        Tests
        -----
        >>> n1 = Noeud('n1')
        >>> n2 = Noeud('n2')
        >>> n3 = Noeud('n3')
        >>> n1.addVoisin(n2)       
        >>> n2.addVoisin(n3)
        >>> for i in range(len(n1.getVoisins())):
        ...     print(n1.getVoisins()[i])
        ...
        Noeud(nom=n2, voisins=['n1', 'n3'], nbArcs=2, capital=0)
        >>> for i in range(len(n2.getVoisins())):
        ...     print(n2.getVoisins()[i])
        ...
        Noeud(nom=n1, voisins=['n2'], nbArcs=1, capital=0)
        Noeud(nom=n3, voisins=['n2'], nbArcs=1, capital=0)
        >>> for i in range(len(n3.getVoisins())):
        ...     print(n3.getVoisins()[i])
        ...
        Noeud(nom=n2, voisins=['n1', 'n3'], nbArcs=2, capital=0)
        >>> n1.isVoisin(n2)
        True
        >>> n1.isVoisin(n3)
        False
        >>> n3.isVoisin(n2)
        True
        """  # noqa : E501
        pass
        assert isinstance(voisinCandidat, Noeud), "voisin doit être une instance de la classe Noeud."  # noqa : E501
        isVoisin = False
        if voisinCandidat in self.voisins:
            isVoisin = True

        return isVoisin

    def lengthOfVoisins(self) -> int:
        """Renvoie le nombre de voisins d'une instance de la class Noeud.

        Tests
        -----
        >>> n1 = Noeud('n1')
        >>> n1.lengthOfVoisins()
        0
        >>> n2 = Noeud('n2')
        >>> n1.addVoisin(n2)
        >>> n1.lengthOfVoisins()
        1
        >>> n3 = Noeud('n3')
        >>> n2.addVoisin(n3)
        >>> n2.lengthOfVoisins()
        2
        """
        pass
        return len(self.voisins)

    def hasVoisins(self) -> bool:
        """Renvoie True si le noeud a au moins un voisin connecté.

        Tests
        -----
        >>> n1 = Noeud('n1')
        >>> n1.hasVoisins()
        False
        >>> n2 = Noeud('n2')
        >>> n1.addVoisin(n2)
        >>> n1.hasVoisins()
        True
        """
        pass
        hasVoisins = False
        if (self.lengthOfVoisins() == 0):
            hasVoisins = False
        else:
            hasVoisins = True
        return hasVoisins

Methods

def addVoisin(self, nouveauVoisin) ‑> None

Ajoute le noeud nouveauVoisin dans le tableau des voisins d'une instance d'un objet Noeud.

Ajoute aussi l'instance de Noeud au tableau des voisins de nouveauVoisin !

Incrémente le nombre d'arcs de chaque instance.

Paramètres

nouveauVoisin: une instance de la classe Noeud.

Tests

>>> n1 = Noeud('n1')
>>> n2 = Noeud('n2')
>>> print(n1)
Noeud(nom=n1, voisins=[], nbArcs=0, capital=0)
>>> print(n2)
Noeud(nom=n2, voisins=[], nbArcs=0, capital=0)
>>> n1.addVoisin(n2)
>>> for i in range(len(n1.getVoisins())):
...     print(n1.getVoisins()[i])
...
Noeud(nom=n2, voisins=['n1'], nbArcs=1, capital=0)
>>> for i in range(len(n2.getVoisins())):
...     print(n2.getVoisins()[i])
...
Noeud(nom=n1, voisins=['n2'], nbArcs=1, capital=0)
Expand source code
def addVoisin(self, nouveauVoisin) -> None:
    """Ajoute le noeud nouveauVoisin dans le tableau des voisins d'une instance d'un objet Noeud.

    Ajoute aussi l'instance de Noeud au tableau des voisins de nouveauVoisin !

    Incrémente le nombre d'arcs de chaque instance.

    Paramètres
    ----------
    nouveauVoisin: une instance de la classe Noeud.

    Tests
    -----
    >>> n1 = Noeud('n1')
    >>> n2 = Noeud('n2')
    >>> print(n1)
    Noeud(nom=n1, voisins=[], nbArcs=0, capital=0)
    >>> print(n2)
    Noeud(nom=n2, voisins=[], nbArcs=0, capital=0)
    >>> n1.addVoisin(n2)
    >>> for i in range(len(n1.getVoisins())):
    ...     print(n1.getVoisins()[i])
    ...
    Noeud(nom=n2, voisins=['n1'], nbArcs=1, capital=0)
    >>> for i in range(len(n2.getVoisins())):
    ...     print(n2.getVoisins()[i])
    ...
    Noeud(nom=n1, voisins=['n2'], nbArcs=1, capital=0)
    """  # noqa : E501
    pass
    assert isinstance(nouveauVoisin, Noeud), "nouveauVoisin doit être une instance de la classe Noeud."  # noqa : E501
    assert nouveauVoisin not in self.voisins, "On ne peut pas ajouter un voisin déjà existant."  # noqa : E501

    # Ne pas utiliser les assertions pour valider les données
    # car elles peuvent être désactivées.
    # On lève donc une erreur en cas de souci
    if nouveauVoisin in self.voisins:
        raise ValueError(f'On ne peut pas ajouter un voisin déjà existant à {self.nom}')  # noqa : E501
    else:
        # On modifie la liste des voisins de chaque noeud.
        self.voisins.append(nouveauVoisin)
        nouveauVoisin.voisins.append(self)
        # On incrémente le nombre d'arcs de chaque noeud
        self.setNbArcs(self.nbArcs + 1)
        nouveauVoisin.setNbArcs(nouveauVoisin.nbArcs + 1)
def getCapital(self) ‑> int

Renvoie le capital de l'instance de Noeud.

Tests

>>> n1 = Noeud('n1')
>>> print(n1.getCapital())
0
>>> n1.setCapital(10)
>>> print(n1.getCapital())
10
Expand source code
def getCapital(self) -> int:
    """Renvoie le capital de l'instance de Noeud.

    Tests
    -----
    >>> n1 = Noeud('n1')
    >>> print(n1.getCapital())
    0
    >>> n1.setCapital(10)
    >>> print(n1.getCapital())
    10
    """
    pass
    return self.capital
def getNbArcs(self) ‑> int

Renvoie le nombre d'arcs partant ou arrivant sur le Noeud.

Tests

>>> n1 = Noeud('n1')
>>> n2 = Noeud('n2')
>>> n3 = Noeud('n3')
>>> n4 = Noeud('n4')
>>> n1.addVoisin(n2)
>>> n1.addVoisin(n3)
>>> n1.addVoisin(n4)
>>> n1.getNbArcs()
3
Expand source code
def getNbArcs(self) -> int:
    """Renvoie le nombre d'arcs partant ou arrivant sur le Noeud.

    Tests
    -----
    >>> n1 = Noeud('n1')
    >>> n2 = Noeud('n2')
    >>> n3 = Noeud('n3')
    >>> n4 = Noeud('n4')
    >>> n1.addVoisin(n2)
    >>> n1.addVoisin(n3)
    >>> n1.addVoisin(n4)
    >>> n1.getNbArcs()
    3
    """
    pass
    return self.nbArcs
def getNom(self) ‑> str

Renvoie le nom du Noeud.

Tests

>>> n1 = Noeud('n1')
>>> n1.getNom()
'n1'
Expand source code
def getNom(self) -> str:
    """Renvoie le nom du Noeud.

    Tests
    -----
    >>> n1 = Noeud('n1')
    >>> n1.getNom()
    'n1'
    """
    pass
    return self.nom
def getVoisins(self) ‑> list

Renvoie le tableau des noeuds voisins du Noeud.

Tests

>>> n1 = Noeud('n1')
>>> n2 = Noeud('n2')
>>> n3 = Noeud('n3')
>>> n4 = Noeud('n4')
>>> n1.addVoisin(n2)
>>> n1.addVoisin(n3)
>>> n1.addVoisin(n4)
>>> for i in range(len(n1.getVoisins())):
...     print(n1.getVoisins()[i])
...
Noeud(nom=n2, voisins=['n1'], nbArcs=1, capital=0)
Noeud(nom=n3, voisins=['n1'], nbArcs=1, capital=0)
Noeud(nom=n4, voisins=['n1'], nbArcs=1, capital=0)
Expand source code
def getVoisins(self) -> list:
    """Renvoie le tableau des noeuds voisins du Noeud.

    Tests
    -----
    >>> n1 = Noeud('n1')
    >>> n2 = Noeud('n2')
    >>> n3 = Noeud('n3')
    >>> n4 = Noeud('n4')
    >>> n1.addVoisin(n2)
    >>> n1.addVoisin(n3)
    >>> n1.addVoisin(n4)
    >>> for i in range(len(n1.getVoisins())):
    ...     print(n1.getVoisins()[i])
    ...
    Noeud(nom=n2, voisins=['n1'], nbArcs=1, capital=0)
    Noeud(nom=n3, voisins=['n1'], nbArcs=1, capital=0)
    Noeud(nom=n4, voisins=['n1'], nbArcs=1, capital=0)
    """
    pass
    return self.voisins
def hasVoisins(self) ‑> bool

Renvoie True si le noeud a au moins un voisin connecté.

Tests

>>> n1 = Noeud('n1')
>>> n1.hasVoisins()
False
>>> n2 = Noeud('n2')
>>> n1.addVoisin(n2)
>>> n1.hasVoisins()
True
Expand source code
def hasVoisins(self) -> bool:
    """Renvoie True si le noeud a au moins un voisin connecté.

    Tests
    -----
    >>> n1 = Noeud('n1')
    >>> n1.hasVoisins()
    False
    >>> n2 = Noeud('n2')
    >>> n1.addVoisin(n2)
    >>> n1.hasVoisins()
    True
    """
    pass
    hasVoisins = False
    if (self.lengthOfVoisins() == 0):
        hasVoisins = False
    else:
        hasVoisins = True
    return hasVoisins
def isVoisin(self, voisinCandidat) ‑> bool

Renvoie un booléen selon que l'instance du Noeud est voisin de Voisin ou non.

Paramètres

voisinCandidat: une instance de la classe Noeud.

Tests

>>> n1 = Noeud('n1')
>>> n2 = Noeud('n2')
>>> n3 = Noeud('n3')
>>> n1.addVoisin(n2)       
>>> n2.addVoisin(n3)
>>> for i in range(len(n1.getVoisins())):
...     print(n1.getVoisins()[i])
...
Noeud(nom=n2, voisins=['n1', 'n3'], nbArcs=2, capital=0)
>>> for i in range(len(n2.getVoisins())):
...     print(n2.getVoisins()[i])
...
Noeud(nom=n1, voisins=['n2'], nbArcs=1, capital=0)
Noeud(nom=n3, voisins=['n2'], nbArcs=1, capital=0)
>>> for i in range(len(n3.getVoisins())):
...     print(n3.getVoisins()[i])
...
Noeud(nom=n2, voisins=['n1', 'n3'], nbArcs=2, capital=0)
>>> n1.isVoisin(n2)
True
>>> n1.isVoisin(n3)
False
>>> n3.isVoisin(n2)
True
Expand source code
def isVoisin(self, voisinCandidat) -> bool:
    """Renvoie un booléen selon que l'instance du Noeud est voisin de Voisin ou non.

    Paramètres
    ----------
    voisinCandidat: une instance de la classe Noeud.

    Tests
    -----
    >>> n1 = Noeud('n1')
    >>> n2 = Noeud('n2')
    >>> n3 = Noeud('n3')
    >>> n1.addVoisin(n2)       
    >>> n2.addVoisin(n3)
    >>> for i in range(len(n1.getVoisins())):
    ...     print(n1.getVoisins()[i])
    ...
    Noeud(nom=n2, voisins=['n1', 'n3'], nbArcs=2, capital=0)
    >>> for i in range(len(n2.getVoisins())):
    ...     print(n2.getVoisins()[i])
    ...
    Noeud(nom=n1, voisins=['n2'], nbArcs=1, capital=0)
    Noeud(nom=n3, voisins=['n2'], nbArcs=1, capital=0)
    >>> for i in range(len(n3.getVoisins())):
    ...     print(n3.getVoisins()[i])
    ...
    Noeud(nom=n2, voisins=['n1', 'n3'], nbArcs=2, capital=0)
    >>> n1.isVoisin(n2)
    True
    >>> n1.isVoisin(n3)
    False
    >>> n3.isVoisin(n2)
    True
    """  # noqa : E501
    pass
    assert isinstance(voisinCandidat, Noeud), "voisin doit être une instance de la classe Noeud."  # noqa : E501
    isVoisin = False
    if voisinCandidat in self.voisins:
        isVoisin = True

    return isVoisin
def lengthOfVoisins(self) ‑> int

Renvoie le nombre de voisins d'une instance de la class Noeud.

Tests

>>> n1 = Noeud('n1')
>>> n1.lengthOfVoisins()
0
>>> n2 = Noeud('n2')
>>> n1.addVoisin(n2)
>>> n1.lengthOfVoisins()
1
>>> n3 = Noeud('n3')
>>> n2.addVoisin(n3)
>>> n2.lengthOfVoisins()
2
Expand source code
def lengthOfVoisins(self) -> int:
    """Renvoie le nombre de voisins d'une instance de la class Noeud.

    Tests
    -----
    >>> n1 = Noeud('n1')
    >>> n1.lengthOfVoisins()
    0
    >>> n2 = Noeud('n2')
    >>> n1.addVoisin(n2)
    >>> n1.lengthOfVoisins()
    1
    >>> n3 = Noeud('n3')
    >>> n2.addVoisin(n3)
    >>> n2.lengthOfVoisins()
    2
    """
    pass
    return len(self.voisins)
def removeVoisin(self, ancienVoisin) ‑> None

Supprime l'ancienVoisin du tableau des voisins d'une instance d'un objet Noeud.

Supprime aussi l'instance de Noeud au tableau des voisins d'ancienVoisin !

Paramètres

ancienVoisin: une instance de la classe Noeud.

Remarques

Si on supprime le noeud ancienVoisin, c'est qu'il n'y a plus d'arcs qui le lie à l'instance de la classe.

Tests

>>> n1 = Noeud('n1')
>>> n2 = Noeud('n2')
>>> n3 = Noeud('n3')
>>> print(n1)
Noeud(nom=n1, voisins=[], nbArcs=0, capital=0)
>>> print(n2)
Noeud(nom=n2, voisins=[], nbArcs=0, capital=0)
>>> print(n3)
Noeud(nom=n3, voisins=[], nbArcs=0, capital=0)
>>> n1.addVoisin(n2)       
>>> n1.addVoisin(n3)
>>> print(n1)
Noeud(nom=n1, voisins=['n2', 'n3'], nbArcs=2, capital=0)
>>> print(n2)
Noeud(nom=n2, voisins=['n1'], nbArcs=1, capital=0)
>>> print(n3)
Noeud(nom=n3, voisins=['n1'], nbArcs=1, capital=0)
>>> n3.removeVoisin(n1)
>>> print(n1)
Noeud(nom=n1, voisins=['n2'], nbArcs=1, capital=0)
>>> print(n3)
Noeud(nom=n3, voisins=[], nbArcs=0, capital=0)
Expand source code
def removeVoisin(self, ancienVoisin) -> None:
    """Supprime l'ancienVoisin du tableau des voisins d'une instance d'un objet Noeud.
    
    Supprime aussi l'instance de Noeud au tableau des voisins d'ancienVoisin !

    Paramètres
    ----------
    ancienVoisin: une instance de la classe Noeud.

    Remarques
    ---------
    Si on supprime le noeud ancienVoisin, c'est qu'il n'y a plus d'arcs qui le lie à l'instance de la classe.

    Tests
    -----
    >>> n1 = Noeud('n1')
    >>> n2 = Noeud('n2')
    >>> n3 = Noeud('n3')
    >>> print(n1)
    Noeud(nom=n1, voisins=[], nbArcs=0, capital=0)
    >>> print(n2)
    Noeud(nom=n2, voisins=[], nbArcs=0, capital=0)
    >>> print(n3)
    Noeud(nom=n3, voisins=[], nbArcs=0, capital=0)
    >>> n1.addVoisin(n2)       
    >>> n1.addVoisin(n3)
    >>> print(n1)
    Noeud(nom=n1, voisins=['n2', 'n3'], nbArcs=2, capital=0)
    >>> print(n2)
    Noeud(nom=n2, voisins=['n1'], nbArcs=1, capital=0)
    >>> print(n3)
    Noeud(nom=n3, voisins=['n1'], nbArcs=1, capital=0)
    >>> n3.removeVoisin(n1)
    >>> print(n1)
    Noeud(nom=n1, voisins=['n2'], nbArcs=1, capital=0)
    >>> print(n3)
    Noeud(nom=n3, voisins=[], nbArcs=0, capital=0)
    """  # noqa : E501
    pass
    assert isinstance(ancienVoisin, Noeud), "ancienVoisin doit être une instance de la classe Noeud."  # noqa : E501
    assert ancienVoisin in self.voisins, "On ne peut pas supprimer un voisin qui n'existe pas."  # noqa : E501

    # Ne pas utiliser les assertions pour valider les données
    # car elles peuvent être désactivées.
    # On lève donc une erreur en cas de souci
    if ancienVoisin not in self.voisins:
        raise ValueError(f'On ne peut pas supprimer un voisin de {self.nom} qui n\'existe pas')  # noqa : E501
    else:
        # list.remove() ne supprime que le premier élément trouvé mais
        # la structure de Noeud fait qu'il n'y a pas de doublon de voisins
        self.voisins.remove(ancienVoisin)
        ancienVoisin.voisins.remove(self)
        # On décrémente le nombre d'arcs de chaque noeud
        self.setNbArcs(self.nbArcs - 1)
        ancienVoisin.setNbArcs(ancienVoisin.nbArcs - 1)
def setCapital(self, nouveauCapital: int) ‑> None

Redéfinit le capital de l'instance de Noeud.

Paramètres

nouveauCapital : int - Le nouveau capital

Tests

>>> n1 = Noeud('n1')
>>> print(n1.getCapital())
0
>>> n1.setCapital(10)
>>> print(n1.getCapital())
10
Expand source code
def setCapital(self, nouveauCapital: int) -> None:
    """Redéfinit le capital de l'instance de Noeud.

    Paramètres
    ----------
    nouveauCapital : int - Le nouveau capital

    Tests
    -----
    >>> n1 = Noeud('n1')
    >>> print(n1.getCapital())
    0
    >>> n1.setCapital(10)
    >>> print(n1.getCapital())
    10
    """
    pass
    assert isinstance(nouveauCapital, int), "nouveauCaptial doit être un entier."  # noqa : E501
    self.capital = nouveauCapital
def setNbArcs(self, nouveauNbArcs: int) ‑> None

Redéfinit le nombre d'arcs partant ou arrivant du Noeud.

Paramètres

nouveauNbArcs : int - Nouveau nombre d'arcs partant/arrivant du noeud

Remarques

  • Cette méthode ne semble pas avoir tellement d'intérêt étant donné qu'on peut très bien incrémenter directement l'attribut nbArcs.
  • Peut-être pour les arcs parallèles

Tests

>>> n1 = Noeud('n1')
>>> n2 = Noeud('n2')
>>> n1.addVoisin(n2)
>>> print(n1)
Noeud(nom=n1, voisins=['n2'], nbArcs=1, capital=0)
>>> n1.setNbArcs(5)
>>> print(n1)
Noeud(nom=n1, voisins=['n2'], nbArcs=5, capital=0)
Expand source code
def setNbArcs(self, nouveauNbArcs: int) -> None:
    """Redéfinit le nombre d'arcs partant ou arrivant du Noeud.

    Paramètres
    ----------
    nouveauNbArcs : int - Nouveau nombre d'arcs partant/arrivant du noeud

    Remarques
    ---------
    - Cette méthode ne semble pas avoir tellement d'intérêt étant donné
    qu'on peut très bien incrémenter directement l'attribut nbArcs.
    - Peut-être pour les arcs parallèles

    Tests
    -----
    >>> n1 = Noeud('n1')
    >>> n2 = Noeud('n2')
    >>> n1.addVoisin(n2)
    >>> print(n1)
    Noeud(nom=n1, voisins=['n2'], nbArcs=1, capital=0)
    >>> n1.setNbArcs(5)
    >>> print(n1)
    Noeud(nom=n1, voisins=['n2'], nbArcs=5, capital=0)
    """
    pass
    assert isinstance(nouveauNbArcs, int), "Le nouveau nombre d'arcs doit être un entier"  # noqa : E501
    self.nbArcs = nouveauNbArcs
def setNom(self, nouveauNom: str) ‑> None

Redéfinit le nom du Noeud.

Paramètres

nouveauNom : str - Le nouveau nom du noeud

Tests

>>> n1 = Noeud('n1')
>>> print(n1)
Noeud(nom=n1, voisins=[], nbArcs=0, capital=0)
>>> n2 = Noeud('n2')
>>> n2.addVoisin(n1)
>>> print(n2)
Noeud(nom=n2, voisins=['n1'], nbArcs=1, capital=0)
>>> n1.setNom('n3')
>>> print(n1)
Noeud(nom=n3, voisins=['n2'], nbArcs=1, capital=0)
>>> print(n2)
Noeud(nom=n2, voisins=['n3'], nbArcs=1, capital=0)
Expand source code
def setNom(self, nouveauNom: str) -> None:
    """Redéfinit le nom du Noeud.

    Paramètres
    ----------
    nouveauNom : str - Le nouveau nom du noeud

    Tests
    -----
    >>> n1 = Noeud('n1')
    >>> print(n1)
    Noeud(nom=n1, voisins=[], nbArcs=0, capital=0)
    >>> n2 = Noeud('n2')
    >>> n2.addVoisin(n1)
    >>> print(n2)
    Noeud(nom=n2, voisins=['n1'], nbArcs=1, capital=0)
    >>> n1.setNom('n3')
    >>> print(n1)
    Noeud(nom=n3, voisins=['n2'], nbArcs=1, capital=0)
    >>> print(n2)
    Noeud(nom=n2, voisins=['n3'], nbArcs=1, capital=0)
    """
    pass
    assert isinstance(nouveauNom, str), "Le nom d'un noeud doit être un string."  # noqa : E501
    self.nom = nouveauNom
def setVoisins(self, nouveauxVoisins: list) ‑> None

Redéfinit le tableau des Voisins d'un Noeud.

Paramètres

nouveauxVoisins : list - Un tableau avec les noms des voisins du noeud.

Tests

>>> n1 = Noeud('n1')
>>> n2 = Noeud('n2')
>>> n3 = Noeud('n3')
>>> n4 = Noeud('n4')
>>> n1.addVoisin(n2)
>>> n1.addVoisin(n3)
>>> n1.addVoisin(n4)
>>> print(n1)
Noeud(nom=n1, voisins=['n2', 'n3', 'n4'], nbArcs=3, capital=0)
>>> n1.setVoisins(None)
>>> print(n1)
Noeud(nom=n1, voisins=[], nbArcs=0, capital=0)
>>> print(n2)
Noeud(nom=n2, voisins=[], nbArcs=0, capital=0)
>>> print(n3)
Noeud(nom=n3, voisins=[], nbArcs=0, capital=0)
>>> print(n4)
Noeud(nom=n4, voisins=[], nbArcs=0, capital=0)
>>> n5 = Noeud('n5')
>>> n6 = Noeud('n6')
>>> n1.setVoisins([n5,n6])
>>> print(n1)
Noeud(nom=n1, voisins=['n5', 'n6'], nbArcs=2, capital=0)
>>> print(n5)
Noeud(nom=n5, voisins=['n1'], nbArcs=1, capital=0)
>>> print(n6)
Noeud(nom=n6, voisins=['n1'], nbArcs=1, capital=0)
Expand source code
def setVoisins(self, nouveauxVoisins: list) -> None:
    """Redéfinit le tableau des Voisins d'un Noeud.

    Paramètres
    ----------
    nouveauxVoisins : list - Un tableau avec les noms des voisins du noeud.

    Tests
    -----
    >>> n1 = Noeud('n1')
    >>> n2 = Noeud('n2')
    >>> n3 = Noeud('n3')
    >>> n4 = Noeud('n4')
    >>> n1.addVoisin(n2)
    >>> n1.addVoisin(n3)
    >>> n1.addVoisin(n4)
    >>> print(n1)
    Noeud(nom=n1, voisins=['n2', 'n3', 'n4'], nbArcs=3, capital=0)
    >>> n1.setVoisins(None)
    >>> print(n1)
    Noeud(nom=n1, voisins=[], nbArcs=0, capital=0)
    >>> print(n2)
    Noeud(nom=n2, voisins=[], nbArcs=0, capital=0)
    >>> print(n3)
    Noeud(nom=n3, voisins=[], nbArcs=0, capital=0)
    >>> print(n4)
    Noeud(nom=n4, voisins=[], nbArcs=0, capital=0)
    >>> n5 = Noeud('n5')
    >>> n6 = Noeud('n6')
    >>> n1.setVoisins([n5,n6])
    >>> print(n1)
    Noeud(nom=n1, voisins=['n5', 'n6'], nbArcs=2, capital=0)
    >>> print(n5)
    Noeud(nom=n5, voisins=['n1'], nbArcs=1, capital=0)
    >>> print(n6)
    Noeud(nom=n6, voisins=['n1'], nbArcs=1, capital=0)
    """
    pass
    assert isinstance(nouveauxVoisins, list) or nouveauxVoisins is None, "Les voisins d'un noeud doivent être un tableau ou None."  # noqa : E501
    # On supprime :
    # -> l'instance du Noeud du tableau des voisins de chaque voisin
    # -> chaque voisin actuel du tableau des voisins de l'instance du Noeud
    k = self.lengthOfVoisins()-1
    while k >= 0:
        self.removeVoisin(self.voisins[k])
        k -= 1
    # On réaffecte les nouveauxVoisins à l'instance du Noeud
    if (nouveauxVoisins is None):
        self.voisins = []
    else:
        for voisin in nouveauxVoisins:
            self.addVoisin(voisin)