{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Chapitre 4 : \"Conteneurs standard\"\n",
    "\n",
    "### <span class=\"bg-info\">« *Ce que l'on conçoit bien s'énonce clairement.* »</span>\n",
    "\n",
    "Nicolas Boileau $-$ l'Art poétique"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### <span class=\"bg-success\">CE QU'IL FAUT RETENIR</span>\n",
    "\n",
    "- Une liste est une collection ordonnée et modifiable d’éléments séparés par des virgules. Elle est entourée de crochets.\n",
    "- Un tuple est une collection ordonnée et non modifiable d’éléments séparés par des virgules. Il est entouré de parenthèses.\n",
    "- Un dictionnaire est un conteneur non ordonné d’éléments indexés par des clés. Il permet de stocher des couples notés `clé:valeur`, séparés les uns des autres par des virgules et entourés d’accolades.\n",
    "- Un ensemble est une collection itérable non ordonnée d’éléments uniques. Il est formé de valeurs séparées les unes des autres par des virgules et entourées d’accolades.\n",
    "- Listes et tuples permettent d'extraire éléments et sous-séquences en utilisant des *index*.\n",
    "- Dictionnaires et ensembles permettent des accès/recherches très rapides.\n",
    "\n",
    "***"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### exo04_01 ✓\n",
    "Définir la liste : `liste = [2, 56, 104, 5, 2, 3, 2, 1]`, puis effectuer les actions suivantes :\n",
    "\n",
    "- trier et afficher la liste ;\n",
    "- ajouter l’élément `12` à la liste et afficher la liste ;\n",
    "- renverser et afficher la liste ;\n",
    "- afficher l’indice de l’élément `3` ;\n",
    "- enlever les élément `2` et afficher la liste ;\n",
    "- afficher la sous-liste du $2^e$ au $4^e$ élément ;\n",
    "- afficher la sous-liste du début au $2^e$ élément ;\n",
    "- afficher la sous-liste du $3^e$ élément à la fin de la liste ;\n",
    "- afficher la sous-liste complète de la liste ;\n",
    "- afficher les trois derniers éléments en utilisant un indiçage négatif.\n",
    "\n",
    "Bien remarquer que certaines méthodes de liste *ne retournent rien*."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# exo04_01\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### exo04_02 ✓\n",
    "Initialiser et afficher les deux listes suivantes :\n",
    "\n",
    "- `liste1`, une liste vide ;\n",
    "- `liste2`, une liste de cinq flottants nuls.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# exo04_02"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### exo04_03 ✓\n",
    "\n",
    "Utiliser `range()` pour afficher :\n",
    "\n",
    "- les entiers de 0 à 3 ;\n",
    "- les entiers de 2 à 14 par pas de 2 ;\n",
    "- les entiers de 0 à 3 **et** les entiers impairs de 7 à 11.\n",
    "\n",
    "**Remarque :** En réalité `range()` est un *itérateur*. Si on veut afficher son résultat, il faut le transtyper en un type itérable, une *liste* par exemple."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# exo04_03"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### exo04_04 ✓\n",
    "\n",
    "Définir et afficher une liste des entiers multiples de $3$ de l'intervalle $[0, 20]$, puis tester et afficher l’appartenance des éléments de l'intervalle $]3, 11[$ à cette liste."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# exo04_04"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### exo04_05 ✓✓\n",
    "\n",
    "Ajouter $3$ à chaque élément d’une liste d’entiers de 0 à 5, mais seulement si l’élément est supérieur ou égal à 2."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# exo04_05"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### exo04_06 ✓\n",
    "\n",
    "Utiliser la fonction `range()` pour calculer la somme d’une liste d’entiers de 0 à 59.\n",
    "\n",
    "**Remarque :** Est-il possible de vérifier ce résultat indépendamment ([indice](https://fr.wikipedia.org/wiki/Somme_%28arithm%C3%A9tique%29#Somme_des_premiers_entiers)) ?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# exo04_06"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### exo04_07 ✓\n",
    "\n",
    "Définir deux ensembles `E = {'G', 'U', 'D', 'U', 'L', 'E'}` et `F = {'G', 'E', 'L', 'I', 'N', 'O', 'T', 'T', 'E'}`, les afficher puis afficher les résultats suivants :\n",
    "\n",
    "- les ensembles initiaux ;\n",
    "- le cardinal de `F` ;\n",
    "- le test d’appartenance de l’élément `'D'` à `E` ;\n",
    "- le test d’appartenance de l’élément `'D'` à `F` ;\n",
    "- les différences `(E - F)` et `(F - E)`. Sont-elles les mêmes ? ;\n",
    "- l’union de `E` et `F` ;\n",
    "- l’intersection de `E` et `F`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# exo04_07"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### exo04_08 ✓✓\n",
    "\n",
    "Soit le tableau suivant représentant des informations physico-chimiques sur des éléments simples (température d’ébullition ($T_e$) et de fusion ($T_f$), numéro ($Z$) et masse ($A$) atomiques :\n",
    "\n",
    "Élément | $T_e$ | $T_f$ | $Z$ | $A$\n",
    ":-: | :-: | :-: | :-: | :-:\n",
    "Au | 2970 | 1063 | 79 | 196.967\n",
    "Ga | 2237 | 29.8 | 31 | 69.72\n",
    "\n",
    "Affecter les données de ce tableau à un dictionnaire `elements` de façon à pouvoir écrire par exemple :\n",
    "\n",
    "```python\n",
    "print(elements[\"Au\"][2])   # affiche : 79\n",
    "```"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# exo04_08"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### exo04_09 ✓\n",
    "\n",
    "Soit la liste `liste = [19, 5, 8, 2, 13, 78, 1, 5]`.\n",
    "\n",
    "Afficher la liste avec le plus grand élément au début et les deux plus petits en fin de liste."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# exo04_09"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### exo04_10 ✓✓\n",
    "\n",
    "À l'aide de `range()`, définir deux listes :\n",
    "\n",
    "- `a`, la liste des 10 premiers nombres pairs (commançant à 0) ;\n",
    "- `b`, la liste des 10 premiers nombres impairs.\n",
    "\n",
    "Afficher `a` et `b`, puis, en utilisant une boucle `for`, afficher la liste `ab` des 20 premiers entiers naturels."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# exo04_10"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### exo04_11 ✓✓\n",
    "\n",
    "Un brin d'ADN est formé de deux séquences de bases complémentaires appariées.  \n",
    "Il existe 4 bases nommées `\"A\"`, `\"C\"`, `\"G\"` et `\"T\"`.\n",
    "\n",
    "Sachant que le complémentaire de `\"A\"` est `\"T\"` (et inversement) et que le complémentaire de `\"C\"` est `\"G\"` (et inversement), on demande :\n",
    "- de définir un dictionnaire `base_comp` dont les clés sont les 4 bases et les valeurs les bases complémentaires ;\n",
    "- d'utiliser ce dictionnaire pour afficher la séquence complémentaire de :\n",
    "```python\n",
    "seq = 'GGACGGACGTTGACT'\n",
    "```"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# exo04_11"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### exo04_12 ✓\n",
    "\n",
    "On donne une liste d'acides aminés `aa_test` et une séquence protéique `seq` :\n",
    "```python\n",
    "aa_test = ['n', 'y']\n",
    "seq = 'lewyfhwrylps'\n",
    "```\n",
    "\n",
    "Afficher la position de la première occurrence des acides aminés de `aa_test` dans `seq`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# exo04_12"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "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.7.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
