letartare06 Posted January 31 Posted January 31 salut est ce que c'est possible de m'aider j'ai fait un code mais il fonctionne pas je crois avoir l'idée mais je n'arrive pas à le mettre en programme. Merciii https://ibb.co/Qj1j7D3X Quote
Tuteur elec Posted January 31 Tuteur Posted January 31 Hello @letartare06 ! Ici sur une même ligne, tu peux voir qu'à chaque fois que le robot doit déposer une bille dans un trou, le trou se trouve une case plus loin que la fois précédente. Et lorsque tu changes de ligne, le premier trou est une case plus loin que le premier trou de la ligne précédente. Dans ce cas, je te conseille d'utiliser deux variables différentes : une que tu incrémentes à chaque nouvelle bille ramassée lors de la même ligne, et une autre que tu incrémentes à chaque fois que tu changes de ligne. J'essaye de t'aider sans non plus te donner le code tout fait parce que je sais que la prof aime pas trop ça mais hésite pas si tu as d'autres questions et bon courage ! Quote
letartare06 Posted January 31 Author Posted January 31 à l’instant, elec a dit : Hello @letartare06 ! Ici sur une même ligne, tu peux voir qu'à chaque fois que le robot doit déposer une bille dans un trou, le trou se trouve une case plus loin que la fois précédente. Et lorsque tu changes de ligne, le premier trou est une case plus loin que le premier trou de la ligne précédente. Dans ce cas, je te conseille d'utiliser deux variables différentes : une que tu incrémentes à chaque nouvelle bille ramassée lors de la même ligne, et une autre que tu incrémentes à chaque fois que tu changes de ligne. J'essaye de t'aider sans non plus te donner le code tout fait parce que je sais que la prof aime pas trop ça mais hésite pas si tu as d'autres questions et bon courage ! D'accord mercii j'essayerai elec 1 Quote
letartare06 Posted Monday at 09:56 AM Author Posted Monday at 09:56 AM Le 31/01/2026 à 16:24, elec a dit : Hello @letartare06 ! Ici sur une même ligne, tu peux voir qu'à chaque fois que le robot doit déposer une bille dans un trou, le trou se trouve une case plus loin que la fois précédente. Et lorsque tu changes de ligne, le premier trou est une case plus loin que le premier trou de la ligne précédente. Dans ce cas, je te conseille d'utiliser deux variables différentes : une que tu incrémentes à chaque nouvelle bille ramassée lors de la même ligne, et une autre que tu incrémentes à chaque fois que tu changes de ligne. J'essaye de t'aider sans non plus te donner le code tout fait parce que je sais que la prof aime pas trop ça mais hésite pas si tu as d'autres questions et bon courage ! @elec Salut du coup j'ai fait ça comme code mais ça ne fonctionne pas ``` from robot import * deplacement=1 nombredebille=3 for loop in range(4): sud() for loop in range(nombredebille): ramasserBille() for loop in range(deplacement): est() deposerBille() deplacement=deplacement+1 est() for loop in range((deplacement)*nombredebille): ouest()``` Quote
Tuteur elec Posted Monday at 10:23 AM Tuteur Posted Monday at 10:23 AM Hello ! Tu ne m'as pas dit à quel endroit ça plante ducoup je suis pas sûre de comment t'aider. Mais pour moi ça commence assez bien, le code pour déposer toutes les billes sur la même ligne m'a l'air bon. Ce que tu n'as pas encore codé c'est la valeur à prendre lorsque tu changes de ligne. Pour ça tu peux utiliser une autre variable qui permet de fixer la valeur de déplacement à faire dès que tu arrives sur une nouvelle ligne. Appelons la "debutLigne". Au départ, on a deplacement = debutLigne = 1. Mais une fois que tu changes de ligne, tu veux que "deplacement" commence à 2. Donc ce que tu peux faire c'est qu'une fois que le robot a fini de mettre toutes les billes dans les trous d'une ligne, juste avant de descendre de ligne, tu fais prendre à debutLigne une valeur de plus (en gros ça s'écrit debutLigne = debutLigne + 1). Ca permet à debutLigne de reprendre sa propre valeur et de lui rajouter 1 (et donc de prendre la valeur 2 lorsque tu changes de ligne la première fois). Et ensuite à chaque fois que tu démarres une nouvelle ligne, tu donnes à deplacement la valeur de debutLigne (t'écris juste deplacement == debutLigne, le double égal ça signifie "prendre la valeur chiffrée"). De cette manière, à chaque fois que tu changes de ligne, tu vas pouvoir faire avancer le robot la première fois avec 1 de plus que la ligne précédente. Est-ce que j'ai été claire ? Est-ce que tu comprends un peu ce qu'il te manque ? C'est un peu compliqué à expliquer par écrit mais j'espère t'avoir aidé. Sinon n'hésite pas si tu as d'autres questions ! Quote
letartare06 Posted Monday at 10:29 AM Author Posted Monday at 10:29 AM il y a 5 minutes, elec a dit : Hello ! Tu ne m'as pas dit à quel endroit ça plante ducoup je suis pas sûre de comment t'aider. Mais pour moi ça commence assez bien, le code pour déposer toutes les billes sur la même ligne m'a l'air bon. Ce que tu n'as pas encore codé c'est la valeur à prendre lorsque tu changes de ligne. Pour ça tu peux utiliser une autre variable qui permet de fixer la valeur de déplacement à faire dès que tu arrives sur une nouvelle ligne. Appelons la "debutLigne". Au départ, on a deplacement = debutLigne = 1. Mais une fois que tu changes de ligne, tu veux que "deplacement" commence à 2. Donc ce que tu peux faire c'est qu'une fois que le robot a fini de mettre toutes les billes dans les trous d'une ligne, juste avant de descendre de ligne, tu fais prendre à debutLigne une valeur de plus (en gros ça s'écrit debutLigne = debutLigne + 1). Ca permet à debutLigne de reprendre sa propre valeur et de lui rajouter 1 (et donc de prendre la valeur 2 lorsque tu changes de ligne la première fois). Et ensuite à chaque fois que tu démarres une nouvelle ligne, tu donnes à deplacement la valeur de debutLigne (t'écris juste deplacement == debutLigne, le double égal ça signifie "prendre la valeur chiffrée"). De cette manière, à chaque fois que tu changes de ligne, tu vas pouvoir faire avancer le robot la première fois avec 1 de plus que la ligne précédente. Est-ce que j'ai été claire ? Est-ce que tu comprends un peu ce qu'il te manque ? C'est un peu compliqué à expliquer par écrit mais j'espère t'avoir aidé. Sinon n'hésite pas si tu as d'autres questions ! D'accord merciii bcp je crois avoir compris je testerai ça merciiii bcp elec 1 Quote
letartare06 Posted Thursday at 09:46 PM Author Posted Thursday at 09:46 PM (edited) Le 02/02/2026 à 11:23, elec a dit : Hello ! Tu ne m'as pas dit à quel endroit ça plante ducoup je suis pas sûre de comment t'aider. Mais pour moi ça commence assez bien, le code pour déposer toutes les billes sur la même ligne m'a l'air bon. Ce que tu n'as pas encore codé c'est la valeur à prendre lorsque tu changes de ligne. Pour ça tu peux utiliser une autre variable qui permet de fixer la valeur de déplacement à faire dès que tu arrives sur une nouvelle ligne. Appelons la "debutLigne". Au départ, on a deplacement = debutLigne = 1. Mais une fois que tu changes de ligne, tu veux que "deplacement" commence à 2. Donc ce que tu peux faire c'est qu'une fois que le robot a fini de mettre toutes les billes dans les trous d'une ligne, juste avant de descendre de ligne, tu fais prendre à debutLigne une valeur de plus (en gros ça s'écrit debutLigne = debutLigne + 1). Ca permet à debutLigne de reprendre sa propre valeur et de lui rajouter 1 (et donc de prendre la valeur 2 lorsque tu changes de ligne la première fois). Et ensuite à chaque fois que tu démarres une nouvelle ligne, tu donnes à deplacement la valeur de debutLigne (t'écris juste deplacement == debutLigne, le double égal ça signifie "prendre la valeur chiffrée"). De cette manière, à chaque fois que tu changes de ligne, tu vas pouvoir faire avancer le robot la première fois avec 1 de plus que la ligne précédente. Est-ce que j'ai été claire ? Est-ce que tu comprends un peu ce qu'il te manque ? C'est un peu compliqué à expliquer par écrit mais j'espère t'avoir aidé. Sinon n'hésite pas si tu as d'autres questions ! @elecDu coup je viens de le faire et j'ai réussi merciii bcp Edited Thursday at 09:47 PM by letartare06 Quote
letartare06 Posted Thursday at 10:08 PM Author Posted Thursday at 10:08 PM Est ce que tu pourrais m'aider pour cette exercice j'ai un premier programme ou le robot compte mais un dessin sur 2 du coups il marqué pas le bon chiffre et j'ai trouver un autre programme sauf que la cette fois-ci c'est la longueur du programme qui ne fonctionne pas tu aurais des idées, il y'a 36 blocs de plus. Merciiii ``` from robot import * nbrCa=0 nbrE=0 nbrCr=0 for loop in range(8): avancer() if surCarre() and surCroix(): nbrCa=nbrCa+1 nbrCr=nbrCr+1 if surCarre() and surEtoile(): nbrCa=nbrCa+1 nbrE=nbrE+1 if surCarre and surCarre: nbrCa=nbrCa+2 if surEtoile() and surEtoile(): nbrE=nbrE+2 if surEtoile() and surCroix(): nbrE=nbrE+1 nbrCr=nbrCr+1 if surCroix() and surCroix(): nbrCr=nbrCr+2 avancer() avancer() if nbrCa > (nbrE and nbrCr): ecrireNombre(nbrCa) if nbrCr >(nbrE and nbrCa): ecrireNombre(nbrCr) if nbrE >(nbrCa and nbrCr): ecrireNombre(nbrE) ``` https://ibb.co/7xxR9Vd1 Quote
Tuteur elec Posted yesterday at 02:17 PM Tuteur Posted yesterday at 02:17 PM Coucou @letartare06 ! Est ce que tu pourrais juste m'envoyer les commandes que vous avez le droit / l'interdiction d'utiliser stp? Quote
letartare06 Posted yesterday at 02:39 PM Author Posted yesterday at 02:39 PM il y a 21 minutes, elec a dit : Coucou @letartare06 ! Est ce que tu pourrais juste m'envoyer les commandes que vous avez le droit / l'interdiction d'utiliser stp? Oui tiens merciiii bcppp. Les mots-clés suivants sont autorisés: variables, for, if, else, elif, and, or, not. Les mots-clés suivants sont interdits: while, list, set, crochets [ ], accolades {}, def, lambda, break, continue, setattr, map, split, in, max. Les variables sont autorisées. Merciii Quote
Tuteur elec Posted yesterday at 03:09 PM Tuteur Posted yesterday at 03:09 PM En regardant un peu ton code, je vois que tu testes toutes les possibilités indépendamment des unes des autres. De ce fait, tu n'utilises pas dutout le "elif" et le "else" qui pourraient te faire gagner de nombreux blocs. Notamment parce que quand tu utilises "else", tu n'as pas besoin d'écrire le test comme à la suite du "if" ou du "elif". En effet, "else" signifie "sinon", et on l'utilise quand on a tout testé et qu'il ne reste plus qu'une seule possibilité. Et donc il est inutile d'expliquer à la machine quelle est cette dernière possibilité (à part pour perdre des blocs haha) Enfait quand tu fais des tests avec if, elif et else, la machine va regarder de cette manière : si le test réalisé en "if" marche, elle va faire tous les tests en indentation de ce "if" et n'ira pas regarder les tests du "elif" ni du "else". En revanche, si le test du "if" ne marche pas, elle ne regarde pas les instructions en indentation mais va plutôt aller tester ce qui se passe en "elif". Si le test du "elif" marche alors elle executera les instructions en indentation du "elif" et ne regardera pas les instructions du "else". En revanche si ni "if" ni "elif" ne marche, elle n'a qu'une seule possibilité : executer les instructions en indentation du "else". Et ça marche avec n'importe quel nombre de elif. Dans ce cas, ce que je te propose ça serait plutot un code où : - tu testes si il y a un carré : si oui tu rajoute 1 à nbrCa. Sur cette même case (là tu crées une indentation pour rester dans le test du carré) tu testes maintenant s'il y a une croix et une etoile, et sinon (else) c'est forcément un autre carré. - s'il n'y avait pas de carré tu peux tester si (elif) il y a une croix. Sur cette même case (indentation) tu testes s'il y a une étoile, et sinon (else) c'est qu'il y a une deuxième croix. Inutile de tester s'il y a un carré puisque le premier test réalisé a été "skip" par la machine si on est rentré dans le elif, ce qui signifie qu'il n'y avait pas de carré. - sinon (else) la dernière possibilité c'est qu'il y ait deux étoiles ensembles, parce que t'avais déjà testé tout le reste et si la machine est arrivée au "else", c'est que rien d'autre ne marchait. Pareil pour l'écriture à la fin : tu peux garder ton premier "if" tel quel, changer le deuxième "if" en "elif" et au lieu d'utiliser des blocs sur le troisème "if", tu écris juste "else". Est-ce que tu comprends un peu mieux comment ça marche ? Essaye avec ça, sinon reviens me voir pour que je t'aide encore ! Quote
letartare06 Posted yesterday at 03:22 PM Author Posted yesterday at 03:22 PM il y a 10 minutes, elec a dit : En regardant un peu ton code, je vois que tu testes toutes les possibilités indépendamment des unes des autres. De ce fait, tu n'utilises pas dutout le "elif" et le "else" qui pourraient te faire gagner de nombreux blocs. Notamment parce que quand tu utilises "else", tu n'as pas besoin d'écrire le test comme à la suite du "if" ou du "elif". En effet, "else" signifie "sinon", et on l'utilise quand on a tout testé et qu'il ne reste plus qu'une seule possibilité. Et donc il est inutile d'expliquer à la machine quelle est cette dernière possibilité (à part pour perdre des blocs haha) Enfait quand tu fais des tests avec if, elif et else, la machine va regarder de cette manière : si le test réalisé en "if" marche, elle va faire tous les tests en indentation de ce "if" et n'ira pas regarder les tests du "elif" ni du "else". En revanche, si le test du "if" ne marche pas, elle ne regarde pas les instructions en indentation mais va plutôt aller tester ce qui se passe en "elif". Si le test du "elif" marche alors elle executera les instructions en indentation du "elif" et ne regardera pas les instructions du "else". En revanche si ni "if" ni "elif" ne marche, elle n'a qu'une seule possibilité : executer les instructions en indentation du "else". Et ça marche avec n'importe quel nombre de elif. Dans ce cas, ce que je te propose ça serait plutot un code où : - tu testes si il y a un carré : si oui tu rajoute 1 à nbrCa. Sur cette même case (là tu crées une indentation pour rester dans le test du carré) tu testes maintenant s'il y a une croix et une etoile, et sinon (else) c'est forcément un autre carré. - s'il n'y avait pas de carré tu peux tester si (elif) il y a une croix. Sur cette même case (indentation) tu testes s'il y a une étoile, et sinon (else) c'est qu'il y a une deuxième croix. Inutile de tester s'il y a un carré puisque le premier test réalisé a été "skip" par la machine si on est rentré dans le elif, ce qui signifie qu'il n'y avait pas de carré. - sinon (else) la dernière possibilité c'est qu'il y ait deux étoiles ensembles, parce que t'avais déjà testé tout le reste et si la machine est arrivée au "else", c'est que rien d'autre ne marchait. Pareil pour l'écriture à la fin : tu peux garder ton premier "if" tel quel, changer le deuxième "if" en "elif" et au lieu d'utiliser des blocs sur le troisème "if", tu écris juste "else". Est-ce que tu comprends un peu mieux comment ça marche ? Essaye avec ça, sinon reviens me voir pour que je t'aide encore ! Ah mais je pensais que else et elif c'était comme des blocs aussi merciiii je me penche tout à l'heure. Merciii bcp c'est plus clair je modifierai mon code alors merciiii bcppp elec 1 Quote
Tuteur elec Posted yesterday at 03:25 PM Tuteur Posted yesterday at 03:25 PM Aussi, je viens de penser à un autre tips pour gagner des blocs : au début au lieu d'utiliser trois fois le " = 0", tu peux écrire NbrCa = NbrCr = NbrE = 0. Tu devrais gagner 2 blocs je pense. Quote
letartare06 Posted 10 hours ago Author Posted 10 hours ago Il y a 18 heures, elec a dit : Aussi, je viens de penser à un autre tips pour gagner des blocs : au début au lieu d'utiliser trois fois le " = 0", tu peux écrire NbrCa = NbrCr = NbrE = 0. Tu devrais gagner 2 blocs je pense. D'accord merciii bcppp elec 1 Quote
letartare06 Posted 4 hours ago Author Posted 4 hours ago (edited) @elec Salut j'ai essayé de faire comme tu m'as dit mais je crois que j'arrive pas à le reproduire en python. Merciii Edited 3 hours ago by letartare06 Quote
Tuteur elec Posted 3 hours ago Tuteur Posted 3 hours ago C'est à quel moment que tu bloques @letartare06 ? Quote
letartare06 Posted 2 hours ago Author Posted 2 hours ago @elec Je crois avoir réussi à faire le premier tiret j'ai fait if sur carre and (étoile or croix) ..... mais les autres je ne comprends pas très bien le reste. après j'ai vu un programme sur le discord mais quand je l'ai reproduit il a pas fonctionner. Merciii - tu testes si il y a un carré : si oui tu rajoute 1 à nbrCa. Sur cette même case (là tu crées une indentation pour rester dans le test du carré) tu testes maintenant s'il y a une croix et une etoile, et sinon (else) c'est forcément un autre carré. - s'il n'y avait pas de carré tu peux tester si (elif) il y a une croix. Sur cette même case (indentation) tu testes s'il y a une étoile, et sinon (else) c'est qu'il y a une deuxième croix. Inutile de tester s'il y a un carré puisque le premier test réalisé a été "skip" par la machine si on est rentré dans le elif, ce qui signifie qu'il n'y avait pas de carré. - sinon (else) la dernière possibilité c'est qu'il y ait deux étoiles ensembles, parce que t'avais déjà testé tout le reste et si la machine est arrivée au "else", c'est que rien d'autre ne marchait. Quote
Tuteur elec Posted 1 hour ago Tuteur Posted 1 hour ago @letartare06 Voici ce que j'ai écrit et comment je l'imaginais. Je ne peux pas tester car je n'ai plus accès au logiciel donc je ne sais même pas si pour le nombre de blocs ça rentre... Dis moi si tu veux que je détaille à coté du code les différentes étapes que je t'expliquais dans les tirets ou si tu captes ce que j'ai écrit. Après même si ça ne marche pas, ça peut te servir de base pour des idées. from robot import * nbrCa = nbrCr = nbrE = 0 for loop in range (8) : avancer() if surCarre() : nbrCa=nbrCa + 1 if surCroix() : nbrCr = nbrCr + 1 elif surEtoile() : nbrE = nbrE + 1 else : nbrCa = nbrCa + 1 elif surCroix() : nbrCr = nbrCr + 1 if surEtoile() : nbrE = nbrE + 1 else : nbrCr = nbrCr + 1 else : nbrE = nbrE + 2 avancer() avancer() if nbrCa > (nbrCr and nbrE) : ecrireNombre(nbrCa) elif nbrCr > (nbrE and nbrCa) : ecrireNombre(nbrCr) else : ecrireNombre(nbrE) Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.