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

Programmation multimédia/Jeux Python Discussion :

Probleme perte de donnée avec liste


Sujet :

Programmation multimédia/Jeux Python

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2013
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 54
    Points : 28
    Points
    28
    Par défaut Probleme perte de donnée avec liste
    Bonjour,

    Voici mon problème, j'essaie de créer un petit simulateur de cellules qui se reproduises dans une fenêtre.

    Pour créer, bouger et reproduire, j'ai pas de problème sa marche si ce n'est qu'avec plusieurs cellule sur l'écran le jeu ralenti beaucoup. Mon problème c'est ma fonction collision je pense.

    Quand je met des prints pour voir ma liste (qui est normalement imprimer comme ceci : "Cellule1", compteur de cycle, compteur de reproduction, position en X, position en Y, "Cellule2", ...) et bien je vois que je perd des données, ou bien elle se sont mal déplacer comme ceci ("Cellule1", 0, 0, 300, 300, "Cellule2", 0, 0, 310, 310, 'ici il manque mes infos'0, 355, 355, ...)

    J'ai refais le code de plein de manière possible, j'ai analysé encore et encore... Je ne comprend pas pourquoi sa fais sa.

    C'est peut-être tous simplement ma structure qui est pas bonne...

    Je vous laisse 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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
     
    from tkinter import *
    from random import randrange as alea
     
    def cellule(posX, posY, liste):
        """Création d'une cellule"""
        longTuple = 0
        can.create_oval(posX, posY, posX+10,
                        posY+10, fill = "red", tag = "Cellule")
     
        numIdent = can.find_withtag("Cellule")
        longTuple = len(numIdent)-1
        for donnee in ("Cellule"+str(numIdent[longTuple]),0 , 0, posX, posY):
            liste.append(donnee)
     
        return liste
     
    def moveCellule(nbIdent, liste):
        """Gère les mouvements de la cellule"""
     
        adresse = liste.index("Cellule" + str(nbIdent))
     
        posX1 = alea(-2, 3)
        posY1 = alea(-2, 3)
        can.move(nbIdent, posX1, posY1)
     
        liste[adresse + 3] += posX1
        liste[adresse + 4] += posY1
     
    def reproduction(nbIdent, liste):
        """Gère la reproduction des cellules"""
     
        if "Cellule"+str(nbIdent) in listeCellule:
     
            adresse = liste.index("Cellule" + str(nbIdent))
     
            if liste[adresse+1] == 10:
                posAleaX = alea(-20, 21)
                posAleaY = alea(-20, 21)
     
                cellule(liste[adresse+3] + posAleaX,
                        liste[adresse+4] + posAleaY, liste)
     
                liste[adresse+1] = 0
                liste[adresse+2] += 1
     
            if liste[adresse+2] == 2:
                can.delete(nbIdent)
                liste.remove(liste[adresse])
                liste.remove(liste[adresse])
                liste.remove(liste[adresse])
                liste.remove(liste[adresse])
                liste.remove(liste[adresse])
     
            else:
                liste[adresse+1] += 1
     
    def collision(nbIdent, liste):
        """Gère les collisions entre cellule"""
     
        collision = 0
        liste2 = liste[:]
     
        if "Cellule" + str(nbIdent) in liste:
            adresse = liste.index("Cellule" + str(nbIdent))
     
            liste2.remove(liste2[adresse])
            liste2.remove(liste2[adresse])
            liste2.remove(liste2[adresse])
            liste2.remove(liste2[adresse])
            liste2.remove(liste2[adresse])
     
            for i in range(liste[adresse+3], liste[adresse+3]+8):
                for y in range(liste[adresse+4], liste[adresse+4]+8):
                    if i in liste2 and y in liste2:
                        collision = 1
     
        if collision == 1:
            can.delete(nbIdent)
            liste.remove(liste[adresse])
            liste.remove(liste[adresse])
            liste.remove(liste[adresse])
            liste.remove(liste[adresse])
            liste.remove(liste[adresse])
            collision = 0
     
    def gestionCellule():
        """Appel toute les fonctions pour une cellule donné"""
     
        global listeCellule
     
        for nbIdent in can.find_withtag("Cellule"):
            moveCellule(nbIdent, listeCellule)
            reproduction(nbIdent, listeCellule)
            collision(nbIdent, listeCellule)
            print (listeCellule)
     
    def animation():
        """Gère la vitesse d'animation"""
     
        gestionCellule()
        root.after(50, animation)
     
    #----------------------------------------------------------------------------#
    listeCellule = []
     
    root = Tk()
     
    can = Canvas(root, bg = "black", width = 600, height = 600)
    can.pack()
     
    Button(root, text = "Quit", bg = "light grey",
           command = root.destroy).pack(side = BOTTOM, fill = "x")
     
    listeCellule = cellule(300, 300, listeCellule)
     
    animation()
     
    root.mainloop()

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2013
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 54
    Points : 28
    Points
    28
    Par défaut
    après une analyse de la liste, je me suis rendu compte que mes données se mélange dans ma liste:

    ['Cellule3', 5, 1, 297, 283, 'Cellule4', 5, 0, 332, 276, 'Cellule5', 4, 0, 288, 284]
    ['Cellule3', 6, 1, 298, 284, 'Cellule4', 5, 0, 332, 276, 'Cellule5', 4, 0, 288, 284]
    ['Cellule3', 6, 1, 298, 284, 'Cellule4', 6, 0, 334, 277, 'Cellule5', 4, 0, 288, 284]
    ['Cellule3', 6, 1, 298, 284, 'Cellule4', 6, 0, 334, 277, 'Cellule5', 5, 0, 290, 286]
    ['Cellule3', 7, 1, 297, 286, 'Cellule4', 6, 0, 334, 277, 'Cellule5', 5, 0, 290, 286]
    ['Cellule3', 7, 1, 297, 286, 'Cellule4', 7, 0, 332, 277, 'Cellule5', 5, 0, 290, 286]
    ['Cellule3', 7, 1, 297, 286, 'Cellule4', 7, 0, 332, 277, 'Cellule5', 6, 0, 292, 287]
    ['Cellule3', 8, 1, 296, 288, 'Cellule4', 7, 0, 332, 277, 'Cellule5', 6, 0, 292, 287]
    ['Cellule3', 8, 1, 296, 288, 'Cellule4', 8, 0, 330, 278, 'Cellule5', 6, 0, 292, 287]
    """Ici, il y a eu mélanger entre la ligne du haut et celle du bas, le zéro du compteur de la cellule4 (a la fin) devrais être après le 8 de l'autre compteur, erreur qui ce produit toujours après supprimation d'une cellule, dans ce cas ci la cellule5"""
    ['Cellule3', 8, 1, 296, 288, 'Cellule4', 8, 330, 278, 0]
    ['Cellule3', 9, 1, 295, 286, 'Cellule4', 8, 330, 278, 0]
    ['Cellule3', 9, 1, 295, 286, 'Cellule4', 9, 330, 278, 2]
    ['Cellule3', 10, 1, 295, 284, 'Cellule4', 9, 330, 278, 2]
    ['Cellule3', 1, 295, 284, 10]
    ['Cellule3', 2, 295, 283, 11]
    ['Cellule3', 3, 295, 284, 11]

    si quelqu'un a une idée du pourquoi de ces mélanges, qui viennent de facon aléatoire, aucune relation entre le temps ni longueur de la liste...

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2013
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2013
    Messages : 247
    Points : 406
    Points
    406
    Par défaut
    J'ai pas trop le temps de me pencher sur le code tout de suite mais la première idée qui me vient en voyant ton problème et de passer par un dictionnaire comme ça chaque valeur aura une clé:
    Au lieu d'avoir:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    a=['Cellule3', 5, 1, 297, 283, 'Cellule4', 5, 0, 332, 276, 'Cellule5', 4, 0, 288, 284]
    Tu auras:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dico={"NomCell":'Cellule3', "num1":5,....}
    Et donc a[i] deviendra dico["cle"]

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2013
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 54
    Points : 28
    Points
    28
    Par défaut
    Voilà, j'ai réécris le code pour qu,il soit plus cour et plus simple aussi, mais j,ai toujours le même problème. Je vous le laisse:

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
     
    from tkinter import *
    from random import randrange as alea
     
    def cellule(posX, posY, liste):
        """Création d'une cellule"""
        longTuple = 0
        can.create_oval(posX, posY, posX+10,
                        posY+10, fill = "red", tag = "Cellule")
     
        numIdent = can.find_withtag("Cellule")
        longTuple = len(numIdent)-1
        for donnee in ("Cellule"+str(numIdent[longTuple]),0 , 0, posX, posY):
            liste.append(donnee)
     
    def moveCellule(nbIdent, liste):
        """Gère les mouvements de la cellule"""
     
        adresse = liste.index("Cellule" + str(nbIdent))
     
        posX1 = alea(-2, 3)
        posY1 = alea(-2, 3)
        can.move(nbIdent, posX1, posY1)
     
        liste[adresse + 3] += posX1
        liste[adresse + 4] += posY1
     
    def reproduction(nbIdent, liste):
        """Gère la reproduction des cellules"""
     
        if "Cellule"+str(nbIdent) in liste:
     
            adresse = liste.index("Cellule" + str(nbIdent))
     
            if liste[adresse+1] == 50:
                posAleaX = alea(-20, 21)
                posAleaY = alea(-20, 21)
     
                cellule(liste[adresse+3] + posAleaX,
                        liste[adresse+4] + posAleaY, liste)
     
                liste[adresse+1] = 0
                liste[adresse+2] += 1
     
            if liste[adresse+2] == 2:
                can.delete(nbIdent)
     
                for i in range(0, 5):
                    liste.remove(liste[adresse])
     
            else:
                liste[adresse+1] += 1
     
    def collision(nbIdent, liste):
        """Gère les collisions entre cellule"""
     
        collision = 0
        liste2 = liste[:]
     
        adresse = liste.index("Cellule" + str(nbIdent))
     
        for i in range(0, 5):    
            liste2.remove(liste2[adresse])
     
        for i in range(liste[adresse+3], liste[adresse+3]+8):
            for y in range(liste[adresse+4], liste[adresse+4]+8):
                if i in liste2 and y in liste2:
                    collision = 1
     
        if collision == 1:
            can.delete(nbIdent)
     
            for i in range(0, 5):
                liste.remove(liste[adresse])
     
            collision = 0
     
    def gestionCellule(liste):
        """Appel toute les fonctions pour une cellule donné"""
     
        for nbIdent in can.find_withtag("Cellule"):
            moveCellule(nbIdent, liste)
            collision(nbIdent, liste)
            reproduction(nbIdent, liste)
            print (liste) #*****outil de débogage*****
     
    def animation():
        """Gère la vitesse d'animation"""
        global listeCellule
        gestionCellule(listeCellule)
        root.after(50, animation)
     
    #----------------------------------------------------------------------------#
    listeCellule = []
     
    root = Tk()
     
    can = Canvas(root, bg = "black", width = 600, height = 600)
    can.pack()
     
    Button(root, text = "Quit", bg = "light grey",
           command = root.destroy).pack(side = BOTTOM, fill = "x")
     
    cellule(300, 300, listeCellule)
     
    animation()
     
    root.mainloop()

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2013
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 54
    Points : 28
    Points
    28
    Par défaut
    J'AI TROUVÉ

    Je ne sais pas pourquoi, mais en utilisant liste.remove(liste[adresse]), de temps en temps, ma liste se mélangeais toute seule... en utilisant à la place del liste[adresse], la tout marche super bien... Pourtant c'est la même chose et je n'ai rien changé d'autre.

    Je laisse mon code d'amateur pour ceux que sa l'intéresses, en gros, on crée une cellule mère, ensuite la cellule se reproduit selon un cycle, à chaque reproduction elle vieilli (ce qui est représenter par sa couleur), après son quatrième cycle, elle meurt.

    Si deux cellule se touche, l'une mange l'autre, si une cellule sort de l'écran, elle meurt aussi

    C'étais super le fun à programmer et a voir interagir (vous remarquerez que les cellules on toujours tendance à décrire une diagonale dans un ou l'autre des coins de l'écran)

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
     
    from tkinter import *
    from random import randrange as alea
     
    def cellule(posX, posY, liste):
        """Création d'une cellule"""
        can.create_oval(posX, posY, posX+10,
                        posY+10, fill = "red", tag = "Cellule")
     
        numIdent = can.find_withtag("Cellule")
        longTuple = len(numIdent)-1
     
        for donnee in ("Cellule"+str(numIdent[longTuple]),0 , 0, posX, posY):
            liste.append(donnee)
     
    def moveCellule(nbIdent, liste):
        """Gère les mouvements de la cellule"""
     
        adresse = liste.index("Cellule" + str(nbIdent))
     
        posX1 = alea(-2, 3)
        posY1 = alea(-2, 3)
        can.move(nbIdent, posX1, posY1)
     
        liste[adresse + 3] += posX1
        liste[adresse + 4] += posY1
     
    def reproduction(nbIdent, liste):
        """Gère la reproduction des cellules"""
     
        if "Cellule"+str(nbIdent) in liste:
     
            adresse = liste.index("Cellule" + str(nbIdent))
     
            if liste[adresse+1] == 10:
                posAleaX = alea(-20, 21)
                posAleaY = alea(-20, 21)
     
                cellule(liste[adresse+3] + posAleaX,
                        liste[adresse+4] + posAleaY, liste)
     
                liste[adresse+1] = 0
                liste[adresse+2] += 1
     
            if liste[adresse+2] == 1:
                can.itemconfigure(nbIdent, fill = "dark orange")
     
            if liste[adresse+2] == 2:
                can.itemconfigure(nbIdent, fill = "blue")
     
            if liste[adresse+2] == 3:
                can.itemconfigure(nbIdent, fill = "purple")
     
            if liste[adresse+2] == 4:
                can.delete(nbIdent)
     
                for i in range(0, 5):
                    del liste[adresse]
     
            else:
                liste[adresse+1] += 1
     
    def collision(nbIdent, liste):
        """Gère les collisions entre cellules"""
     
        collision = 0
        liste2 = liste[:]
     
        adresse = liste.index("Cellule" + str(nbIdent))
     
        for i in range(0, 5):    
            del liste2[adresse]
     
        for i in range(liste[adresse+3], liste[adresse+3]+7):
            for y in range(liste[adresse+4], liste[adresse+4]+7):
                if i in liste2 and y in liste2:
                    collision = 1
     
        if liste[adresse+3] < 0 or liste[adresse+3] > 590 or liste[adresse+4] < 0 or liste[adresse+4] > 590:
            collision = 1
     
        if collision == 1:
            can.delete(nbIdent)
     
            for i in range(0, 5):
                del liste[adresse]
     
            collision = 0
     
    def gestionCompteur(liste):
        """Affiche le nombre de cellules a l'écran"""
        global compteur
        nombreCellule = "Nombre de cellules = " + str(int(len(liste)/5))
     
        compteur.configure(text = nombreCellule)
     
    def gestionCellule(liste):
        """Appel toute les fonctions pour une cellule donné"""
     
        for nbIdent in can.find_withtag("Cellule"):
            moveCellule(nbIdent, liste)
            collision(nbIdent, liste)
            reproduction(nbIdent, liste)
     
    def animation():
        """Gère la vitesse d'animation"""
        global listeCellule
        gestionCellule(listeCellule)
        gestionCompteur(listeCellule)
        root.after(50, animation)
     
    #----------------------------------------------------------------------------#
    listeCellule = []
     
    root = Tk()
     
    compteur = Label(root, text = "Nombre de cellules = 0")
    compteur.pack(side = TOP, fill = "x")
    can = Canvas(root, bg = "black", width = 600, height = 600)
    can.pack()
     
    Button(root, text = "Quit", bg = "light grey",
           command = root.destroy).pack(side = BOTTOM, fill = "x")
     
    cellule(300, 300, listeCellule)
     
    animation()
     
    root.mainloop()

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2013
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 54
    Points : 28
    Points
    28
    Par défaut
    J'ai oublié de dire que ma condition des collisions est foireuse, mais sa c'est un autre problème, pour l'instant, sa donne l'impression de fonctionner C'est pour faire des tests

  7. #7
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 462
    Points : 9 249
    Points
    9 249
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Citation Envoyé par PascalStl Voir le message
    Je ne sais pas pourquoi, mais en utilisant liste.remove(liste[adresse]), de temps en temps, ma liste se mélangeais toute seule... en utilisant à la place del liste[adresse], la tout marche super bien... Pourtant c'est la même chose et je n'ai rien changé d'autre
    Et non, ce n'est pas la même chose!

    liste.remove(liste[adresse]) retire de la liste la 1ère VALEUR égale à liste[adresse] et non l'item d'indice "adresse".

    Voilà un exemple. Dans la liste, j'ai volontairement placé 2 fois la valeur 297: une fois à l'indice 3 et une seconde fois à l'indice 9. On va voir si on peut effacer la seconde, celle à l'indice 9:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    liste = ['Cellule3', 7, 1, 297, 286, 'Cellule4', 7, 0, 332, 297, 'Cellule5', 5, 0, 290, 286]
     
    liste.remove(liste[9])
    print(liste)
    ['Cellule3', 7, 1, 286, 'Cellule4', 7, 0, 332, 297, 'Cellule5', 5, 0, 290, 286]
    Voilà le problème: on voulait effacer l'item d'indice 9, et on a effacé l'item d'indice 3 parce qu'il a la même valeur.

    Par contre, del liste[9] efface effectivement l'item d'indice 9, de même que liste.pop(9). C'est d'ailleurs cette dernière méthode (pop) qui aurait eu ma préférence.

    A part ça, ton problème est très intéressant!
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2003] Tableau de données avec liste de validation
    Par Philippe76 dans le forum Excel
    Réponses: 3
    Dernier message: 23/12/2009, 11h30
  2. Réponses: 5
    Dernier message: 06/12/2007, 22h16
  3. Perte de données avec Firebird2
    Par endaco dans le forum Firebird
    Réponses: 5
    Dernier message: 10/08/2007, 23h40
  4. Perte de données avec header
    Par mulot49 dans le forum Langage
    Réponses: 6
    Dernier message: 24/04/2007, 17h40
  5. Perte de données avec requete UNION
    Par askan dans le forum Access
    Réponses: 3
    Dernier message: 02/02/2006, 15h49

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