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
| from random import *
choix = ['T','C'] # T : Trahison, C : Coopération
def gain(lui,moi):
if lui=='C' and moi=='C':
return 3
elif lui=='C' and moi=='T':
return 5
elif lui=='T' and moi=='C':
return 0
elif lui=='T' and moi=='T':
return 1
# Toujours seul
# ne coopére jamais
def toujours_seul(liste_lui,liste_moi):
return 'T'
# Bonne poire
# coopére toujours
def bonne_poire(liste_lui,liste_moi):
return 'C'
# Aléatoire
# joue avec une probabilité égale 'T' ou 'C'
def aleatoire(liste_lui,liste_moi):
global choix
return choice(choix)
# Donnant donnant
# coopère seulement si l'autre joueur a coopèré au coup précédent.
def donnant_donnant(liste_lui,liste_moi):
if len(liste_lui)>0:
return liste_lui[-1]
else: # premier coup
return 'C'
# Majorité
# coopére seulement si l'autre joueur a coopéré en majorité depuis le début.
def majorite(liste_lui,liste_moi):
if len(liste_lui)>0:
if liste_lui.count('C') > len(liste_lui)//2:
return 'C'
else:
return 'T'
else:
return 'C'
# Stratégies à rajouter ici →
# Le tournoi
liste = {}
strategie = {}
score = {}
duel = {}
liste['Toujours seul'] = []
liste['Bonne poire'] = []
liste['Aléatoire'] = []
liste['Majorité'] = []
liste['Donnant donnant'] = []
# on peut les désactiver ici pour voir ne fonction de ses adversaires
strategie['Toujours seul'] = lambda lui, moi : toujours_seul(lui,moi)
strategie['Bonne poire'] = lambda lui, moi : bonne_poire(lui,moi)
strategie['Majorité'] = lambda lui, moi : majorite(lui,moi)
strategie['Aléatoire'] = lambda lui, moi : aleatoire(lui,moi)
strategie['Donnant donnant'] = lambda lui, moi : donnant_donnant(lui,moi)
nb_total_coups = 10 ## ca peut changer jusqu'à 1000 sinon ça bug sur mon pc
for joueur in liste.keys():
score[joueur] = 0
for i in liste.keys(): # i et j sont les joueurs
for j in liste.keys() :
liste[i] = []
liste[j] = []
if i>=j:
nb_coups = 0
score_joueur1 = 0
score_joueur2 = 0
seed(45226)
while nb_coups < nb_total_coups :
coup_joueur1 = strategie[i](liste[j],liste[i])
coup_joueur2 = strategie[j](liste[i],liste[j])
liste[i].append(coup_joueur1)
if i!=j:
liste[j].append(coup_joueur2)
score_joueur1 += gain(coup_joueur2,coup_joueur1)
score_joueur2 += gain(coup_joueur1,coup_joueur2)
nb_coups += 1
duel[(i,j)] = score_joueur1
if i!=j:
duel[(j,i)] = score_joueur2
score[i] += score_joueur1
if i!=j:
score[j] += score_joueur2
# affichage des résultats
def trie_par_valeur(d):
return sorted(d.items(), key=lambda x: x[1])
def trie_par_cle(d):
return sorted(d.items(), key=lambda x: x[0])
score_trie = trie_par_valeur(score)
score_trie.reverse()
for i in range(0,len(score_trie)):
print(score_trie[i][0],":",score_trie[i][1])
print()
duel_trie = trie_par_cle(duel)
for i in range(0,len(duel_trie)):
print(duel_trie[i][0][0],"contre",duel_trie[i][0][1],"gagne",duel_trie[i][1],"points") |
Partager