Bonjour,
La deuxième version de chaque jeu est un bonus (point bonus) ou est obligatoire et donc fait partie des 40 points du projet?
Posté 10 novembre 2016 - 02:48
Bonjour Reda,
Rien de bien surprenant, "display" est une procédure, c'est-à-dire qu'elle ne renvoie aucune valeur. Quand tu la composes avec un "print" il est donc normal d'obtenir un "None" comme affichage. Remplace ton "print(display(a,5,4))" par "display(a,5,4)".
P.S. Utiliser un mot clé du langage, "list" en l'occurence, comme nom de variable n'est pas recommandé.
Posté 11 novembre 2016 - 03:14
Bonjour,
Est-il obligatoire de nommer les fonctions demandées exactement comme présentées dans le sujet ?
C'est-à-dire, par exemple, peut-on renommer la fonction `newBoard` en `new_board` afin de pouvoir être le plus proche possible des recommandations de la PEP 008 ?
De même pour les arguments de ces fonctions, comme `n` et `p` que l'on pourrait tout aussi bien nommer, respectivement, `board_height` et `board_width` pour plus de clarté ?
Enfin, l'inclusion de ces paramètres est-elle aussi mandataire ? Par exemple, ma fonction `displayBoard` n'utilise pas les paramètres `n` et `p`, dois-je tout de même les laisser dans la définition des arguments requis par la fonction ?
Merci bien.
Cordialement,
DOURNEAU PIerre-Louis.
Posté 11 novembre 2016 - 10:10
Salut Pierre-Louis,
Plutôt que de recalculer régulièrement les dimensions de cette liste on préfèrera les passer en paramètres de nos sous-programmes.
as-tu tenu compte de cette consigne pour ta fonction display ? si oui, comment t'y es-tu pris sans calculer les dimensions et sans dimensions en paramètre ?
Posté 11 novembre 2016 - 11:30
Bonjour Reda,
En lisant https://docs.python....#for-statements, tu pourras remarquer qu'en Python la déclaration `for` itère directement sur les éléments d'une séquence, comme les listes, contrairement à d'autres langages où le `for` est plus vu comme un "Pour x allant de i à j", comme on le voit en algorithmie au lycée. Cette fonctionnalité de Python nous permet alors de directement écrire :
for row in board: for square in row: # restes des instructions, avec square qui sera égal à # la valeur de la case parcourue, comme 1 pour le cas # d'un pion. # Et si tu as besoin de l'index, tu peux utiliser la fonction enumerate() for row_index, row in enumerate(board): for square_index, square in enumerate(row): # intructions... # Bon à savoir, tu peux mettre un `_` si un élément ne t'intéresse pas for row in board: for square_index, _ in enumerate(row): # instructions...
Voilà !
Posté 14 novembre 2016 - 09:42
Bonjour,
@Pierre-Louis : tu peux effectuer les mineurs changements sur les noms des fonctions que tu évoques. Si en effet tu fais une itération sur les éléments dans certains sous-programmes tu n'es pas obligé de passer les dimensions en paramètres.
@Reda : la réponse de Pierre-Louis est correcte. Tu trouveras d'ailleurs la même réponse dans ton cours.
Posté 14 novembre 2016 - 05:43
Bonjour,
J'ai deja posé cette question mais je n'ai pas eu de réponse alors je répète ma question:
Pour chaque jeu il y a deux versions, les deux versions doivent être dans le même fichier ou dans deux fichiers différents?
Bonjour Chedad, peut être que ma réponse n'est pas celle que t'aurais donné Laurent Gaudefroy, mais comme cela semble important pour toi je vais te donner mon avis :
En règle générale il vaut mieux organiser ton code dans différents fichiers (un best practice si tu préfères), de manière à rendre celui-ci plus lisible et compréhensible. Après si cela n'est pas indiqué directement dans le sujet, cela veut dire que tu peux procéder de la manière que tu souhaites à partir du moment où le rendu est fonctionnel (mais n'oublie pas que souvent des points sont attribués à la propreté de ton projet).
Donc pour résumer, d'après moi il est toujours mieux de bien organiser ton code, pour toi, mais aussi pour les autres développeurs avec qui tu seras amené à collaborer.
Bonne soirée,
A.Sc.1 Nice A.Sc.2 Nice B.Sc Nice
Posté 15 novembre 2016 - 12:23
Bonsoir,
je suis confronté au problème des alias en voulant créer mon plateau de jeu pour le First Attack :
def newBoard(n): #retourne un tableau à n lignes, p colonnes liste = n*[0] #on déclare la première ligne de notre tableau, qui compte n cases vides représentées par des zéros board = n*[liste] #on déclare notre variable "board" qui compte n fois la liste définie juste au dessus return board
Pourtant, dans mon Breaktrough, je n'ai pas ce problème alors que la base est la même, la seule différence étant que dans le second cas, on utilise deux dimensions et qu'on a besoin de configurer le plateau de jeu avec des pions déjà présents.
def newBoard(n,p): #retourne un tableau à n lignes, p colonnes liste = p*[0] #on déclare la première ligne de notre tableau, qui compte p éléments board = n*[liste] #on déclare notre variable "board" qui compte n fois la liste définie juste au dessus board[-1] = p*[2] #on affecte la valeur 2 aux 2 dernières lignes du tableau board[-2] = p*[2] board[0] = p*[1] #on affecte la valeur 1 aux 2 premières lignes du tableau board[1] = p*[1] return board
J'ai essayé différentes façons (dont celles mentionnées dans le cours) de contourner ce problème, sans succès. Quelle solution apporter à ce phénomène d'alias ?
Posté 15 novembre 2016 - 09:31
Bonsoir,
je suis confronté au problème des alias en voulant créer mon plateau de jeu pour le First Attack :
def newBoard(n): #retourne un tableau à n lignes, p colonnes liste = n*[0] #on déclare la première ligne de notre tableau, qui compte n cases vides représentées par des zéros board = n*[liste] #on déclare notre variable "board" qui compte n fois la liste définie juste au dessus return boardPourtant, dans mon Breaktrough, je n'ai pas ce problème alors que la base est la même, la seule différence étant que dans le second cas, on utilise deux dimensions et qu'on a besoin de configurer le plateau de jeu avec des pions déjà présents.
def newBoard(n,p): #retourne un tableau à n lignes, p colonnes liste = p*[0] #on déclare la première ligne de notre tableau, qui compte p éléments board = n*[liste] #on déclare notre variable "board" qui compte n fois la liste définie juste au dessus board[-1] = p*[2] #on affecte la valeur 2 aux 2 dernières lignes du tableau board[-2] = p*[2] board[0] = p*[1] #on affecte la valeur 1 aux 2 premières lignes du tableau board[1] = p*[1] return boardJ'ai essayé différentes façons (dont celles mentionnées dans le cours) de contourner ce problème, sans succès. Quelle solution apporter à ce phénomène d'alias ?
J'ai du mal à comprendre à quoi tu te réfères en parlant "d'alias", juste, fait attention, un objet List en Python est traitée d'une manière spéciale. Si tu assignes à une variable un tableau, cette première ne sera qu'une "référence" à notre tableau. Un peu comme si tu ne mettais qu'une étiquette de plus vers un même emplacement mémoire. C'est sûrement ce dont tu voulais parler en utilisant le terme "d'alias" (je ne sais pas du tout si c'est le terme exact, mais si ça l'est, mes excuses). Pour créer un tableau bi-dimensionnel sans se retrouver avec le même objet List à chaque ligne, tu peux essayer les compréhensions de liste :
def newBoard(n): return [[0 for _ in range(n)] for _ in range(n)]
Ce qui revient à faire, approximativement :
def newBoard(n): board = [] for _ in range(n): row = [] for _ in range(n): row.append(0) board.append(row) return board
Comme tu peux le voir, la compréhension de liste est *un peu* plus compacte et claire.
Avec cela, tu n'as pas de problèmes "d'alias", car tu crées un nouvel objet List pour chaque ligne du tableau.
Posté 15 novembre 2016 - 11:31
Bonjour,
@Chedad : la réponse de Guillaume est tout à fait satisfaisante.
@Reda : la réponse de Pierre-Louis l'est également. Tu es par contre de mauvaise fois quand tu dis "J'ai essayé différentes façons (dont celles mentionnées dans le cours) de contourner ce problème, sans succès." Cette question a été longtemps débattue en cours, voir en particulier les slides 52 et 53 du quatrième ppt. Ton formateur a de plus largement insisté dessus.
@Pierre-Louis : le terme d'alias est tout à fait pertinent.
Posté 15 novembre 2016 - 04:25
Bonjour, dans le premier jeu, sommes nous contraint à faire qu'on joueur ne puisse "manger" le pion de l'adversaire seulement en diagonale? Ou pouvons nous faire qu'un joueur puisse tout de même avancer tout droit sur un pion adverse?
Je tiens à préciser que ce n'est pas clair, ce n'est pas dit dans le texte est c'est sous entendu sur une image.
Posté 15 novembre 2016 - 05:06
Bonjour,
@Pierre-Louis : Merci pour ta réponse, ça m'a aidé à y voir plus clair dans ma fonction.
@Laurent : Suite à notre discussion, il y a effectivement un problème d'alias dans mon premier programme, je m'en suis rendu compte en effectuant des affectations de valeurs dans mon tableau, curieusement cela n'était pas visible à l'affichage. En tout cas, maintenant c'est réglé, merci encore de m'avoir éclairé.
Posté 16 novembre 2016 - 04:22
Bonjour,
Etant arrivé à l'IA du Pleiadis, je me retrouve confronté au probleme de la tactique que doit adopter le joueur : l'IA me semble plus forte que la tactique et je me demandais si c'était handicapant que cette premiere puisse vaincre le joueur plus souvent que prévu ?
Aussi, par tactique, est-elle réellement obligatoire ou on peut donner des conseils ?
Merci par avance !
0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)