Bonjour et bravo !
Je n’y suis pas pour grand chose
Pardon pour le message qui suit qui est un peu indigeste.
Quelques remarques :
1. C’est cool d’avoir mis le code sur git mais le but principal de l’outil est de permettre de suivre les changements des fichiers, en mettant des archives dessus ce n’est pas possible (il aurait fallu jamais compresser en zip et simplement ajouter l’ensemble des fichiers au fur et à mesure).
-
C’est bien d’avoir essayé de documenté un peu le code, c’est en faisant qu’on apprend !
-
En python c’est souvent le style de pep8 (https://www.python.org/dev/peps/pep-0008/) qui est utilisé pour la présentation du code. C’est intéressant de le suivre pour avoir un style de code uniforme lorsqu’on travaille à plusieurs (ce qui était le cas ici !). Il est tout à fait possible de configurer son éditeur de code pour avoir du linting automatique par rapport aux règles de pep8. En particulier snake_case
plutôt que camelCase
.
-
Au niveau du code en lui même : il y a beaucoup d’endroits où vous pourriez simplifier des éléments de code :
Voilà quelques idées (dans la dernière version du code), je n’ai fait que regardé rapidement (mais c’est applicable à pleins d’autres endroits).
Dans code_tarot_definition.py
De manière générale il y a beaucoup de code dupliqué, peut-être qu’il aurait été intéressant de créer des variables globales pour les différentes cartes du jeu (au moins pour les listes sur lesquelles vous itérez systématiquement), à savoir : color = ["D","H","C","S"]
,
high_values = ["1","2","3","4","5","6","7","8","9","10","J","C","Q","K"]
et
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21]
.
Ainsi on peut transformer :
1
def cardDeck():
"""create and shuffle a deck of cards
Returns:
list: list of cards
"""
color = ["D","H","C","S"]
high_values = ["1","2","3","4","5","6","7","8","9","10","J","C","Q","K"]
deck = [(x,y) for y in color for x in high_values]
for x in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21]:
deck.append((str(x),"A"))
deck.append(('fool', 'A'))
random.shuffle(deck)
return deck
en
COLORS = ["D", "H", "C", "S"]
HIGH_VALUES = [str(x) for x in range(1, 11] + ["J","C","Q","K"]
ATOUTS = [str(x) for x in range(1, 22)] + ["fool"]
def cardDeck():
deck = [(x,y) for y in COLORS for x in HIGH_VALUES] + [(x, "A") for x in ATOUTS]
random.shuffle(deck)
return deck
puis en profiter pour réutiliser COLORS
, HIGH_VALUES
et ATOUTS
autant que possible.
De la même manière, il faut essayer de ne pas se répéter (https://fr.wikipedia.org/wiki/Ne_vous_r%C3%A9p%C3%A9tez_pas)
Vous pouvez modifier :
2
def distribution(listA, listP1, listP2, listP3, listP4, Deck):
if listA == listP1:
for x in [0, 1, 2]:
for y in [0, 12, 24, 36, 48, 60]:
listA.append(Deck[x + y])
if listA == listP2:
for x in [3, 4, 5]:
for y in [0, 12, 24, 36, 48, 60]:
listA.append(Deck[x + y])
if listA == listP3:
for x in [6, 7, 8]:
for y in [0, 12, 24, 36, 48, 60]:
listA.append(Deck[x + y])
if listA == listP4:
for x in [9, 10, 11]:
for y in [0, 12, 24, 36, 48, 60]:
listA.append(Deck[x + y])
return listA
en
def distribution(listA, listP1, listP2, listP3, listP4, deck):
initial_x = [listP1, listP2, listP3, listP4].index(listA) * 3
for x in [initial_x, initial_x + 1, initial_x + 2]:
for y in range(0, 5 * 12 + 1, 12):
listA.append(deck[x + y])
return listA
De manière générale, pas besoin de passer en entrée de votre fonction la liste où vous voulez ajouter des éléments. C’est parfois plus simple / pratique de la créer sur le champ.
(On suppose que player_id = 0 / 1 / 2 / 3)
def distribution(player_id, deck):
initial_x = player_id * 3
listA = []
for x in [initial_x, initial_x + 1, initial_x + 2]:
for y in range(0, 5 * 12 + 1, 12):
listA.append(deck[x + y])
return listA
etc.
Puis plutôt que :
p1 = card_sorted(distribution(p1, p1, p2, p3, p4, finalDeck))
p2 = card_sorted(distribution(p2, p1, p2, p3, p4, finalDeck))
p3 = card_sorted(distribution(p3, p1, p2, p3, p4, finalDeck))
p4 = card_sorted(distribution(p4, p1, p2, p3, p4, finalDeck))
on peut faire
p1, p2, p3, p4 = [distribution(player_id, deck) for player_id in range(0, 4)]
3
De manière générale, utiliser les compréhensions lorsque c’est possible :
nb_sort = []
for i in listB:
nb_sort_i = transformation[i]
nb_sort.append(nb_sort_i)
nb_sort.sort()
devient
nb_sort = [transformation[i] for i in listB]
nb_sort.sort()
Un article de ZdS qui donne explique quelques "directions" lorsqu’on programme en python https://zestedesavoir.com/articles/1079/les-secrets-dun-code-pythonique/
Bonne continuation et bon apprentissage !