Citizen Code : Saison 1 Episode 3, difficulté à comprendre
jee pee Messages postés 42396 Statut Modérateur -
Bonjour,
En faisant une recherche sur Internet, j'ai découvert le site Citizen Code, pour apprendre python, par des jeux. Je trouve ça plutôt sympa.
Je suis arrivé à l'épisode 3 de la Saison 1. "Le jeu du croquet", avec des arceaux à remettre en place, si j'ai bien compris. L'arceau 8 doit être déplacé sur le 8 grisé, etc...tout est en décalage de 1, je crois.
J'ai commencé un code, au début, ça va, mais après ça foire.
J'ai appris la boucle de répétition for loop in range () :
Je ne comprends pas ce que j'ai mal fait.
Aussi, le code ne peut contenir que 10 blocs.
Je ne demande pas d'avoir la solution, mais de m'aider à mieux comprendre, à me montrer une piste, histoire de m'éclairer un peu.
Merci à vous,
Vincent
- Citizen Code : Saison 1 Episode 3, difficulté à comprendre
- Code ascii - Guide
- Citizen code python - Accueil - Outils
- Code puk bloqué - Guide
- Comment déverrouiller un téléphone quand on a oublié le code - Guide
- Code activation windows 10 - Guide
8 réponses
Salut,
Si ton but est d'apprendre Python, tu peux laisser tomber Citizen, et installer Python 3.13 (Store ou du site officiel https://www.python.org/)
L'idle est compris dans l'installation de Python, il te permettra de faire tes premiers pas et te familiariser et acquérir les notions de base (variables, listes, dictionnaires, instructions, conditions, boucles, procédures etc...)
Pour ce qui est des formations, tu peux en trouver une multitude en ligne, notamment sur OpenClassRoom.
Tu as également le Swinnen, bien qu'il ne soit plus très récent, il te permettra acquérir les bonnes bases.
Bonjour,
Est-ce que la pince et les arceaux sont bien à leur position de départ sur l'image ? Car j'imagine que la pince devrait être en position 1 non ?
Quand on regarde ton code tu ne vises pas assez loin. Tu es à un ou 2 coup. Alors que pour écrire un code le plus court possible (là 10 lignes), il te faut imaginer un processus qui regarde loin devant. Dans le cas présent on doit faire 8 fois la même chose. On utilise justement la programmation pour répéter une opération de base, 8 fois, 1000 fois, des millions de fois.
Première chose, en partant avec la pince en position 1, il faut aller à droite, 8 fois, pour être au dessus de l’arceau 8. Puis il faut définir toutes les manipulations pour, prendre l'arceau, le déplacer à droite, le poser, et enfin se déplacer vers la gauche, 2 fois, pour se retrouver au dessus de l'arceau n-1 (la première fois le 7). Tu devrais alors avoir les instructions pour créer une séquence à exécuter 8 fois pour les 8 arceaux.
Bonjour,
La position de départ est bien au-dessus du 8. Comme sur la capture d'écran.
La solution m'a été donné, j'ai essayé et ça marche. Seulement voilà, j'ai tenté de comprendre mais j'ai de la difficulté. Pas sûr que ce citizen code soit la solution idéale pour apprendre. Pourtant, j'ai envie d'apprendre et je ne trouve pas un site valable. Pour commencer, un gratuit aurait été bien. Comprendre les bases, avec de petits exercices.
Merci pour toutes vos explications. Voici le code qui m'a été donné.
Belle journée à vous,
Vincent
Ce code correspond à ce que je t'avais indiqué. S tu regardes bien, c'est aussi ce que tu avais commencé à faire. Sauf que tu étais parti pour écrire des instructions pour chaque arceau, un par un. Il te manquait juste de mettre en oeuvre la répétition 8 fois de ce qui est la même séquence. Reprends ton code et compare avec la solution, il ne manque que la boucle Loop(8).
Ces exercices ont pour but de t'entrainer à une réflexion algorithmique, avec un petit robot tout simple. Tu dois définir les actions de base, avec un support visuel, et la limitation du nombre de lignes t'oblige à réfléchir à un ensemble de lignes à répéter, à utiliser la même chose plusieurs fois. Ce sont les principes de la récursivité, indispensable en programmation.
Lorsque l'on code un programme, on n'a pas le petit robot, tout se passe dans notre tête, où l'on essaie de faire tourner le programme. Et si cela se complique on va dessiner un organigramme pour représenter les actions à effectuer.
Ces premiers exercices sont faits pour te conduire à penser comment organiser les opérations d'un programme. Après, je pense, tu auras des cours pour apprendre les instructions Python, définir les variables et leurs valeurs, les entrées, les sorties, les conditions.
La plupart des formations doivent commencer par les instructions Python, et incorporer petit à petit de l’algorithmique. Là le cours propose de voir la programmation au delà des instructions elles mêmes.
Oui, vous me l'aviez expliqué. Il est vrai que ces petits exercices sont bien faits. Pour le code en question, je n'ai pas compris pourquoi le deuxième for loop in range est indenté. Hors que, le premier ne l'est pas.
En complément de citizen code, j'essaie de trouver une bonne chaîne youtube, pour les débutants en python. Et/ou un bon site internet.
Merci pour tout le temps que vous prenez à me répondre. C'est gentil.
Si je peux me permettre, j'ai envie de vous dire que j'aime bien, votre citation en fin de réponse "un étranger, c'est un ami qu'on n'a pas encore rencontré".
Belle journée à vous,
Vincent
L'indentation, excellente observation, excellente question !
Dans la plupart des langages, la mise en forme n'a pour objet que de faciliter et de rendre agréable la lecture du code. Dans Python c'est une composante primordiale du langage. Elle sert à déterminer un bloc qui constitue un ensemble d'instructions liées à, une instruction, une condition.
Un bloc (*) commence par une ligne d'instruction qui finit par : Toutes les lignes d'instruction de ce bloc auront une indentation (au moins un blanc, mais conventionnellement 4 blancs) par rapport à la ligne de création du bloc. Toutes les instructions de ce bloc seront alignées avec la même indentation. Le bloc se termine quand l'indentation, par rapport à l'instruction d'origine, n'est plus présente.
Par exemple
prendre()
for loop in range(2):
droite
poser()
ou 2 blocs indépendants
prendre()
for loop in range(2):
droite()
poser()
for loop in range(3):
gauche()
Mais un bloc peut contenir un autre bloc. dans ce cas les lignes du second bloc ont leur propre indentation par rapport à leur instruction d'origine. Et une double indentation par rapport au bloc père. Et si on a plusieurs niveaux d'imbrication des blocs, autant d'indentation que de blocs imbriqués.
Là le 1er for loop est au niveau principal du programme, à la racine, c'est un début de bloc. Le second est indenté car il est dans le bloc du 1er, les instructions de ce second bloc sont indentées par rapport au second for loop.
for loop in range(8):
prendre()
droite()
poser()
for loop in range(2):
gauche()
Dans d'autres langages pour spécifier ces blocs on va utiliser les accolades { }, avec différentes possibilités d'écritures comme
for loop in range(2) {
droite()
}
for loop in range(2) {droite()}
for loop in range(2)
{
droite()
}
(*) sur le site Citizen Code le terme bloc (dans maximum 10 blocs) est utilisé pour ce que moi j'appelle ligne, le bloc étant un ensemble de ligne.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionJe commence à assimiler.
Ceci dit, comment savoir qu'un autre bloc s'imbriquera dans le bloc initial et donc, que ce nouveau bloc, sera indenté au premier...
Dans quel cas le sera-t-il (indenté au premier bloc) et dans quel cas ne le sera-t-il pas ? Je ne sais pas si ma question est claire.
Je ne sais pas si vous connaissez le site Citizen Code. Pour que vous compreniez ce que j'ai appris. Je n'ai pas encore commencer l'exercice suivant, par peur de m'embrouiller.
Par exemple, il ne me semble pas avoir vu sur Citizen Code, qu'un bloc d'instructions pouvait être indenté à un autre.
Ce que je n'ai pas compris dans votre dernier message, c'est la notion de "blanc". Vous parlez à un moment de "4 blancs".
Merci à vous,
Belle journée,
Vincent
comment savoir qu'un autre bloc s'imbriquera dans le bloc initial et donc, que ce nouveau bloc, sera indenté au premier...
il ne me semble pas avoir vu sur Citizen Code, qu'un bloc d'instructions pouvait être indenté à un autre.
La question ne se pose pas en ces termes. Il existe des instructions qui vont avoir un ensemble de lignes d'instructions qui vont leur être associées, cela donne un bloc de lignes dépendant de l'instruction de départ. Parmi ces instructions il y a notamment les boucles et conditions (le for, le while, le if). Donc chaque fois qu'une de ces instructions est présente, derrière, les lignes doivent être indentées par rapport à l'instruction qui crée le bloc, si elle était elle même déjà indentée, on va arriver à un second niveau d'indentation. Un for à un 3ème niveau d'indentation, va ajouter un nouveau niveau d'indentation.
Indenter le code consiste à introduire des espaces aussi appelés blancs en début de ligne. Un seul blanc suffit. Mais pour être bien clair sur la structure du code il est préconisé d'en mettre 4.
Il y a plusieurs mois, suite à une question comme la tienne posée sur le forum, je suis allé sur Citizen Code (ou peut être FutureEnginer, les 2 semblant liés) pour faire quelques exercices et comprendre ce qu'était ce site. Car quand on nous donne un code comme celui là en disant que c'est du Python et qu'il faut trouver une erreur, il y a de quoi être circonspect.
for loop in range(8):
prendre()
droite()
poser()
for loop in range(2):
gauche()
La seule réelle instruction Python présente, c'est le for. Le reste (prendre, droite, gauche, poser) ce sont des fonctions, développées pour piloter le robot, qui sont dans la bibliothèque "robot" importée en début du programme, elles ont un nom signifiant dans le contexte, mais ce pourrait aussi bien être A, B, C et D. Que tu ne trouveras jamais dans un cours Python pur. C'est pourquoi je t'ai indiqué que tu apprends sur ce site d'abord le raisonnement et la logique de la programmation, avant de voir en détail les instructions du langage.
Bonjour,
Je ne comprends pas tout, mais ça commence à être un peu plus fluide, dans mon esprit.
Je pense avoir compris que le langage python est un langage de clarté, qui a besoin d'être aéré. Tant pour le confort visuel que pour sa lecture.
Pour être sûr de bien faire les choses, en parallèle, je voudrais installer python sur mon pc, mais lequel ? J'utilise Windows 11, sous Firefox. Mais j'ai entendu parlé aussi de python à télécharger donc, puis il y a un idle, et c'est dans ce dernier qu'il faut taper le code. Pourquoi ne pas juste installer l'idle alors...
Aussi, beaucoup parle de Visual Studio Code. Je suis un peu perdu avec tous ces noms. Je ne sais plus ce qu'il faut faire et ne pas faire.
A terme, j'ai une ambition : Je voudrais créer un logiciel de généalogie gratuit. Parce que oui, j'aime la généalogie, je fais d'ailleurs la mienne. Je n'ai absolument aucune idée de comment m'y prendre ! Mais c'est une ambition. J'imagine que c'est possible.
Merci pour le temps que vous me consacrez. J'imagine que Python, n'a plus de secret pour vous...
Belle journée, sous la pluie, en Belgique.
Vincent
Vous savez, j'en suis encore très loin, mais
Je suis un informaticien expérimenté, mais je le suis peu sur Python, que j'ai découvert à travers les questions du forum. Je ne l'ai utilisé que pour de petits scripts. J'ai la version de base : https://www.python.org/downloads/ le standalone manager python-3.14.0-amd64.exe. Avec il y a idle qui est un environnement de développement minimaliste, édition du code et lancement de l'exécution. Il y a d'autres environnements plus sophistiqués, je ne les connais pas, peut être qu'un autre intervenant pourra te donner des informations.
Avec la volonté de développer une application, il est important de suivre une formation en totalité.



