q,q
q,q
Dernière modification par Invité ; 21/01/2019 à 05h19.
Salut,
Si vous parlez de la fonction "Compter", s'il n'y a pas de "return n", çà ne va pas marcher.
Puis... pas facile de faire la différence entre L, C et l, c...
Essayez de prendre l'habitude de donner des noms plus significatifs genre LIGNES, COLONNES pour les dimensions de votre Grille et i, j pour les indices arguments de Compter: lorsque le code ne fonctionne pas, le rendre plus facile à relire vous permettrait de trouver plus facilement l'erreur.
- W
J'ai modifié les noms pour mieux m'orienter 😀
Merci du conseil, le pire c'est qu'on utilisait des noms de la sorte mais notre professeur nous a fait changer les noms 😭
Pour compter les cellules voisines pour les côtés, comment suis-je censé m'y prendre ?
J'ai pensé à utiliser "While" mais je bloque vraiment...
Merci beaucoup d'avance pour ta réponse et désolé pour les fautes à 6 heures, je suis confronté à ma situation actuelle depuis hier soir et je commençais à fatiguer.
Bonjour
Ben le souci, c'est qu'un nom long comme "colonne" devient vite chiant, mais un nom court comme "c" devient vite ensuite incompréhensible (noyé au milieu de "i", "l", o", etc...)
Généralement un consensus veut que les trucs un peu pérenne (nb de lignes, nb de colonnes, etc) portent un nom court mais significatif (ex "col" ou "nbCol" ou "nb_col" selon tes goûts) et les trucs vraiment volatiles (indices de boucles, valeurs d'un dico surtout) portent un nom très court comme "i" pour "indice", "k" pour "key" et "v" pour "values".
Si tu pars de la cellule aux coordonnées "x, y", suffit de deux boucles imbriquées
- la première avec i variant de x-1 à x+1
- la seconde avec j variant de y-1 à y+1
et tu comptes cellule[i][j] avec un test pour ne pas compter ta propre cellule (donc quand i=x et j=y) et d'autres tests pour ne pas dépasser les bords et voilà.
Oui, ça arrive. Moi je veux visser un meuble. J'ai pensé à utiliser une scie sauteuse mais je bloque vraiment aussi.
On n'utilise pas des outils au hasard. On sait ce qu'on veut faire, on sait comment le faire, on prend ensuite des outils adaptés au travail. while peut le faire mais une boucle "for" sera plus adéquate (for i in range (x-1, x+1+1)). Et connaitre la façon d'utiliser les susdits outils est un plus non négligeable (ex "pourquoi j'écris +1 en final ?")
Mon Tutoriel sur la programmation «Python»
Mon Tutoriel sur la programmation «Shell»
Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
Et on poste ses codes entre balises [code] et [/code]
Rebonjour, c'est encore moi !
Voilà, maintenant, un nouveau problème se pose
Spyder m'indique : " local variable cellules is assigned to but never used" à la ligne 41. Le problème dans l'histoire, c'est qu'avant de changer ma variable n en cellules, le programme s’exécutait normalement. De plus, Spyder m'indique peu importe ce que je donne comme nom à la variable n.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 from random import randint nb_col=int(input("Combien voulez-vous de colonnes ?")) nb_lig=int(input("Combien voulez-vous de lignes ?")) def maGrille(nb_lig,nb_col): maGrille=[] for i in range(nb_lig): grille=[] for j in range(nb_col): grille=grille+[randint(0,1)] maGrille=maGrille+[grille] return maGrille maGrille(nb_col,nb_lig) def affiche(grille): cellules=len(grille) for i in range(cellules): print(grille[i]) affiche(maGrille) #Pour les angles : def Compter(grille,lignes,colonnes): if lignes==0 and colonnes==0: cellules=grille[1][0]+grille[1][1]+grille[0][1] if lignes==0 and nb_col-1==colonnes: cellules=grille[0][colonnes-2]+grille[1][colonnes-2]+grille[1][colonnes-1] if lignes==nb_lig-1 and nb_col==0: cellules=grille[nb_lig-2][0]+grille[nb_lig-2][1]+grille[nb_lig-1][1] if lignes==nb_lig-1 and nb_col-1==nb_col: cellules=grille[nb_lig-1][nb_col-2]+grille[nb_lig-2][nb_col-2]+grille[nb_lig-2][nb_col-1]
On part de (i, j).
Pour tester si c'est un "coin", il faut que i ET j soient égaux à deux valeurs bien précises. Pour tester si c'est un "bord", il faut que i soit égal à 0 (ou à COLONNES) - peu importe j... (tant que ce n'est pas une des valeurs qui donnent un "coin").
La difficulté va être d'utiliser "if" suivi d'une cascade de "elif"... mais c'est très formateur
Après on peut sortir de la programmation et penser "algorithme" et le problème se ramène à trouver les index des cases voisines d'une case (i, j) d'un tableau MxN.
Dans le cas général, pour avoir cette liste d'index on peut commencer par faire une double boucle:
Puis traduire "coin" et "bord" en restreignant la plage de valeurs prises par dx et dy. Donc remplacer (-1, 0, 1) par des variables:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 for dx in (-1, 0, 1): for dy in (-1, 0, 1): if dx == 0 and dy == 0: continue print (i + dx, j + dy)
Ce qui fait qu'on n'a plus qu'a assigner (0, 1) à DX_RANGE si i vaut 0, (-1, 0) s'il vaut M ou (-1, 0, 1) sinon. Pareil pour DY_RANGE. Ce qui fait beaucoup moins de conditions à tester.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 for dx in DX_RANGE: for dy in DY_RANGE: if dx == 0 and dy == 0: continue print (i + dx, j + dy)
On peut aussi ajouter un bord au tableau i.e. on plonge le tableau MxN dans un tableau plus grand M+2 x N+2. Les lignes 0 et N+1 et les colonnes 0 et M+1 sont remplies avec des valeurs qui vont bien (ici 0) et on interdit à l'utilisateur d'y accéder.
- W
Merci pour l'aide wiztricks mais je ne sais pas pourquoi Spyder m'indique un message d'erreur pour la variable "cellules" alors qu'avant, c'était la variable n et mon programme s'exécutait correctement
Je vais paraître pour un gros débile mais je n'y arrive pas... Est-ce qu'une personne pourrait me faire la partie de compter le nombre de cellules pour chaque voisins s'il vous plaît
J'ai essayé ça :
Mais, ça ne marche pas Merci d'avance à la personne qui m'aidera
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 x=l y=c for i in (x-1, x, x+1): for j in (y-1, y, y+1): Compter(i,j) if i!= 0 and j!= 0: continue
Dernière modification par Invité ; 19/01/2019 à 10h22.
Rebonjour tout le monde, je suis désespéré...
Comme je vous l'ai dit hier, mon professeur m'a réellement mal appris à coder mais aussi à toutes les personnes de ma classe.
Je pense surtout qu'il n'a pas réussi à se mettre à notre place lorsqu'il nous apprenait les bases de Python et donc je suis vraiment perdu pour mon programme du jeu de la vie malgré tout les conseils que vous m'avez fournis.
C'est simplement à une autre portée actuellement pour compter le nombre de cellules pour les bords.
Donc est-ce que vous pouvez me fournir la démarche à suivre (en utilisant mes noms de variables).
Je sais que je parais bête à travers mes messages mais vraiment, je suis bloqué dessus depuis Lundi dernier et mon professeur m'a simplement dit de mettre 4 if et je n'ai pas compris. Sauf que les autres élèves l'ont utilisé pour faire leur programme (oui oui c'est de la triche).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 from random import randint nbCol=int(input("Combien voulez-vous de colonnes ?")) nbLig=int(input("Combien voulez-vous de lignes ?")) def maGrille(nbLig,nbCol): Grille=[] for i in range(nbLig): grille=[] for j in range(nbCol): grille=grille+[randint(0,1)] Grille=Grille+[grille] return Grille Grille=maGrille(nbLig,nbCol) def affiche(grille): n=len(grille) for i in range(n): print(grille[i]) affiche(Grille) #angles def Compter(grille,X,Y): if X==0 and Y==0: c=grille[1][0]+grille[1][1]+grille[0][1] if X==0 and nbCol-1==Y: c=grille[0][Y-2]+grille[1][Y-2]+grille[1][Y-1] if X==nbLig-1 and nbCol==0: c=grille[nbLig-2][0]+grille[nbLig-2][1]+grille[nbLig-1][1] if X==nbLig-1 and nbCol-1==Y: c=grille[nbLig-1][nbCol-2]+grille[nbLig-2][nbCol-2]+grille[nbLig-2][nbCol-1] return c
Dernière modification par Invité ; 19/01/2019 à 11h30.
Arrêtez de larmoyer: vous êtes en Terminale bientôt adulte et en âge de voter.
Déjà un professeur essaie de vous enseigner, et vous vous essayez d'apprendre et si vous trouvez que son enseignement n'est pas assez bien, vous pouvez potasser par vous même en ouvrant un tuto. et en essayant de faire des exercices comme vous le faites pour d'autres matières. Et s'il ne vous a pas semblé utile de forcer un peu sur une matière où vous êtes en difficulté, ben, vous ne savez pas, mais vous en êtes aussi responsable.
On vous a indiqué la démarche à suivre. Après si vous n'avez pas encore le niveau pour faire ce genre d'exo. ben vous savez ce que vous avez à faire pour les vacances de février.
- W
Ouais, c'est la faute du prof. Il a donné des exercices, fait faire des TP, donné la correction mais à aucun moment il ne t'a dit qu'il fallait aussi travailler par toi-même. C'est évidemment inexcusable de sa part !!!
Tu ne sais même pas qu'il faut indenter en Python !!!???!!! Et tu penses à quoi quand tu écris Grille=[] puis juste en dessous grille=[] ? C'est quoi pour toi "Grille" et "grille" ? Et même si tu as besoin de deux tableaux, quand tu leur donne des noms aussi cons tu ne te dis pas ensuite "ouh là là ça va pas être facile ensuite de faire la différence" ???
Oh ? Il t'a dit de mettre 4 "if" et tu n'as pas compris ??? Pauvre chou !!!
Je t'ai déjà dit qu'on n'inventait pas les outils. Un programme ce n'est pas une potion magique. On ne met pas des if "au hasard" ou "parce que le prof l'a dit". On commence par réfléchir au problème et à la façon de le solutionner puis on prend les outils adéquats pour coder la solution qu'on a trouvée.
Si par exemple tu veux vérifier que ta position (i, j) ne dépasse pas le bord gauche, il faut tester si i >= 0 (un premier "if"). Pour le bord haut, faut j >= 0 (un second). Le bord droit faut i < nb_col (le 3°) et le bord bas faut j < nb_lig (le 4°). Enfin c'est une idée vraiment au hasard parce que tu ne dis rien sur le souci que ces "4 if" doivent régler et qu'on peut factoriser certains tests (moi j'arrive à 2 "if"). Accessoirement faut aussi i != x et j != y (sinon c'est qu'on est sur la cellule centrale) donc là aussi un autre "if"...
C'est de la triche que de réfléchir et suivre les conseils du prof ? Et pourquoi toi tu n'as pas "triché" comme eux ?
Ca c'est vraiment de la triche !!!
Ouais, de rien !!!
Mon Tutoriel sur la programmation «Python»
Mon Tutoriel sur la programmation «Shell»
Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
Et on poste ses codes entre balises [code] et [/code]
Salut, j'ai fais le jeu de la vie à la fac mais en python3 avec anaconda(numpy/scypi)...
Le code du jeu de la vie est à la fin, avec certaines fonction numpy... tu peux t'en inspirer pour le faire en python
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 "def jeu_de_la_vie(n):\n", " \n", " grille=np.zeros((50,50))\n", " debut=np.zeros((3,3))\n", " debut[0:3,1]=1\n", " debut[1,2]=1\n", " grille[47:50,47:50]=debut\n", " \n", " filtre=np.zeros((3,3))\n", " filtre[:,:]=1\n", " filtre[1,1]=0\n", " \n", " for i in range(n):\n", "\n", " nbr_voisin=sc.signal.convolve2d(grille,filtre,'same')\n", " \n", " egale3=(nbr_voisin==3)\n", "\n", " sup3=(nbr_voisin>3)\n", " inf2=(nbr_voisin<2)\n", " \n", " grille[(egale3[:,:]==True)]=1\n", " grille[(sup3[:,:]==True)]=0\n", " grille[(inf2[:,:]==True)]=0\n", " \n", " \n", " return grille\n", " \n",
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager