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

Python Discussion :

écriture dans un fichier [Python 3.X]


Sujet :

Python

  1. #21
    Futur Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2018
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2018
    Messages : 15
    Points : 7
    Points
    7
    Par défaut
    en gros g besoin d'un fonction qui lit le score pour pouvoir l'afficher sur le coté de l’écran (c un jeu sous pygame)
    et après g une fonction qui en cas de game_over check le score que l'on a fait et le compare a ceux du fichier si notre score peut remplacer un ancien on modifié le score et on demande a l'utilisateur d'entré son nom (ce que je n'arrive pas a faire non plus) et on remplace son nom (pas encore fait se sera la même méthode que pour le score ici)

    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
    import os
     
    def read_score():
        fichier = open("score.txt","r")
        n_ligne = 2
        liste_score = []
        liste_name = []
        while n_ligne < 13:
            score = fichier.readline(n_ligne).rstrip('\n\r').split(",")
            if score == '':
                break;
            liste_score.append(score)
            liste_name.append(score)
            n_ligne = n_ligne + 1
        fichier.close()
        del liste_score[1]
        del liste_score[-5:]
        del liste_name[:6]
        return liste_score
        return liste_name
     
    def change_score(score):
         #new fonction
        def remplace_score(score,score_remplacer):
             #variable
            une = True
             #methode
            score_remplacer = str(score_remplacer)
            for ch in ["]","[","'"]:
                if ch in score_remplacer:
                    score_remplacer = score_remplacer.replace(ch,"")
            with open(u'score.txt', 'r') as texte, open(u'nouveau_score.txt', 'w') as nouveau_texte:
                for line in texte:
                    if score_remplacer in line:
                        if une == True:
                            nouveau_texte.write(u'{}\n'.format(str(score)))
                        else:
                            nouveau_texte.write(line)
                        une = False
                    else:
                        nouveau_texte.write(line)
            os.remove(u'score.txt')
            os.rename(u'nouveau_score.txt', u'score.txt')
         #appel de fonction
        read_score()
         #methode
        liste_score = liste_score
        if score < liste_score[0]:
            leave_play_boutons()
        elif score <= liste_score[1]:
            remplace_score(score,liste_score[0])
        elif score <= liste_score[2]:
            remplace_score(score,liste_score[1])
        elif score <= liste_score[3]:
            remplace_score(score,liste_score[2])
        elif score <= liste_score[4]:
            remplace_score(score,liste_score[3])
        elif score > liste_score[4]:
            remplace_score(score,liste_score[4])
     
     
     
     
    #ecette fonction va aller après au même endroit que remplace_score
     
    def remplace_name(name_remplacer):
         #new fonction
        def name_input():
    Le fichier "score.txt" est composé comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    score du 1
    score du 2
    score du 3
    score du 4
    score du 5
    nom du 1
    nom du 2
    nom du 3
    nom du 4
    nom du 5

  2. #22
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 172
    Points : 163
    Points
    163
    Par défaut
    J'essaie de tout comprendre....

    Par contre je tiens à te signaler que tel quel ton code remplacera toutes les occurences, pas seulement la premiere....

    Je regarde un peu tout ça....

    Et dans score.txt tu as genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    555
    343
    221
    fawn
    alex
    plop
    Comment définis-tu le nombre de lignes ? Je vois que tu t'arrêtes à 13...

  3. #23
    Futur Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2018
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2018
    Messages : 15
    Points : 7
    Points
    7
    Par défaut
    mon code ne change que la première occurrence correct pas les autre tkt g testé
    et je veut que garder 5 scores pas plus le 13 est pour avoir les 10 (5 scores + 5 noms)
    je sais pas logique, je comprend pas non plus

  4. #24
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 427
    Points : 37 009
    Points
    37 009
    Par défaut
    Salut,
    Citation Envoyé par Nalofox Voir le message
    Le fichier "score.txt" est composé comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    score du 1
    score du 2
    score du 3
    score du 4
    score du 5
    nom du 1
    nom du 2
    nom du 3
    nom du 4
    nom du 5
    Déjà vous vous simplifieriez la vie en ayant nom et score sur la même ligne avec un séparateur du genre '#' et en utilisant un dictionnaire pour avoir des scores par joueur.
    En tout cas, mettre à jour le score du joueur N, çà ne le fait pas encore.
    - W

  5. #25
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 172
    Points : 163
    Points
    163
    Par défaut
    Maintenant que j'ai une vision plus globale du truc, je pense que l'on ne s'y prend pas bien....

    Ce n'est pas très difficile à faire mais il faut changer de méthode....

    Je vais me tenter ça, bien entendu ce n'est pas pygame qui m'enverra les scores, mais plutot des textCtrl

    En fait il faut faire un système de ranking comme sur les vieilles bornes d'arcade....

  6. #26
    Futur Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2018
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2018
    Messages : 15
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,

    Déjà vous vous simplifieriez la vie en ayant nom et score sur la même ligne avec un séparateur du genre '#' et en utilisant un dictionnaire pour avoir des scores par joueur.
    En tout cas, mettre à jour le score du joueur N, çà ne le fait pas encore.
    - W
    Il fait ce que je veut je me suis mal exprimer au départ surement il cherche le score juste au dessus de lui et remplace le précédent

    avec ce 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
    def read_score():
        fichier = open("score2.txt","r")
        n_ligne = 2
        liste = []
        while n_ligne < 13:
            ch = fichier.readline(n_ligne)
            ch = str(ch)
            if ch == '':
                break;
            for x in ch.split("#"):
                liste.append(x)
            n_ligne = n_ligne + 1
        fichier.close()
     
        print(liste)
     
     
    read_score()
    j'ai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ['33', '', 'pp', '\n', '55', 'qd', 'pz\n', '65', 'mmd\n', '120', 'loo\n', '365', 'poi\n']

  7. #27
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 172
    Points : 163
    Points
    163
    Par défaut
    Qu'est ce qui envoie les données ? Scores et noms ? C'est PyGame ?

  8. #28
    Futur Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2018
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2018
    Messages : 15
    Points : 7
    Points
    7
    Par défaut
    score c'est une fonction qui tourne avec un timer et qui augmente le score au fil du temp et le nom je voudrais faire une zone de texte ou l'on peut renter son nom (3/4 caractères)

  9. #29
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 427
    Points : 37 009
    Points
    37 009
    Par défaut
    Citation Envoyé par Nalofox Voir le message
    Il fait ce que je veut je me suis mal exprimer au départ surement il cherche le score juste au dessus de lui et remplace le précédent

    avec ce 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
    def read_score():
        fichier = open("score2.txt","r")
        n_ligne = 2
        liste = []
        while n_ligne < 13:
            ch = fichier.readline(n_ligne)
            ch = str(ch)
            if ch == '':
                break;
            for x in ch.split("#"):
                liste.append(x)
            n_ligne = n_ligne + 1
        fichier.close()
     
        print(liste)
     
     
    read_score()
    j'ai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ['33', '', 'pp', '\n', '55', 'qd', 'pz\n', '65', 'mmd\n', '120', 'loo\n', '365', 'poi\n']
    Si vous écrivez fichier.readline(n_ligne) çà va retourner les "n_ligne" caractères (à lire dans le fichier) suivants et en plus vous changez cette valeur à chaque itération. Ce que vous voulez c'est lire une ligne entière... et donc ne pas passer de paramètre à .readline le fait tout seul.
    Et je ne comprends pas trop ce que vous cherchez à faire avec ce compteur ( "n_ligne").

    - W

  10. #30
    Futur Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2018
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2018
    Messages : 15
    Points : 7
    Points
    7
    Par défaut
    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
    import os
     
    def read_score():
        fichier = open("score2.txt","r")
        liste = []
        for i in range(1,6):
            ch = fichier.readline()
            ch = str(ch).replace('\n','')
            for x in ch.split("#"):
                liste.append(x)
        fichier.close()
        return liste
     
    def change_score(score):
         #new fonction
        def remplace(score,remplace,name):
             #variable
            occurence = True
             #methode
            with open(u'score2.txt', 'r') as texte, open(u'nouveau_score.txt', 'w') as nouveau_texte:
                for line in texte:
                    if (str(remplace).replace("'",'')) in line:
                        if occurence == True:
                            nouveau_texte.write(u'{}#{}\n'.format((str(score)),(str(name))))
                        else:
                            nouveau_texte.write(line)
                        occurence = False
                    else:
                        nouveau_texte.write(line)
            os.remove(u'score2.txt')
            os.rename(u'nouveau_score.txt', u'score2.txt')
         #appel de fonction
        read_score()
         #methode
        if score < liste[0]:
            leave_play_boutons()
        elif score <= liste[2]:
            remplace(score,liste[0],name)
        elif score <= liste[4]:
            remplace(score,liste[2],name)
        elif score <= liste[6]:
            remplace(score,liste[4],name)
        elif score <= liste[8]:
            remplace(score,liste[6],name)
        elif score > liste[8]:
            remplace(score,liste[8],name)
    Voila le code mieux fait
    Ici le fichier "score.txt"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    33#pp
    55#qdpz
    65#mmd
    55#uol
    365#poi
    Me reste plus qu'a faire la fonction qui va return le name
    Vous pouvez m'aider personne m'a répondu sur mon post par rapport a cette fonction

    a et peut t'on faire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    def x(test):
    def y():
     
    x(y())

  11. #31
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 172
    Points : 163
    Points
    163
    Par défaut
    Bon j'ai tout recommencé et je pense m'être bien rapproché du truc....

    Contenu de mon fichier "score.txt" avant lancement du script :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    gigi 999
    dada 980
    doudou 760
    lilio 700
    Script :
    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
    def SendScore(self,evt):
            score_entry=self.txtScoreBox.GetValue()
            nom_entry=self.txtNomBox.GetValue()
            dico = {}
            une_occurence=0 
            if score_entry and nom_entry !='':
                dico[nom_entry]=score_entry
                for cle,valeur in dico.items():
                    scorenom=cle+u" "+str(valeur)
                    #print scorenom
                with open(u"score.txt",u"r") as texte,open(u'nouveau_score.txt', u'w') as nouveau_texte:
                    lignes = texte.readlines()
                        for data in lignes:
                            if une_occurence==0:
                                score_propre=data.split(u' ')[-1].rstrip(u'\n')
                                if int(valeur)>int(score_propre):
                                    nouveau_texte.write(scorenom+u'\n')
                                    une_occurence=1
                                else:
                                    nouveau_texte.write(data)
                            else:
                                nouveau_texte.write(data)
                os.remove(u'score.txt')
                os.rename(u'nouveau_score.txt', u'score.txt')           
            evt.Skip()
    Quand je lance le script complet j'ai ceci pour émuler le scoring :

    Nom : demo1.jpg
Affichages : 133
Taille : 24,3 Ko

    Ensuite j'appuie sur entrée pour faire comme si je recevais un score et un nom d'une source exterieure, et j'obtiens ceci "score.txt" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    gigi 999
    dada 980
    Franck 965
    lilio 700
    Franck a pris la place de doudou....Seul hic il faut d'emblais mettre les 10 lignes de score quitte a les mettre a 0 par defaut...

    Du coup j'ai ajouté un bouton "Réinitialiser" qui permet de créer un fichier "score.txt" comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    def InitScore(self,evt):
            i=0
            os.remove(u"score.txt")
            with open(u"score.txt",u"a") as texte:
                while i<10:
                    texte.write("joueur 0\n")
                    i+=1
            evt.Skip()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    joueur 0
    joueur 0
    joueur 0
    joueur 0
    joueur 0
    joueur 0
    joueur 0
    joueur 0
    joueur 0
    joueur 0
    Nom : demo1.jpg
Affichages : 139
Taille : 30,9 Ko

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    didi 23
    joueur 0
    joueur 0
    joueur 0
    joueur 0
    joueur 0
    joueur 0
    joueur 0
    joueur 0
    joueur 0
    Du coup tout fonctionne

    Je mets le code en pièce jointe mais il faut wx comme d'habitude....
    Images attachées Images attachées  
    Fichiers attachés Fichiers attachés

  12. #32
    Futur Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2018
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2018
    Messages : 15
    Points : 7
    Points
    7
    Par défaut
    merci je t’avoue que j'ai pas tout compris, tu utilise das chooses que je ne connait pas
    et j'ai connait pas bien le fonctionnement des class
    et je n'arrive pas a installer le module wx

    Merci pour t'on code mais je me débrouiller moi même sinon il n'y a plus grand intérêt et de tout façon si je dit que je fait on me croira jamais

  13. #33
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 038
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 038
    Points : 8 405
    Points
    8 405
    Par défaut
    salut,

    un exemple à priori simple :
    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
    def getScoreboard(fichier):
       '''fonction qui lit et retourne la liste des [nom, score] (donc une liste de listes)
       '''
       sb = []
       with open(fichier, 'r') as f:
          for ligne in f:
             nom, score = ligne.split()
             sb.append([nom, int(score)])
       return sb
     
    def writeScoreboard(fichier, sb):
       '''fonction qui écrit le scoreboard dans un fichier
     
       note: on appelle 1 seule fois write()
       '''
       contenu = ''
       with open(fichier, 'w') as f:
          for ligne in sb:
             contenu += '{} {}\n'.format(*ligne)
          f.write(contenu)
     
    def triScores(sb):
       '''fonction qui trie et renvoie le scoreboard
     
       seule la notation lambda est un peu touchy :
       "pour tout element de la liste, on trie en fonction de element[1]" (donc le score, pas le nom)
       '''
       return sorted(sb, key=lambda x:x[1], reverse=True)
     
    if __name__ == '__main__':
       scoreboard = getScoreboard('hiscores.txt')   # on lit les scores depuis le fichier
       nom   = input('Nom du joueur: ')
       score = input('Nouveau score: ')
       scoreboard.append([nom, int(score)])         # on rajoute un nouveau score a la liste
       scoreboard = triScores(scoreboard)[:5]       # on trie les scores et on garde que les 5 meilleurs
       writeScoreboard('hiscores2.txt', scoreboard) # on écrit les scores dans un autre fichier (pour comparer)
    à l'exécution (linux) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $ ./script.py
    Nom du joueur: bob
    Nouveau score: 11
     
    $ diff -y hiscores.txt hiscores2.txt
    pouet 16                                                        pouet 16
    bouzin 15                                                       bouzin 15
                                                                  > bob 11
    coincoin 8                                                      coincoin 8
    toto 5                                                          toto 5
    gruik 2                                                       <

  14. #34
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 172
    Points : 163
    Points
    163
    Par défaut
    Citation Envoyé par Nalofox Voir le message
    merci je t’avoue que j'ai pas tout compris, tu utilise das chooses que je ne connait pas
    et j'ai connait pas bien le fonctionnement des class
    et je n'arrive pas a installer le module wx

    Merci pour t'on code mais je me débrouiller moi même sinon il n'y a plus grand intérêt et de tout façon si je dit que je fait on me croira jamais
    Alors en fait ce qui est a prendre dans le code c'est juste la fonction de scoring....Que je t'ai mise à part et pourquoi pas la petite fonction d'initialisation du fichier "score.txt"...

    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
    def SendScore(self,evt): #Tu peux changer ces parametres "self" et "evt"
            score_entry=self.txtScoreBox.GetValue() #Tu peux enlever cette ligne qui sert a récupérer le score envoyé
            nom_entry=self.txtNomBox.GetValue() #Tu peux enlever cette ligne qui sert a récupérer le nom envoyé
            dico = {} #On crée un dico pour stocker les entrées
            une_occurence=0 #Toujours la var pour catch juste la premiere occurence
            if score_entry and nom_entry !='': #On vérifie que l'on a bien reçu un score et un nom (à toi d'adapter d'ou tu les reçois)
                dico[nom_entry]=score_entry #On associe le score à la clé "nom"
                for cle,valeur in dico.items(): #On fait une boucle pour recuperer sous forme cle+u" "+str(valeur) (soit ex: pierre 123)
                    scorenom=cle+u" "+str(valeur)
                #A partir de là on reprend le truc classique pour ecrire la premiere ocurence et remplacer la ligne dans "score.txt"
                with open(u"score.txt",u"r") as texte,open(u'nouveau_score.txt', u'w') as nouveau_texte:
                    lignes = texte.readlines()
                        for data in lignes:
                            if une_occurence==0:
                                score_propre=data.split(u' ')[-1].rstrip(u'\n')
                                if int(valeur)>int(score_propre):
                                    nouveau_texte.write(scorenom+u'\n')
                                    une_occurence=1
                                else:
                                    nouveau_texte.write(data)
                            else:
                                nouveau_texte.write(data)
                os.remove(u'score.txt')
                os.rename(u'nouveau_score.txt', u'score.txt')
    J'espère que c'est plus clair avec les commentaires

    Sinon à tout hasard, perso je l'utilise pour tout ce qui est graphique Installer WxPython

    Ah oui l'initialisation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    def InitScore(self,evt):#Tu peux changer ces parametres "self" et "evt"
            i=0
            os.remove(u"score.txt")#On detruit le fichier "score.txt"
            with open(u"score.txt",u"a") as texte:#On le recrée
                while i<10:#Ici le nombre de "scores" que tu veux stocker, j''ai mis 10 mais tu peux mettre 5
                    texte.write("joueur 0\n")#On ecrit "joueur0" le nombre de fois definit dans la boucle
                    i+=1
    Bon comme il est 6h du mat et que je ne sais pas quoi faire, je t'ai refais une version qui je pense te parlera plus....

    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
    import os
     
    def InitScore():
            i=0
            os.remove(u"score.txt")#On detruit le fichier "score.txt"
            with open(u"score.txt",u"a") as texte:#On le recrée
                while i<5:#Ici le nombre de "scores" que tu veux stocker
                    texte.write("joueur 0\n")#On ecrit "joueur0" le nombre de fois definit dans la boucle
                    i+=1
     
    def SendScore(nom,score):
            score_entry=score 
            nom_entry=nom 
            #Cependant il te faut adapter les deux premieres lignes pour bien "recevoir" un score et un nom dans les variables "score_entry" et "nom_entry"
            dico = {} #On crée un dico pour stocker les entrées
            une_occurence=0 #Toujours la var pour catch juste la premiere occurence
            if score_entry and nom_entry !='': #On vérifie que l'on a bien reçu un score et un nom (à toi d'adapter d'ou tu les reçois)
                dico[nom_entry]=score_entry #On associe le score à la clé "nom"
                for cle,valeur in dico.items(): #On fait une boucle pour recuperer sous forme cle+u" "+str(valeur) (soit ex: pierre 123)
                    scorenom=cle+u" "+str(valeur)
                #A partir de là on reprend le truc classique pour ecrire la premiere ocurence et remplacer la ligne dans "score.txt"
                with open(u"score.txt",u"r") as texte,open(u'nouveau_score.txt', u'w') as nouveau_texte:
                    lignes = texte.readlines()
                    for data in lignes:
                        if une_occurence==0:
                            score_propre=data.split(u' ')[-1].rstrip(u'\n')
                            if int(valeur)>int(score_propre):
                                nouveau_texte.write(scorenom+u'\n')
                                une_occurence=1
                            else:
                                nouveau_texte.write(data)
                        else:
                            nouveau_texte.write(data)
                os.remove(u'score.txt')
                os.rename(u'nouveau_score.txt', u'score.txt')
     
    #InitScore() #Je la mets en commentaire car il ne faut l'appeler qu'une fois ! (et je l'ai deja fait :p)
    SendScore('Jean',999)
    SendScore('Alex',656)
    SendScore('Pierre',545)
    SendScore('Paul',233)
    SendScore('Dindon',1)
    Je viens de capter un hic, il me faut "decaler" les scores plutot que les remplacer....Bon je regarderai ça plus tard

    Voilà voilà

  15. #35
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 172
    Points : 163
    Points
    163
    Par défaut
    Voilààààà j'ai enfin fini

    Voici le code final qui marche nickel:

    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
    import os
     
    def InitScore():
            i=0
            os.remove(u"score.txt")#On detruit le fichier "score.txt"
            with open(u"score.txt",u"a") as texte:#On le recrée
                while i<5:#Ici le nombre de "scores" que tu veux stocker
                    texte.write("joueur 0\n")#On ecrit "joueur0" le nombre de fois definit dans la boucle
                    i+=1
     
    def SendScore(nom,score):
            score_entry=score 
            nom_entry=nom
            compteur=0
            memo=[]
            dico = {} #On crée un dico pour stocker les entrées
            une_occurence=0 #Toujours la var pour catch juste la premiere occurence
            if score_entry and nom_entry !='': #On vérifie que l'on a bien reçu un score et un nom (à toi d'adapter d'ou tu les reçois)
                dico[nom_entry]=score_entry #On associe le score à la clé "nom"
                for cle,valeur in dico.items(): #On fait une boucle pour recuperer sous forme cle+u" "+str(valeur) (soit ex: pierre 123)
                    scorenom=cle+u" "+str(valeur)
                #A partir de là on reprend le truc classique pour ecrire la premiere ocurence et remplacer la ligne dans "score.txt"
                with open(u"score.txt",u"r") as texte,open(u'nouveau_score.txt', u'w') as nouveau_texte:
                    lignes = texte.readlines()
                    for data in lignes:
                        if une_occurence==0:
                            score_propre=data.split(u' ')[-1].rstrip(u'\n')
                            if int(valeur)>int(score_propre):
                                del lignes[-1]#On efface la derniere ligne du fichier
                                i=0
                                nouveau_texte.write(scorenom+u'\n')
                                while i<len(lignes)-compteur:
                                        memo.append(lignes[compteur+i])
                                        i+=1
                                for values in memo:
                                        memo_propre=values.rstrip(u'\n')
                                        nouveau_texte.write(memo_propre+u'\n')
                                une_occurence=1
                            else:
                                compteur+=1#Marqueur du numero de ligne remplacée
                                nouveau_texte.write(data)
     
                os.remove(u'score.txt')
                os.rename(u'nouveau_score.txt', u'score.txt')   
     
    #InitScore() #Je la mets en commentaire car il ne faut l'appeler qu'une fois ! (et je l'ai deja fait :p)
    SendScore('Roxxor8',600)
    Enjoy

  16. #36
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 172
    Points : 163
    Points
    163
    Par défaut
    Une version plus complète ici : Module Ranking Arcade

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Réponses: 3
    Dernier message: 18/08/2005, 12h57
  2. [PERL] Problème lecture/écriture dans un fichier
    Par LE NEINDRE dans le forum Langage
    Réponses: 4
    Dernier message: 17/08/2005, 14h15
  3. Problème d'écriture dans un fichier xml
    Par vanoou dans le forum C++Builder
    Réponses: 1
    Dernier message: 13/07/2005, 03h28
  4. Passer à la ligne lors de l'écriture dans un fichier
    Par hams dans le forum Assembleur
    Réponses: 4
    Dernier message: 17/04/2005, 20h25
  5. [JUnit] Junit écriture dans un fichier
    Par mikael35 dans le forum Tests et Performance
    Réponses: 1
    Dernier message: 10/08/2004, 14h11

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