Besoins d'aide sur un programme python
Salut à tous;
Je suis en première bac NSI et j'ai un programme à faire en python. Je suis novice et le prof nous a donné un exercice à rendre, mais il ne nous a rien expliqué. C'est-à-dire qu'on ne sait rien, jugez par vous même :

Du coup j'aimerais savoir ce que je devrais faire exactement. Si quelqu'un a la gentillesse de m'aider (sur discord ou bien tout autre application). J'ai bien dit "de m'aider", car je ne veux pas les solution, mais je veux pouvoir qu'on m'aiguille.
Je vous remercie d'avance
Je suis en première bac NSI et j'ai un programme à faire en python. Je suis novice et le prof nous a donné un exercice à rendre, mais il ne nous a rien expliqué. C'est-à-dire qu'on ne sait rien, jugez par vous même :

Du coup j'aimerais savoir ce que je devrais faire exactement. Si quelqu'un a la gentillesse de m'aider (sur discord ou bien tout autre application). J'ai bien dit "de m'aider", car je ne veux pas les solution, mais je veux pouvoir qu'on m'aiguille.
Je vous remercie d'avance
A voir également:
- Besoins d'aide sur un programme python
- Citizen code python avis - Accueil - Outils
- Programme demarrage windows - Guide
- Mettre en veille un programme - Guide
- Desinstaller un programme sur windows - Guide
- Forcer la fermeture d'un programme - Guide
4 réponses
Bonjour
T’aider / t’aiguiller oui, mais il nous faut de quoi « démarrer ».
Voir ici https://www.commentcamarche.net/infos/25899-demander-de-l-aide-pour-vos-exercices-sur-ccm/
T’aider / t’aiguiller oui, mais il nous faut de quoi « démarrer ».
Voir ici https://www.commentcamarche.net/infos/25899-demander-de-l-aide-pour-vos-exercices-sur-ccm/
RYn_9741
Messages postés
10
Date d'inscription
Statut
Membre
Dernière intervention
justement je n'ai aucune de comment commencer , ca fait littéralement 2h que je suis fixé sur mon pc a essayé de trouver de la doc mais je trouve vraiment rien c'est pour ca que je me tourne vers ccm en espérant que quelqu'un me donne un début
OK.
L’exercice qui t’es donné n’est pas un exercice pour un primo débutant.
Il faut déjà quelques bases.
Je dirais même que c’est probablement une suite.
Si c’est bien le cas, tu devrais pouvoir au moins appliquer ce qui est écrit dans l’article que je t’ai mis en lien
L’exercice qui t’es donné n’est pas un exercice pour un primo débutant.
Il faut déjà quelques bases.
Je dirais même que c’est probablement une suite.
Si c’est bien le cas, tu devrais pouvoir au moins appliquer ce qui est écrit dans l’article que je t’ai mis en lien
As tu déjà eu un exercice sur le tictactoe?
Penses tu que ce que tu as écrit réponde à « à partir de la position p »?
Penses tu que ce que tu as écrit réponde à « à partir de la position p »?
Bonjour RYn_9741
Bienvenue sur le forum.
Remarques préalables
Plusieurs choses avant de répondre à tes questions :
Concernant ton exercice
Tu n'as pas besoin d'écrire le code en entier pour tester une fonction en python. Tu peux tout à fait copier coller ta fonction dans ton interpréteur python et l'appeler pour voir ce qu'elle retourne. Ce sera pour toi l'occasion de tester tes fonctions au fur et à mesure de leur développement.
Sous Windows, l'interpréteur python se lance par exemple avec la commande
Il existe aussi des outils "graphiques". Ce n'est pas nécessaire mais plus confortable.
Ensuite, ton exercice n'est pas évident si tu débutes, mais pas d'affolement.
Le but final de ton exercice est d'énumérer les grilles gagnantes au jeu du tic tac toe (aka morpion).
Pour cela, il va te falloir écrire plusieurs fonctions auxiliaires, que tu combineras à la fin pour faire le programme final. Chaque question te fait écrire chacune de ces fonctions auxiliaires, avant de les rassembler dans la question G. Tu peux donc voir chacune des questions A à F comme de petits exercices indépendants.
Dans ce qui suit, je suppose que l'exercice est demandé pour une grille 3 x 3 mais sache que tout l'exercice se généralise pour des grilles de taille N x N.
Ensuite, j'avoue que la terminologie choisie dans l'exercice n'est pas forcément des plus parlante, alors clarifions-la.
Une fois ces définitions données, l'exercice devrait être plus compréhensible. Reste à voir maintenant comment l'aborder.
a)
Il faut choisir comment tu modélises une position. Ensuite pour trouver la prochaine position, il faut ajouter un symbole x ou o dans une case encore non remplie.
En toute rigueur, il faudrait que la fonction prenne en paramètre le joueur courant pour qu'on sache si c'est un x ou un o qu'il faut ajouter. On peut compter le nombre de x et de o présents dans la grille pour l'inférer, mais en cas d'égalité, on ne sait pas forcément à qui c'est le tour. Vue la suite de l'exercice, ce n'est pas forcément important, cela signifie juste que certains mouvement consécutif ne correspondent pas à quelque chose de "possible" dans une partie normale, mais ça ne veut pas dire que cette position ne peut pas être atteinte dans l'absolu.
Donc en gros :
b)
Ici il faut écrire une boucle qui va parcourir ta grille afin de vérifier si l'un des joueur a gagné en formant une ligne horizontale, verticale, ou diagonale de longueur 3. Si tu utilises
c)
Cette question est un peu plus facile, car il suffit de vérifier si en jouant dans une case vide, le joueur player (donc x ou o) gagne en réutilisant la fonction codée dans la question b.
d)
Voir la définition d'inversion, si tu es arrivé à faire la question b, ce devrait être une formalité, car celle-ci est plutôt plus facile.
e)
Ici, il n'y a rien à faire à part utiliser l'opérateur
f)
Dans cette question aussi, il n'y a rien à faire : si tu utilises une liste ou un set, il suffit d'appeler la méthode adéquate (
g)
L'exercice n'est pas extrêmement clair sur la manière dont doivent être générées les positions, ni même si elles sont atteignables dans une partie normale. Il serait logique que oui et du coup la fonction
Bref, ici je pense que tu te contentes simplement de partir d'une grille vide, de faire des mouvements aléatoire jusqu'à ce qu'un joueur gagne et d'ajouter la configuration trouvée si elle n'est pas déjà connue.
Je n'ai pas vraiment compris ce que ton enseignant attendait dans son pseudo code. Si tu trouves une position gagnante, la position inversée (en admettant que ma définition soit correcte) est aussi gagnante, et donc on aurait envie d'insérer les deux en base (mais ça n'est pas ce qui est fait dans le pseudo code). Par ailleurs, si une grille est gagnante, la faire pivoter d'un quart de tour ou la renverser par symétrie horizontale ou verticale la laisse gagnante. Cela signifie que quand tu trouves un position gagnantes, tu en trouves en réalité 12 (1 position trouvée + 3 induites par rotation + 2 induites par symétrie) * le nombre de joueurs.
Bref... bon courage pour ton exercice, et n'hésite pas à discuter avec ton enseignant(e) qui sera ravi(e) de te guider :-)
Bienvenue sur le forum.
Remarques préalables
Plusieurs choses avant de répondre à tes questions :
- Merci de soigner l'orthographe (accents, majuscules, accords...) et la ponctuation.
- Merci d'éviter les captures d'écran quand un simple copier coller suffit (plus écologique et plus pratique pour tout le monde)
- Merci d'utiliser les balises de code quand tu partages du code.
- Merci d'être un peu moins incisif envers ton enseignant, nous n'y sommes pour rien et si tu penses que l'exercice est inadapté, c'est plutôt avec lui d'en discuter qu'avec nous. Je pense aussi que ton enseignant attende que tu viennes lui demander des conseils et de l'aide.
Concernant ton exercice
Tu n'as pas besoin d'écrire le code en entier pour tester une fonction en python. Tu peux tout à fait copier coller ta fonction dans ton interpréteur python et l'appeler pour voir ce qu'elle retourne. Ce sera pour toi l'occasion de tester tes fonctions au fur et à mesure de leur développement.
Sous Windows, l'interpréteur python se lance par exemple avec la commande
python.exe. Sous Linux il y en a plein, personnellement j'utiliser
ipython3.
Il existe aussi des outils "graphiques". Ce n'est pas nécessaire mais plus confortable.
- Que tu sois sous windows ou linux (ou autre chose) tu peux installer et utiliser jupyter lab (le remplaçant de jupyter notebook) qui permet de coder dans ton navigateur et d'exécuter du code python comme dans un interpréteur python.
- Si tu utilises un IDE (genre pycharm), il est possible de développer ton code et de lancer un interpréteur python (voir les boutons au base de la fenêtre) pour le tester/
- Quelque soit l'outil graphique considéré, il a besoin d'une distribution python fonctionnelle installée au préalable (par exemple anaconda sous windows).
Ensuite, ton exercice n'est pas évident si tu débutes, mais pas d'affolement.
Le but final de ton exercice est d'énumérer les grilles gagnantes au jeu du tic tac toe (aka morpion).
Pour cela, il va te falloir écrire plusieurs fonctions auxiliaires, que tu combineras à la fin pour faire le programme final. Chaque question te fait écrire chacune de ces fonctions auxiliaires, avant de les rassembler dans la question G. Tu peux donc voir chacune des questions A à F comme de petits exercices indépendants.
Dans ce qui suit, je suppose que l'exercice est demandé pour une grille 3 x 3 mais sache que tout l'exercice se généralise pour des grilles de taille N x N.
Ensuite, j'avoue que la terminologie choisie dans l'exercice n'est pas forcément des plus parlante, alors clarifions-la.
- Une position
p
correspond à une grille (partiellement ou complètement rempli). Il y a plusieurs manières de représenter une grille de morpion. Tu peux indexer les cases de 1 à 9 (mais ce sera peu pratique pour vérifier si un joueur a gagné ou pas) ou utiliser des listes imbriquées de sorte à faire comme si tu avais un tableau 3 x 3. Si tu connaisnumpy
, tu pourrais aussi utiliser unnumpy.array
pour directement créer une matrice 3 x 3. - Un mouvement consiste à faire jouer le joueur courant (qui ajoutera dans la grille courante son symbole, soit x soit o). La grille qui en résulte forme une nouvelle position.
- Une position est gagnante si un joueur parvient à former une ligne horizontale, verticale ou diagonale de longueur 3.
- J'ai l'impression qu'inverser une position signifie remplacer les x par des o et les o par des x. Ce n'est pas très clair mais vu l'exercice on dirait que c'est ça.
- Une base désigne un container (par exemple une liste) qui permet de stocker plusieurs positions. Le choix du container sous-jacent (par exemple
list
ouset
) peut influencer sur les performances de ton programme. Si tu décides d'utiliser unset
il faudra que le type associé à une position soit hashable (ce qui est le cas des tuples, mais pas des listes). Si tu ne sais pas ce qu'est un set et/ou un hash, peut être que tu devrais rester sur un modèle un peu moins efficace mais plus facile pour toi (par exemple, en n'utilisant que des listes).
Une fois ces définitions données, l'exercice devrait être plus compréhensible. Reste à voir maintenant comment l'aborder.
a)
Il faut choisir comment tu modélises une position. Ensuite pour trouver la prochaine position, il faut ajouter un symbole x ou o dans une case encore non remplie.
En toute rigueur, il faudrait que la fonction prenne en paramètre le joueur courant pour qu'on sache si c'est un x ou un o qu'il faut ajouter. On peut compter le nombre de x et de o présents dans la grille pour l'inférer, mais en cas d'égalité, on ne sait pas forcément à qui c'est le tour. Vue la suite de l'exercice, ce n'est pas forcément important, cela signifie juste que certains mouvement consécutif ne correspondent pas à quelque chose de "possible" dans une partie normale, mais ça ne veut pas dire que cette position ne peut pas être atteinte dans l'absolu.
Donc en gros :
- Si le nombre de x et de o présents dans la grille sont égaux, il suffit de placer aléatoirement un x ou un o dans une case choisie aléatoirement parmi les cases vides.
- Sinon, s'il y a strictement plus de x que de o, alors il faut il faut placer un o dans une case choisie aléatoirement parmi les cases vides.
- Sinon (S'il y a strictement plus de x que de o), alors il faut il faut placer un x dans une case choisie aléatoirement parmi les cases vides.
b)
Ici il faut écrire une boucle qui va parcourir ta grille afin de vérifier si l'un des joueur a gagné en formant une ligne horizontale, verticale, ou diagonale de longueur 3. Si tu utilises
numpyextraire une ligne, une colonne ou une diagonale se fait assez facilement. Sinon il faudra faire la vérification avec les boucles for adéquates.
c)
Cette question est un peu plus facile, car il suffit de vérifier si en jouant dans une case vide, le joueur player (donc x ou o) gagne en réutilisant la fonction codée dans la question b.
d)
Voir la définition d'inversion, si tu es arrivé à faire la question b, ce devrait être une formalité, car celle-ci est plutôt plus facile.
e)
Ici, il n'y a rien à faire à part utiliser l'opérateur
inde python. Tu peux vérifier si un élément
xappartient à un itérable
c(liste, set...) en évaluant
x in c.
f)
Dans cette question aussi, il n'y a rien à faire : si tu utilises une liste ou un set, il suffit d'appeler la méthode adéquate (
c.append(x)pour les listes,
c.add(x)pour les sets)
g)
L'exercice n'est pas extrêmement clair sur la manière dont doivent être générées les positions, ni même si elles sont atteignables dans une partie normale. Il serait logique que oui et du coup la fonction
rand_moveprendrait son intérêt. Ceci dit c'est assez discutable comme manière de faire car on n'est pas sûr d'énumérer toutes les positions, et on risque d'en énumérer certaines plusieurs fois. Je pense que l'exercice ne s'embarrasse pas de ce genre de considération car ce serait trop compliqué à ce stade, mais sache que ça peut se faire avec un algorithme de branchement (pour chaque position on évalue récursivement chaque position suivante valide au sens des règles du jeu).
Bref, ici je pense que tu te contentes simplement de partir d'une grille vide, de faire des mouvements aléatoire jusqu'à ce qu'un joueur gagne et d'ajouter la configuration trouvée si elle n'est pas déjà connue.
Je n'ai pas vraiment compris ce que ton enseignant attendait dans son pseudo code. Si tu trouves une position gagnante, la position inversée (en admettant que ma définition soit correcte) est aussi gagnante, et donc on aurait envie d'insérer les deux en base (mais ça n'est pas ce qui est fait dans le pseudo code). Par ailleurs, si une grille est gagnante, la faire pivoter d'un quart de tour ou la renverser par symétrie horizontale ou verticale la laisse gagnante. Cela signifie que quand tu trouves un position gagnantes, tu en trouves en réalité 12 (1 position trouvée + 3 induites par rotation + 2 induites par symétrie) * le nombre de joueurs.
Bref... bon courage pour ton exercice, et n'hésite pas à discuter avec ton enseignant(e) qui sera ravi(e) de te guider :-)