|
Salut,
Toujours dans le cadre de mon apprentissage perso de Python, j'essaie d'améliorer un code existant cette fois pour le renforcer et le rendre plus simple. La situation : Sur notre serveur discord nous faisons des ligues super smash bros ultimate et le bot est chargé de centraliser les résultats Les commandes principales : !score <adversaire> <victoire ou défaite> <score> pour rentrer un match !ligue (<pseudo>) affiche ses résultats (ou celui du <pseudo>) dans la ligue en cours !listeligue affiche la liste des inscrits dans la ligue en cours Pour le moment le programme fonctionne mais quand vous verrez le code ... Du coup j'essaie de le reprendre de 0 (depuis j'ai appris certains trucs, j'essaie de rendre plus lisible etc) pour ajouter des fonctions : - lister la liste des matchs restants sur une nouvelle commande pour le gérant de la ligue Du coup je ne trouve pas de solution pour faire ça en Python : 1/ Un utilisateur rentre un score en tapant !score Fugo défaite 2-1 2/ Ce score est stocké quelque part de manière à ce que je puisse m'en servir pour : a/ Quand on tape !ligue Fugo on obtient la liste de tous les matchs faits avec les scores ET la liste des matchs non faits avec la mention "à jouer" à la place du score b/ Quand on tape !matchs on obtient la liste de tous les matchs encore à faire sans doublon (exemple Fugo vs Test mais ne pas afficher Test vs Fugo) c/ Quand on tape !totaux on obtient une liste avec les scores de chaque personne (une victoire = 1 point, une défaite = 0 point) Pour le moment j'ai tout qui fonctionne sauf le b/ que je n'arrive pas à coder mais je pense que ma méthode est barbare et du coup je suis bloqué pour ajouter la fonctionnalité b/ Du coup mes questions Je ne maîtrise pas assez le langage et la manière dont on peut organiser dans les objets (dictionnaire, liste etc) pour avoir une vision globale, Sans demander le code tout fait, comment utiliser quelque chose comme ça : !score Fugo défaite 2-1 Qui se répéterait X fois pour récupérer ce dont j'ai besoin ? Ps: oui, pour le moment mon code est illisible et mal explicité, je le sais ! Le code de ma fonction !score : Code:
avec les fonctions associées : Code:
def liguevs(pseudo): #entrer son résultat de match contre un opposant os.chdir('/volume1/Keepass/bot python/ligue/') if os.path.exists(pseudo): ligue= open(pseudo, "rb") mon_depickler=pickle.Unpickler(ligue) ligueresult=mon_depickler.load() ligue.close() else: ligueresult={} return ligueresult def sauv_ligue(liste,a): #sauvegarder un score liste dans la ligue pour le joueur a os.chdir('/volume1/Keepass/bot python/ligue/') ligue= open(a, "wb") mon_pickler= pickle.Pickler(ligue) mon_pickler.dump(liste) ligue.close() def liste_ligue(): os.chdir('/volume1/Keepass/bot python/ligue/') if os.path.exists(listeligue): ligue= open(listeligue, "rb") mon_depickler=pickle.Unpickler(ligue) liste=mon_depickler.load() ligue.close() else: liste={} return liste def add_listeligue(liste): #ajouter un élément à la liste de la ligue os.chdir('/volume1/Keepass/bot python/ligue/') ligue= open(listeligue, "wb") mon_pickler= pickle.Pickler(ligue) mon_pickler.dump(liste) ligue.close() def rem_listeligue(liste): #supprimer un élément de la liste os.chdir('/volume1/Keepass/bot python/ligue/') ligue=open(listeligue, "wb") #On ouvre le fichier des inscritsligues mon_pickler= pickle.Pickler(ligue) mon_pickler.dump(liste) ligue.close() def tableliguescore(pseudotable): os.chdir('/volume1/Keepass/bot python/ligue/') if os.path.exists(pseudotable): ligue= open(pseudotable, "rb") mon_depickler=pickle.Unpickler(ligue) liste=mon_depickler.load() ligue.close() else: liste=[] return liste def add_tablescore(liste,a): a=str(a) a=a+"table" os.chdir('/volume1/Keepass/bot python/ligue/') ligue= open(a, "wb") mon_pickler= pickle.Pickler(ligue) mon_pickler.dump(liste) ligue.close() def liretable(a): #construire un tableau pouvant être envoyé par le bot avec pseudo / résultat / points marqués os.chdir('/volume1/Keepass/bot python/ligue/') ligue= open(listeligue, "rb") mon_depickler=pickle.Unpickler(ligue) x=mon_depickler.load() ligue.close() xx=len(x) if os.path.exists(a): #on ouvre le fichier score du joueur a tx= open(a, "rb") mon_depickler=pickle.Unpickler(tx) table=mon_depickler.load() tx.close() p=[] #pseudo res=[] #résultat point=[] #points for cle in table.keys(): #on remplit la ligne pseudo avec les résultats déjà enregistrés p.append(cle) for values in table.values(): #on associe les résultats res.append(values) j=0 while j<xx: if x[j] not in p: #On ajoute dans le tableau des résultats les matchs non joués en cherchant les valeurs absentes en comparaison à la ligue p.append(x[j]) res.append("-") j+=1 else: j+=1 i=0 while i<len(p): #On remplit la ligne point du tableau avec 1 pour victoire 0 pour défaite if res[i]=="victoire": point.append("1") i+=1 else: point.append("0") i+=1 ii=0 while ii<len(p): #On remplace par des XX le match du joueur contre lui même if p[ii]==a: break else: ii+=1 res[ii]="X" point[ii]="X" iii=0 while iii<len(p): if p[iii] not in x.values(): #Si le pseudo possède un résultat enregistré mais n'est pas dans la liste des inscrits de la ligue, on le supprime del p[iii] del res[iii] del point[iii] iii+=1 else: iii+=1 return(p,res,point) else: p=[""] res=[""] point=[""] return(p,res,point) def tot(): #faire le total des points de tous les joueurs de la ligue os.chdir('/volume1/Keepass/bot python/ligue/') ligue= open(listeligue, "rb") mon_depickler=pickle.Unpickler(ligue) liste=mon_depickler.load() #on ouvre le fichier des inscrits et on charge la liste ligue.close() x=0 a=[] b=[] while x<len(liste): if os.path.exists(liste[x]): tx= open(liste[x], "rb") mon_depickler=pickle.Unpickler(tx) set=mon_depickler.load() tx.close() c=liretable(liste[x]) a.append(liste[x]) y=c[2] tot=0 xx=0 print(len(y)) while xx<len(y): if y[xx]=="1": tot+=1 xx+=1 else: xx+=1 b.append(tot) x+=1 else: x+=1 return(a,b) def setaverage(): if os.path.exists(sets): os.chdir('/volume1/Keepass/bot python/ligue/') set= open(sets, "rb") mon_depickler=pickle.Unpickler(set) seta=mon_depickler.load() set.close() else: seta={} return seta def setaverageupdate(a): os.chdir('/volume1/Keepass/bot python/ligue/') set= open(sets, "wb") mon_pickler= pickle.Pickler(set) mon_pickler.dump(a) set.close() Grosso modo pour ceux qui ne comprendront rien au code (j'essaie justement de refaire en suivant les préconisations de notation des variables ... !) : J'enregistre dans un fichier la liste des inscrits J'enregistre dans un fichier au nom du pseudo (donc autant de fichier que de joueurs) les résultats de chaque match Et après derrière je bricole avec les fichiers pour afficher ce que je veux ... |
![]() |
|
[Python] J'essaie d'améliorer mon code mais ... (bot discord)
Suivre |
|
Partager | Rechercher |
Suivre |
Connectés sur ce fil1 connecté (0 membre et 1 invité)
Afficher la liste détaillée des connectés
|