Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1752 Le 10/12/2008, à 21:15

Kamy

Re : Topic des couche tard (10) !

Bonsoir smile

Tiens tshirtman, je te sollicite pour un curieux problème en Python.
Voici un programme qui prends deux dictionnaires contenant un couple membre/points et fait l'addition des points pour chaque membre (la méthode n'est probablement pas la plus efficace ni rapide, mais je débute ...)

# Tri de la liste l dans l'ordre decroissant (points) et tri de la liste m (membres) de la meme façon
def tri(l,m):
    for i in xrange(len(l)):
        for j in reversed(xrange(i,len(l))):
            if l[j]>l[j-1]:
                t=l[j]
                u=m[j]
                l[j]=l[j-1]
                m[j]=m[j-1]
                l[j-1]=t
                m[j-1]=u


# Classement de la nuit
classement = {'cariboune' : 3,'wid': 6, 'lynxy': 6, 'John_Lennon': 1, 'darkmustang': 6, 'Sergio': 6, 'le pingou': 5, 'Vinky': 6, 'Camille': 6, 'Dellfan': 6}
# Classement general (dans un fichier)
classement_fichier = {'John_Lennon': 1, 'Shawn': 20, 'Turtle56': 12, 'scrat': 24, 'Camille': 20, 'cariboune': 30, 'Vinky': 1, 'c.a': 4}
# Initialisation
liste_points,liste_membres=[],[]
liste_points_fichier,liste_membres_fichier=[],[]
liste_points_total,liste_membres_total=[],[]
classement_total = {}

for membre in classement: # Nuit
    # Creation d'une liste avec les points
    liste_points.append(classement[membre])
    # Creation d'une liste avec les membres (dans le meme ordre)
    liste_membres.append(str(membre))

for membre in classement_fichier: # Fichier
    # Creation d'une liste avec les points
    liste_points_fichier.append(classement_fichier[membre])
    # Creation d'une liste avec les membres (dans le meme ordre)
    liste_membres_fichier.append(str(membre))

# Liste de tous les membres
liste_membres_total = liste_membres + liste_membres_fichier
# Supprime les doublons
liste_membres_total = list(set(liste_membres_total))

# Addition des points
for membre in liste_membres_total:
    if classement_fichier.has_key(membre) == 1: # Si deja joue (se trouve dans fichier)
        if classement.has_key(membre) == 1: # Si dans fichier et joue ce soir
            classement_total[membre] = int(classement[membre]) + int(classement_fichier[membre])
        else: # Si dans fichier et pas joue ce soir
            classement_total[membre] = int(classement_fichier[membre])
    else: # Si pas dans fichier mais joue ce soir (nouveau)
        classement_total[membre] = int(classement[membre])

for membre in classement_total:
    liste_points_total.append(int(classement_total[membre]))

# Tri de la liste dans l'ordre
tri(liste_points_total,liste_membres_total)

# On parcourt toute la liste
for i in range(len(liste_membres_total)):
    # Affichage du classement
    print liste_membres_total[i],'->',liste_points_total[i]

Si tu l'exécutes une fois ça marche bien. Mais si tu change "le pingou" en "lepingou" au début dans la déclaration de classement, le programme m'inverse deux membres hmm
Je trouve ça bien bien bizarre, car mon test pour trier la liste ne se fait que sur la valeur des points, et le nom du membre n'intervient pas...
Je cherche depuis hier, mais je veux pas t'embêter, si tu peux y jeter un coup d'oeil évidemment smile


Et Paf ça fait des Chocapics !

Hors ligne

#1753 Le 10/12/2008, à 21:31

Sir Na Kraïou

Re : Topic des couche tard (10) !

tshirtman a écrit :
la 'tite gogole a écrit :

mad

mad

mad


Descendant de Charlemagne et de LUCA.
Bleu, en l'hommage d'un truc bleu. :'(
C'est pas du bleu.
C'est pas le lac de Genève, c'est le Lac Léman.

Hors ligne

#1754 Le 10/12/2008, à 21:32

guguscat

Re : Topic des couche tard (10) !

plop

dehors le feminisme !


Un problème non résolu ? Indiquez le en insultant les gens qui tentent de vous aider.

Hors ligne

#1755 Le 10/12/2008, à 21:35

Sir Na Kraïou

Re : Topic des couche tard (10) !

guguscat a écrit :

plop

dehors le feminisme !

Ouais ! Les femmes dehors et les hommes dedans : maintenant, il y a de plus en plus d'hommes au foyer. Torcher les gosses, les emmener à l'école, passer l'aspirateur, faire la cuisine, la lessive, le repassage, etc. etc.


Descendant de Charlemagne et de LUCA.
Bleu, en l'hommage d'un truc bleu. :'(
C'est pas du bleu.
C'est pas le lac de Genève, c'est le Lac Léman.

Hors ligne

#1756 Le 10/12/2008, à 21:45

tshirtman

Re : Topic des couche tard (10) !

@Kamy: je pense que ça vient du fait qu'un dico n'est pas trié, autrement dit, l'odre dans lequel tu reçoit les éléments quand tu fait ton 'for' n'est pas prévisible, on peut supposer qu'en mémoir l'ordre alphabétique change des choses, mais pas sur, le fait que tu fasse des conversions en set() a le même effet (non ordonnés).

et essaye de faire des classe, ça fera moins mal aux yeux *_*.

^^

Hors ligne

#1757 Le 10/12/2008, à 21:56

Kamy

Re : Topic des couche tard (10) !

Ah ben zut alors hmm
J'avais tout de bon, et là c'est le seul truc qui va me bloquer. Ouiiiiin sad

Et il y a un moyen simple d'éviter cela ? Ou alors faut tout changer (et dans ce cas aucune idée de comment faire) ?

Et pour les classes, c'est prévu pour les vacances. En fait c'est le chapitre d'après donc j'ai toujours pas compris l'intérêt mais ça viendras tongue

Dernière modification par Kamy (Le 10/12/2008, à 21:58)


Et Paf ça fait des Chocapics !

Hors ligne

#1758 Le 10/12/2008, à 22:00

guguscat

Re : Topic des couche tard (10) !

la 'tite gogole a écrit :
guguscat a écrit :

plop

dehors le feminisme !

Ouais ! Les femmes dehors et les hommes dedans : maintenant, il y a de plus en plus d'hommes au foyer. Torcher les gosses, les emmener à l'école, passer l'aspirateur, faire la cuisine, la lessive, le repassage, etc. etc.

Parait que y'a de plus en plus de gays aussi :s
Enf ait les hommes au foyer sont gays yikes


Un problème non résolu ? Indiquez le en insultant les gens qui tentent de vous aider.

Hors ligne

#1759 Le 10/12/2008, à 22:12

guguscat

Re : Topic des couche tard (10) !

ARGL tout les hommes sont GAYS yikes !!!


Un problème non résolu ? Indiquez le en insultant les gens qui tentent de vous aider.

Hors ligne

#1760 Le 10/12/2008, à 22:14

kinouchou

Re : Topic des couche tard (10) !

@ guguscat je pense que ça va faire plaisir à tous les papas qui s'occupent de leur enfants. Dans leur entourage c'est déjà pas top mais je suis sur que ça n'allait pas aussi loin smile

#1761 Le 10/12/2008, à 22:19

guguscat

Re : Topic des couche tard (10) !

kinouchou a écrit :

@ guguscat je pense que ça va faire plaisir à tous les papas qui s'occupent de leur enfants. Dans leur entourage c'est déjà pas top mais je suis sur que ça n'allait pas aussi loin smile

Oui bien sur malgré tout ce qu'on pourrait me mettre sur le dos, l'ironie me caractérise smile

Edit : mon existence est une blague smile

Dernière modification par guguscat (Le 10/12/2008, à 22:19)


Un problème non résolu ? Indiquez le en insultant les gens qui tentent de vous aider.

Hors ligne

#1762 Le 10/12/2008, à 22:20

\\Ouranos//

Re : Topic des couche tard (10) !

la 'tite gogole a écrit :
tshirtman a écrit :
la 'tite gogole a écrit :

mad

mad

mad

mad


Ubuntu facile, c'est :
- Dire "Bonjour"
- Lire la doc et les règles du forum avant de poster. Savoir poser une question intelligemment.
- Mettre des balises url autour des liens et un tiret à su.

Hors ligne

#1763 Le 10/12/2008, à 22:21

Кຼزດ

Re : Topic des couche tard (10) !

Ouranos999 a écrit :
la 'tite gogole a écrit :
tshirtman a écrit :

mad

mad

mad

mad


dou

Hors ligne

#1764 Le 10/12/2008, à 22:26

\\Ouranos//

Re : Topic des couche tard (10) !

mathieuI a écrit :
Ouranos999 a écrit :
la 'tite gogole a écrit :

mad

mad

mad

mad


Ubuntu facile, c'est :
- Dire "Bonjour"
- Lire la doc et les règles du forum avant de poster. Savoir poser une question intelligemment.
- Mettre des balises url autour des liens et un tiret à su.

Hors ligne

#1765 Le 10/12/2008, à 22:27

kinouchou

Re : Topic des couche tard (10) !

@guguscat je ne l'ai pas pris au premier degré, je suis assez ironique aussi

#1766 Le 10/12/2008, à 22:37

Mornagest

Re : Topic des couche tard (10) !

Ouranos999 a écrit :
mathieuI a écrit :
Ouranos999 a écrit :

mad

mad

mad

smileneutralsadbig_smileyikeswinkhmmtonguelolmadrollcool


N'oubliez pas de consulter la documentation pour vous donner un coup de main !
Merci de modifier le premier message de votre sujet pour ajouter [Résolu] lorsque votre problème l'est :)
Xubuntu 20.04 sur deux ordinateurs, zéro souci. Passez à Xubuntu ;)

Hors ligne

#1767 Le 10/12/2008, à 22:38

Sir Na Kraïou

Re : Topic des couche tard (10) !

Lunatique ?


Descendant de Charlemagne et de LUCA.
Bleu, en l'hommage d'un truc bleu. :'(
C'est pas du bleu.
C'est pas le lac de Genève, c'est le Lac Léman.

Hors ligne

#1768 Le 10/12/2008, à 22:41

spatz

Re : Topic des couche tard (10) !

yikes


PLOP ! Blogueur ! Râleur ! Agnostique ! Architecte ! Floodeur ! Gentil ! Chiant ! Fourbe ! Crâneur ! GNU/Windows/Linuxien ! Machiavélique ! Beau ! Républicain ! Intelligent ! Bosseur ! Très Prétentieux ! Scientifique ! Frimeur ! Étudiant !  De bonne foi ! Perverti ! Ubunteros ! Grand ! Sociable! Altruiste ! Provoc' ! Censé !

Hors ligne

#1769 Le 10/12/2008, à 22:41

tshirtman

Re : Topic des couche tard (10) !

Kamy a écrit :

Ah ben zut alors hmm
J'avais tout de bon, et là c'est le seul truc qui va me bloquer. Ouiiiiin sad

Et il y a un moyen simple d'éviter cela ? Ou alors faut tout changer (et dans ce cas aucune idée de comment faire) ?

Et pour les classes, c'est prévu pour les vacances. En fait c'est le chapitre d'après donc j'ai toujours pas compris l'intérêt mais ça viendras tongue

c'est grave? ça ne change pas l'ordre si il n'y a pas d'ex-eaquo non?

les classes ça a l'intérêt que les différents niveaux de logiques sont bien mieux séparés, et le code est plus simple et plus clair, regarde ce que devient ton tri, si tu définis un score comme un objet et non un simple couple:

classement = {'cariboune' : 3,'wid': 6, 'lynxy': 6, 'John_Lennon': 1, 'darkmustang': 6, 'Sergio': 6, 'le pingou': 5, 'Vinky': 6, 'Camille': 6, 'Dellfan': 6}

class Score:
       def __init__(self, nom, score):
            self.name = name
            self.score = score

       def __sup__(self, autre_score):
            return self.score > autre_score.score

liste = [ Score(nom, score) for nom, score  in classement.items() ]

liste.sort()

bon j'utilise une liste comprehension pour créer liste, mais tu peut le faire avec un for. Enfin c'est bien plus clair pour moi que ton tri ^^.

Hors ligne

#1770 Le 10/12/2008, à 22:47

guguscat

Re : Topic des couche tard (10) !

kinouchou a écrit :

@guguscat je ne l'ai pas pris au premier degré, je suis assez ironique aussi

Tant mieux alors smile


Un problème non résolu ? Indiquez le en insultant les gens qui tentent de vous aider.

Hors ligne

#1771 Le 10/12/2008, à 22:54

Kamy

Re : Topic des couche tard (10) !

@ Tshirtman :
non non, regardes le soucis :

cariboune -> 33
Camille -> 26
lepingou -> 24
darkmustang -> 20
lynxy -> 12
scrat -> 7
wid -> 6
John_Lennon -> 6
Dellfan -> 6
Vinky -> 6
Sergio -> 6
Turtle56 -> 5
c.a -> 4
Shawn -> 2

cariboune -> 33
Camille -> 26
scrat -> 24
Shawn -> 20
Turtle56 -> 12
Vinky -> 7
wid -> 6
lynxy -> 6
darkmustang -> 6
Dellfan -> 6
Sergio -> 6
le pingou -> 5
c.a -> 4
John_Lennon -> 2

Le classement est complètement modifié, et ce juste en changeant le nom du membre, alors qu'il ne devrait pas intervenir dans le tri ...

Pour ton exemple, il me retourne les adresses mémoire :

>>> print liste
[<__main__.Score instance at 0x02BB3D78>, <__main__.Score instance at 0x02BB3BE8>, <__main__.Score instance at 0x02BB3BC0>, <__main__.Score instance at 0x02BB7288>, <__main__.Score instance at 0x02BB7260>, <__main__.Score instance at 0x02BB7350>, <__main__.Score instance at 0x02BB7378>, <__main__.Score instance at 0x02BB73A0>, <__main__.Score instance at 0x02BB73C8>, <__main__.Score instance at 0x02BB73F0>]

Si ça fonctionne c'est probablement plus simple, mais je comprends pas du tout. Enfin t'embêtes pas à m'expliquer c'est pas grave wink


Et Paf ça fait des Chocapics !

Hors ligne

#1772 Le 10/12/2008, à 23:01

Mornagest

Re : Topic des couche tard (10) !

C'est pas un peu prise de tête, ce sujet, finalement ? tongue


N'oubliez pas de consulter la documentation pour vous donner un coup de main !
Merci de modifier le premier message de votre sujet pour ajouter [Résolu] lorsque votre problème l'est :)
Xubuntu 20.04 sur deux ordinateurs, zéro souci. Passez à Xubuntu ;)

Hors ligne

#1773 Le 10/12/2008, à 23:01

tshirtman

Re : Topic des couche tard (10) !

for score in liste:
    print score.nom+' -> '+score.score

ou sinon, tu peut ajouter la méthode __str__ a la classe Score:

class Score:
       def __init__(self, nom, score):
            self.name = name
            self.score = score

       def __sup__(self, autre_score):
            return self.score > autre_score.score

       def __str__(self):
            return self.nom+' -> '+self.score


print liste

marcheras, parce qu'il sait comment représenter ton objet sous forme de texte smile.

pour la différence de classement alors je suppose que c'est ton tris qui se mélange les pinceaux, d'où l'intéret d'en utiliser un qui marche et est éprouvé wink.

Hors ligne

#1774 Le 10/12/2008, à 23:03

tshirtman

Re : Topic des couche tard (10) !

Mornagest a écrit :

C'est pas un peu prise de tête, ce sujet, finalement ? tongue

c'est tout et rien à la fois wink

Hors ligne

#1775 Le 10/12/2008, à 23:05

MattX

Re : Topic des couche tard (10) !

En fait, je trouve que ce sujet est une belle démonstration de l'emmerdement mondial généré par Python.


Marvin: “I am at a rough estimate thirty billion times more intelligent than you. Let me give you an example. Think of a number, any number.” — Zem: “Er, five.” — Marvin: “Wrong. You see?”
Accélération nominale d'un iPad pour fonctionnement optimal : 9.81 m/s² sur 10 mètres, puis arrêt.
GMT-5

Hors ligne