# Guide de transition : De Scratch à Python

import { CycleBadge } from "../../src/components/CycleBadge";
import { DownloadCard } from "../../src/components/DownloadCard";
import { ExternalResource } from "../../src/components/ExternalResource";
import { Mermaid } from "../../src/components/Mermaid";
import { TeacherTip } from "../../src/components/TeacherTip";
import { WatchOut } from "../../src/components/WatchOut";

En classe de 4e et 3e (fin de Cycle 4), les élèves abordent la transition entre la programmation visuelle par blocs et l'écriture de code textuel en **Python**.

<Mermaid
  title="Passerelle Conceptuelle : De l'Algorithme vers Python"
  caption="La pensée algorithmique reste invariante : seule la modalité d'expression syntaxique évolue."
  chart={`flowchart LR
    M["🧠 Modèle Mental / Algorithme<br/>(Décomposition & Logique)"] --> B["🧩 Scratch 3.0<br/>(Blocs visuels & Emboîtement)"]
    M --> P["🐍 Python 3<br/>(Syntaxe textuelle & Indentation)"]
    B -. "Transcription directe" .-> P
  `}
/>

---

## 🧭 Tableau comparatif côte à côte

<div style={{ textAlign: "center", margin: "1.5rem 0" }}>
  <img
    src="/images/c4-scratch-python-comparatif.svg"
    alt="Comparatif visuel blocs Scratch vs code Python"
    style={{ maxWidth: "100%", height: "auto", borderRadius: "8px", border: "1px solid #e2e8f0" }}
  />
</div>

| Concept algorithmique      | Dans Scratch (Blocs)                  | En Python (Texte)                     | Point de vigilance pour l'élève                                           |
| -------------------------- | ------------------------------------- | ------------------------------------- | ------------------------------------------------------------------------- |
| **Affichage**              | `dire [Bonjour !] pendant 2 secondes` | `print("Bonjour !")`                  | Ne pas oublier les parenthèses et les guillemets                          |
| **Variable & Affectation** | `mettre [score v] à 10`               | `score = 10`                          | En Python, le signe `=` est une affectation, pas une égalité mathématique |
| **Séquence & Incrément**   | `ajouter (1) à [score v]`             | `score = score + 1` (ou `score += 1`) | Comprendre la réassignation de variable                                   |
| **Boucle bornée**          | `répéter (5) fois [...]`              | `for i in range(5):`                  | Indentation obligatoire (4 espaces) et deux-points `:`                    |
| **Boucle infinie**         | `répéter indéfiniment [...]`          | `while True:`                         | Nécessite un `break` ou une condition d'arrêt                             |
| **Condition simple**       | `si <score > 10> alors [...]`         | `if score > 10:`                      | L'indentation délimite le corps de la condition                           |
| **Condition alternative**  | `si <...> alors [...] sinon [...]`    | `if ...: / else:`                     | Aligner `else:` verticalement avec `if:`                                  |
| **Saisie utilisateur**     | `demander [Ton âge ?] et attendre`    | `age = int(input("Ton âge ? "))`      | Conversion de type `int()` pour les nombres                               |
| **Liste / Tableau**        | `ajouter [Pomme] à [inventaire v]`    | `inventaire.append("Pomme")`          | Les index commencent à 0 en Python (et 1 dans Scratch)                    |
| **Fonction / Procédure**   | Bloc personnalisé `définir Sauter`    | `def sauter():`                       | Définition préalable requise avant l'appel                                |

---

## 🪜 Les 3 piliers d'une transition réussie

### 1. Ne pas présenter la traduction comme automatique

Insister sur le fait que la pensée algorithmique (décomposition, boucle, condition) reste **rigoureusement identique**. Seule la syntaxe d'expression change.

### 2. Dédramatiser les erreurs de syntaxe

Dans Scratch, il est impossible de faire une erreur de syntaxe car les blocs s'emboîtent physiquement. En Python, une virgule manquante ou une mauvaise indentation génère une erreur `SyntaxError` ou `IndentationError`. Apprendre à lire les messages d'erreur console.

### 3. Garder Scratch comme support de modélisation visuelle

Quand un problème algorithmique semble complexe en Python, inviter l'élève à esquisser d'abord la logique sous forme de blocs Scratch ou d'organigramme papier.

<TeacherTip title="Indentation Python">
  Expliquez que l'indentation en Python joue exactement le même rôle visuel que l'encoche intérieure
  d'un bloc `si` ou `répéter` dans Scratch.
</TeacherTip>

<WatchOut title="Indexation des listes (0 vs 1)">
  Dans Scratch, le premier élément d'une liste est à l'index 1 (`élément 1 de liste`). En Python, le
  premier élément est à l'index 0 (`liste[0]`). C'est la source de bug la plus fréquente chez les
  élèves !
</WatchOut>

---

## 📥 Téléchargements

<DownloadCard
  title="Fiche mémo : Comparatif syntaxique Scratch vs Python (Cycle 4)"
  filename="c4-s12-fiche-transition-python-v1.pdf"
  format="pdf"
  size="1.2 KB"
  version="1.0"
  license="CC-BY-SA 4.0"
  href="/downloads/c4-s12-fiche-transition-python-v1.pdf"
/>

---

## 🌐 Références et Ressources Complémentaires

<ExternalResource
  title="Tutoriel Python 3 officiel francophone"
  author="Python Software Foundation"
  category="Documentation"
  url="https://docs.python.org/fr/3/tutorial/"
  description="Documentation de référence pour la syntaxe, les types de base et les structures de contrôle en Python 3."
  verifiedDate="Septembre 2026"
/>

<ExternalResource
  title="France-IOI — Algorithmique et programmation au collège"
  author="Association France-IOI"
  category="Outil interactif"
  url="http://www.france-ioi.org/"
  description="Parcours d'exercices progressifs pour s'entraîner à la programmation textuelle et à la pensée algorithmique."
  verifiedDate="Septembre 2026"
/>

<ExternalResource
  title="Programmes officiels du Cycle 4 — Algorithmique et programmation"
  author="Ministère de l'Éducation Nationale (Éduscol)"
  category="Programme officiel"
  url="https://eduscol.education.gouv.fr/4363/enseigner-au-cycle-4"
  description="Repères officiels sur la transition bloc-texte et les compétences visées en 4e et 3e."
  verifiedDate="Septembre 2026"
/>
