{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "eef159c9",
   "metadata": {},
   "source": [
    "# Feuille d'exercices 3\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "```{admonition} Objectifs\n",
    "* Compléments sur les listes\n",
    "* Ensembles et dictionnaires\n",
    "* Mot-clefs **`all`** et **`any`**\n",
    "```\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "## Exercice 1 : listes par compréhension\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "**Question 1 :** En utilisant une déclaration de liste **par compréhension**, écrire la liste des puissances de $2$ comprises entre $2^1$ et $2^{20}$."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "45f3560d",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Votre réponse ici"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c5c0bf7c",
   "metadata": {},
   "source": [
    "**Question 2 :** En utilisant une déclaration de liste **par compréhension**, donner la liste des caractères de la chaîne \"Université Paris 8 Vincennes Saint-Denis\" qui ne sont pas des espaces."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "e075f39b",
   "metadata": {},
   "outputs": [],
   "source": [
    "chaine = \"Université Paris 8 Vincennes Saint-Denis\"\n",
    "\n",
    "# Votre réponse ici"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "53825101",
   "metadata": {},
   "source": [
    "**Question 3 :** En utilisant une déclaration de liste par compréhension, donner **le nombre** d'entiers compris entre $1000$ et $2000$, qui sont à la fois divisibles par $2$ et $7$."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "a0ef135c",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Votre réponse ici"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "69f1b435",
   "metadata": {},
   "source": [
    "**Question 4 :** En utilisant une déclaration de liste **par compréhension**, écrire une fonction `diviseurs(n)` qui retourne la liste des diviseurs d'un entier `n`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "822cea13",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Votre réponse ici"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "281942ef",
   "metadata": {},
   "source": [
    "## Exercice 2 : mots-clefs **`any`** et **`all`**\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "Un **palindrome** est un mot ou une phrase qui se lit identiquement dans les deux sens. Par exemple, les mots \"radar\", \"kayak\" ou \"naan\" sont des palindromes.\n",
    "\n",
    "**Question 1 :** En utilisant le mot clef **`all`**, écrire une fonction `est_palindrome(mot)` qui teste si la chaîne de caractère mot est (ou non) un palindrome. Pour cela, on pourra utiliser le mot-clef **`all`**."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "096f4a62",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Votre réponse ici"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ea841e6b",
   "metadata": {},
   "source": [
    "**Question 2 :** En utilisant le mot clef **`any`**, écrire une fonction `contient_palindrome(L)` qui prend en entrée une **liste** de chaînes de caractères `L`, et qui teste si **au moins une** de ces chaînes est un palindrome."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "ac40de19",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Votre réponse ici"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7aa7027e",
   "metadata": {},
   "source": [
    "## Exercice 3 : ensembles\n",
    "\n",
    "\n",
    "\n",
    "**Question 1 :** Écrire une fonction `caracteres(texte)` qui prend en entrée une chaîne de caractères `texte`, et qui retourne **l'ensemble** des caractères de la chaîne."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "e45cbc06",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Votre réponse ici"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "23ba23ef",
   "metadata": {},
   "source": [
    "## Exercice 4 : dictionnaires\n",
    "\n",
    "\n",
    "\n",
    "**Question 1 :** Écrire une fonction `compte_caracteres(texte)` qui prend en entrée une chaîne de caractères `texte`, et qui retourne le dictionnaire ayant :\n",
    "* pour clés les caractères de la chaîne `texte`\n",
    "* pour valeur correspondant au caractère `c`, le nombre de fois que `c` apparaît dans `texte`.\n",
    "\n",
    "Par exemple, pour la chaîne \"calcul\", on obtient le dictionnaire `{ 'c': 2, 'a': 1, 'l': 2, 'u': 1}`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "9508ceae",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Votre réponse ici"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "860fd469",
   "metadata": {},
   "source": [
    "## Exercice 5 : somme de puissances\n",
    "\n",
    "\n",
    "**Question 1 :** Créer une fonction ``liste_puissances(n, p)`` qui prend en entrée deux paramètres paramètres `n` et `p`, et qui retourne la liste des entiers de la forme $x^p$, pour $x$ compris entre $1$ et $n$.  Par exemple, pour $n = 4$ et $p = 3$, on obtient la liste ``[1, 8, 27, 64]``. Votre fonction devra utiliser une déclaration de liste **par compréhension**."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "b3f88f89",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Votre réponse ici"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0b1067f0",
   "metadata": {},
   "source": [
    "**Question 2 :** Créer une fonction **récursive** `somme_liste(L)` qui retourne la somme des éléments d'une liste `L`. Si la liste `L` est vide, la fonction doit retourner $0$."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "b113d261",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Votre réponse ici"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "71be5ac0",
   "metadata": {},
   "source": [
    "**Question 3 :** À l'aide du mot-clef **`all`** et des questions précédentes, vérifier que l'identité\n",
    "\n",
    "$$\n",
    "    \\sum_{i=1}^n i^3 = \\left(\\sum_{i=1}^n i \\right)^2\n",
    "$$\n",
    "\n",
    "est satisfaite pour les entiers $n$ compris entre $1$ et $100$."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "4b4d8879",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Votre réponse ici"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d40d37f2",
   "metadata": {},
   "source": [
    "## Exercice 6 : corriger des erreurs\n",
    "\n",
    "\n",
    "\n",
    "**Question 1 :** Dans la cellule suivante, une fonction a été écrite dnas le but d'inverser l'ordre des lettres d'un mot. Cette fonction contient **plusieurs erreurs**. Exécutez la cellule, puis observez ce qui est affiché. Essayez ensuite de corriger les erreurs pour obtenir le bon résultat."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "80efb8bf",
   "metadata": {},
   "outputs": [],
   "source": [
    "def ma_fonction(mot)\n",
    "    renverse = \"\"\n",
    "    n = len(mot)\n",
    "    for i in range(1, n):\n",
    "        renverse = mot(i) + renverse\n",
    "    return renverse\n",
    "\n",
    "ma_fonction(\"calcul\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4be7fe3e",
   "metadata": {},
   "source": [
    "## Exercice 7 : doublon dans les listes\n",
    "\n",
    "**Question 1 :** Écrire une fonction `doublon(L)` qui prend en entrée une liste `L`, et qui teste si la liste `L` contient au moins deux fois le même élément."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "05c822f3",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Votre réponse ici"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "25fed144",
   "metadata": {},
   "source": [
    "**Question 2 :** Si ce n'est pas déjà fait, reprendre la question 1, en utilisant le mot-clef **`any`**, ainsi qu'une syntaxe **par compréhension**."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "bc13389b",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Votre réponse ici"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "python",
   "language": "python",
   "name": "python"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
