{
  "cells": [
    {
      "cell_type": "markdown",
      "id": "d2f099e3",
      "metadata": {},
      "source": [
        "# Cours 3 — Chaînes de caractères et listes (sans boucle)\n",
        "\n",
        "Ce troisième cours suit la progression ultra débutante du programme Python ISDBA.\n",
        "\n",
        "### Prérequis (Cours 1 et 2)\n",
        "- Variables et assignation (les \"boîtes\" en mémoire avec une étiquette).\n",
        "- Types simples : `int`, `float`, `str`, `bool`.\n",
        "- `print()` pour afficher des phrases.\n",
        "- Listes et `len()` (pour connaître la taille d’une liste).\n",
        "\n",
        "### Objectifs du Cours 3\n",
        "- Comprendre les **chaînes de caractères** (`str`) : concaténation, `len`, `upper`, `lower`.\n",
        "- Créer des **listes** et comprendre l’**index** (commencer à 0).\n",
        "- Accéder à un élément via son index et **modifier** un élément d’une liste.\n",
        "- Faire des mini défis marketing (campagnes, pays/devices, budgets).\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "a301e1f2",
      "metadata": {},
      "source": [
        "## 0. Échauffement — `str` + index\n",
        "\n",
        "On démarre avec quelques questions pour se remettre en tête les outils de base.\n",
        "\n",
        "### Questions (à l’oral ou mentalement)\n",
        "1. Que renvoie `len(\"Email\")` ?\n",
        "2. Quelle différence entre `\"Campagne \" + nom` (concaténation) et `nom.upper()` (changement de casse) ?\n",
        "3. Si `campagnes = [\"Google Ads\", \"Facebook Ads\", \"Email\"]` :\n",
        "   - que vaut `campagnes[0]` ?\n",
        "   - que vaut `campagnes[2]` ?\n",
        "\n",
        "Dans la cellule suivante, on teste ça avec des variables. \n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "id": "21f886ea",
      "metadata": {},
      "outputs": [],
      "source": [
        "# TODO\n",
        "pass"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "id": "4efde666",
      "metadata": {},
      "outputs": [],
      "source": [
        "# Warm-up: experiment with strings + list index\n",
        "\n",
        "campagne = \"Summer Sale\"\n",
        "pays = \"France\"\n",
        "\n",
        "phrase = \"La campagne \" + campagne + \" vise \" + pays\n",
        "print(phrase)\n",
        "\n",
        "print(\"Longueur du nom:\", len(campagne))\n",
        "print(\"Nom en MAJUSCULES:\", campagne.upper())\n",
        "print(\"Nom en minuscules:\", campagne.lower())\n",
        "\n",
        "campagnes = [\"Google Ads\", \"Facebook Ads\", \"Email\"]\n",
        "print(\"Nombre de campagnes:\", len(campagnes))\n",
        "print(\"campagnes[0]:\", campagnes[0])\n",
        "print(\"campagnes[2]:\", campagnes[2])"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "d2c1512f",
      "metadata": {},
      "source": [
        "## 1. Chaînes de caractères (`str`) : concat, `len`, `upper`, `lower`\n",
        "\n",
        "En marketing, on manipule souvent du texte : noms de campagnes, pays, devices.\n",
        "\n",
        "Dans ce cours, on utilise 4 actions très simples :\n",
        "- concaténation : `\"Campagne \" + nom`\n",
        "- `len(texte)` : la longueur d’une chaîne\n",
        "- `texte.upper()` : mettre en majuscules\n",
        "- `texte.lower()` : mettre en minuscules\n",
        "\n",
        "Objectif : savoir construire des petits messages avec du texte et le “remplir” avec des variables."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "id": "98e7fc05",
      "metadata": {},
      "outputs": [],
      "source": [
        "# String examples: concat + len + upper/lower\n",
        "\n",
        "nom_campagne = \"Black Friday\"\n",
        "pays = \"Espagne\"\n",
        "\n",
        "message = \"Campagne \" + nom_campagne + \" (cible: \" + pays + \")\"\n",
        "print(message)\n",
        "\n",
        "print(\"len(nom_campagne) =\", len(nom_campagne))\n",
        "print(\"nom_campagne.upper() =\", nom_campagne.upper())\n",
        "print(\"nom_campagne.lower() =\", nom_campagne.lower())"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "9c55ccbd",
      "metadata": {},
      "source": [
        "### Exercice 1 — Message campagne / pays\n",
        "\n",
        "Avec deux chaînes (`nom_campagne`, `pays`), construis une **phrase** qui annonce la campagne et le pays cible (concaténation avec `+`). Affiche-la, puis affiche la longueur du nom de campagne et sa version en majuscules et en minuscules (`upper` / `lower`).\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "id": "cd044337",
      "metadata": {},
      "outputs": [],
      "source": [
        "# TODO — Exercice 1\n",
        "pass"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "id": "00d0e280",
      "metadata": {},
      "outputs": [],
      "source": [
        "# Correction — Exercice 1 (strings)\n",
        "\n",
        "nom_campagne = \"Back to School\"\n",
        "pays = \"Belgique\"\n",
        "\n",
        "phrase = \"La campagne \" + nom_campagne + \" vise \" + pays\n",
        "print(phrase)\n",
        "\n",
        "print(\"len(nom_campagne) =\", len(nom_campagne))\n",
        "print(\"nom_campagne.upper() =\", nom_campagne.upper())\n",
        "print(\"nom_campagne.lower() =\", nom_campagne.lower())"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "7deeece9",
      "metadata": {},
      "source": [
        "## 2. Les listes : créer et utiliser l’index\n",
        "\n",
        "Une **liste** sert à stocker plusieurs valeurs, par exemple :\n",
        "- des noms de campagnes\n",
        "- des pays\n",
        "- des devices\n",
        "- des budgets\n",
        "\n",
        "L’**index** sert à repérer une valeur dans la liste.\n",
        "- l’index commence à `0`\n",
        "- ensuite `1`, `2`, `3`, etc.\n",
        "\n",
        "Ce qu’on veut savoir faire ici :\n",
        "- créer une liste\n",
        "- accéder à un élément via `liste[index]`\n",
        "- modifier un élément : `liste[index] = nouvelle_valeur`"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "id": "8c95a85d",
      "metadata": {},
      "outputs": [],
      "source": [
        "# List basics: create a list and access items by index\n",
        "\n",
        "campagnes = [\"Google Ads\", \"Facebook Ads\", \"Email\"]\n",
        "budgets = [500, 300, 150]\n",
        "\n",
        "print(\"campagnes[0] =\", campagnes[0])\n",
        "print(\"campagnes[1] =\", campagnes[1])\n",
        "print(\"budgets[2] =\", budgets[2])"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "04004f48",
      "metadata": {},
      "source": [
        "## 3. Accéder et modifier une liste\n",
        "\n",
        "Maintenant qu’on sait lire un élément avec `liste[index]`, on peut aussi **modifier** une valeur.\n",
        "\n",
        "La syntaxe ressemble à ça :\n",
        "- lecture : `valeur = liste[index]`\n",
        "- modification : `liste[index] = nouvelle_valeur`\n",
        "\n",
        "Dans les exercices, on va utiliser ça pour changer un **budget** de campagne."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "id": "9972c1a9",
      "metadata": {},
      "outputs": [],
      "source": [
        "# Modify a list item by index\n",
        "\n",
        "campagnes = [\"Google Ads\", \"Facebook Ads\", \"Email\"]\n",
        "budgets = [500, 300, 150]\n",
        "\n",
        "print(\"Budgets avant:\", budgets)\n",
        "\n",
        "budgets[1] = 450  # update the budget for the campaign at index 1\n",
        "print(\"Budgets après:\", budgets)\n",
        "\n",
        "print(\"campagnes[1] =\", campagnes[1])\n",
        "print(\"budget correspondant =\", budgets[1])"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "7c524578",
      "metadata": {},
      "source": [
        "### Exercice 2 — Listes campagnes / budgets\n",
        "\n",
        "Deux listes de même taille : noms de campagnes et budgets. Affiche un couple indice 1, modifie une valeur dans les budgets via un index de ton choix, puis montre la liste mise à jour.\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "id": "88a1168b",
      "metadata": {},
      "outputs": [],
      "source": [
        "# TODO — Exercice 2\n",
        "pass"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "id": "b93d6b00",
      "metadata": {},
      "outputs": [],
      "source": [
        "# Correction — Exercice 2 (lists)\n",
        "\n",
        "campagnes = [\"Summer Sale\", \"Black Friday\", \"Back to School\"]\n",
        "budgets = [1200, 2500, 300]\n",
        "\n",
        "print(\"campagnes[1] =\", campagnes[1])\n",
        "print(\"budgets[1] =\", budgets[1])\n",
        "print(\"Budgets avant:\", budgets)\n",
        "\n",
        "budgets[2] = 450\n",
        "\n",
        "print(\"Budgets après:\", budgets)"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "8b27175c",
      "metadata": {},
      "source": [
        "## 4. Vérifier avec `len()` et les indices\n",
        "\n",
        "Pour des listes, on utilise souvent :\n",
        "- `len(liste)` : le nombre d’éléments\n",
        "- `liste[i]` : lire la valeur à l’index `i`\n",
        "\n",
        "Dans l’exercice suivant, on va répondre avec de simples indices."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "id": "202a1561",
      "metadata": {},
      "outputs": [],
      "source": [
        "# Check len() + access by index (no loops)\n",
        "\n",
        "campagnes_quiz = [\"Google Ads\", \"Facebook Ads\", \"Email\"]\n",
        "budgets_quiz = [500, 300, 150]\n",
        "\n",
        "print(\"len(campagnes_quiz) =\", len(campagnes_quiz))\n",
        "print(\"campagnes_quiz[0] =\", campagnes_quiz[0])\n",
        "print(\"campagnes_quiz[2] =\", campagnes_quiz[2])\n",
        "print(\"budgets_quiz[1] =\", budgets_quiz[1])"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "221d2474",
      "metadata": {},
      "source": [
        "### Exercice 3 — Indices\n",
        "\n",
        "À partir de `campagnes_quiz = [\"Google Ads\", \"Facebook Ads\", \"Email\"]`, détermine l’index de `\"Facebook Ads\"` et celui du **dernier** élément, puis utilise ces indices pour afficher les deux valeurs correspondantes.\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "id": "5a5ff8b3",
      "metadata": {},
      "outputs": [],
      "source": [
        "# TODO — Exercice 3\n",
        "pass"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "id": "d5d24a9d",
      "metadata": {},
      "outputs": [],
      "source": [
        "# Correction — Exercice 3 (le dernier indice est souvent len(liste) - 1)\n",
        "\n",
        "campagnes_quiz = [\"Google Ads\", \"Facebook Ads\", \"Email\"]\n",
        "\n",
        "index_facebook = 1\n",
        "index_derniere = len(campagnes_quiz) - 1\n",
        "\n",
        "print(\"index_facebook =\", index_facebook)\n",
        "print(\"index_derniere =\", index_derniere)\n",
        "print(\"campagnes_quiz[index_facebook] =\", campagnes_quiz[index_facebook])\n",
        "print(\"campagnes_quiz[index_derniere] =\", campagnes_quiz[index_derniere])"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "db066121",
      "metadata": {},
      "source": [
        "## 5. Rétroliens : listes maintenant, boucles bientôt\n",
        "\n",
        "À ce stade, tu es à l’aise avec :\n",
        "- les chaînes de caractères (`str`) : concat, `len`, `upper`, `lower`\n",
        "- les listes : accès et modification avec `liste[index]`\n",
        "\n",
        "En **cours 4**, on utilisera des boucles `for` pour parcourir une liste (campagne par campagne), au lieu de n’accéder qu’à un index précis."
      ]
    },
    {
      "cell_type": "markdown",
      "id": "63a6ab3f",
      "metadata": {},
      "source": [
        "## 6. Mini défi de fin de séance (sans boucle)\n",
        "\n",
        "À partir de deux listes parallèles (noms de campagnes, budgets), choisis un **index** et affiche **une phrase** qui cite le nom et le budget. Il faudra convertir le nombre en texte pour la concaténation.\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "id": "eb0024f5",
      "metadata": {},
      "outputs": [],
      "source": [
        "# TODO — mini défi\n",
        "pass"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "id": "67263857",
      "metadata": {},
      "outputs": [],
      "source": [
        "# Mini challenge solution (no loops)\n",
        "\n",
        "campagnes = [\"Google Ads\", \"Facebook Ads\", \"Email\"]\n",
        "budgets = [500, 300, 150]\n",
        "\n",
        "i = 1  # choose which campaign to describe\n",
        "\n",
        "campagne = campagnes[i]\n",
        "budget = budgets[i]\n",
        "\n",
        "phrase = \"La campagne \" + campagne + \" a un budget de \" + str(budget) + \" euros.\"\n",
        "print(phrase)"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "36921591",
      "metadata": {},
      "source": [
        "---\n",
        "\n",
        "À la fin de ce Cours 3, tu dois :\n",
        "- être à l’aise avec les **chaînes de caractères** (`str`) : concat, `len`, `upper`, `lower` ;\n",
        "- être à l’aise avec les **listes** : accès et modification via `liste[index]` ;\n",
        "- savoir construire un petit message marketing en utilisant du texte + des listes.\n",
        "\n",
        "Dans les prochains cours, on passera aux **boucles `for`** pour parcourir automatiquement une liste (campagne par campagne)."
      ]
    }
  ],
  "metadata": {
    "kernelspec": {
      "display_name": "Python 3 (ipykernel)",
      "language": "python",
      "name": "python3"
    },
    "language_info": {
      "codemirror_mode": {
        "name": "ipython",
        "version": 3
      },
      "file_extension": ".py",
      "mimetype": "text/x-python",
      "name": "python",
      "nbconvert_exporter": "python",
      "pygments_lexer": "ipython3",
      "version": "3.11.9"
    }
  },
  "nbformat": 4,
  "nbformat_minor": 5
}
