{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Devoir sur les iterateurs et les générateurs \n", "## Solutions\n", "\n", "### 1er problème\n", "\n", "Créer un générateur qui génère les carrés de nombres jusqu'à un certain nombre N." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def gensquares(N):\n", " for i in range(N):\n", " yield i ** 2" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0\n", "1\n", "4\n", "9\n", "16\n", "25\n", "36\n", "49\n", "64\n", "81\n" ] } ], "source": [ "for x in gensquares(10):\n", " print (x)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 2ième problème\n", "\n", "Créez un générateur qui donne «n» nombres aléatoires entre un nombre de départ et un nombre d'arrivée (qui sont les pramètres d'entrée).\n", "Remarque: utilisez la bibliothèque random.\n", "\n", "Par exemple:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "6" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import random\n", "\n", "random.randint(1,10)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def rand_num(départ,arrivée,n):\n", " \n", " for i in range(n):\n", " yield random.randint(départ, arrivée)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "8\n", "5\n", "1\n", "3\n", "7\n", "1\n", "3\n", "9\n", "2\n", "9\n", "3\n", "1\n" ] } ], "source": [ "for num in rand_num(1,10,12):\n", " print (num)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 3ième problème\n", "\n", "Utilisez la fonction iter () pour convertir la chaîne ci-dessous" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "b\n" ] } ], "source": [ "s = 'bonjour'\n", "\n", "s = iter(s)\n", "\n", "print (next(s))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 4ième problème\n", "\n", "Expliquez un cas d'utilisation pour un générateur en utilisant une déclaration yield plutôt que d'utiliser une fonction normale avec une instruction de retour.\n", "\n", "**If the output has the potential of taking up a large amount of memory and you only intend to iterate through it, you would want to use a generator. (Multiple answers are acceptable here!)**" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Crédits supplémentaires !\n", "Pouvez-vous expliquer ce que *gencomp* est dans le code ci-dessous?\n", "(Note: Nous n'avons jamais couvert cela en cours ! Vous devrez faire quelques appels à Google et Stack Overflow !)" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "4\n", "5\n" ] } ], "source": [ "ma_liste = [1,2,3,4,5]\n", "\n", "gencomp = (item for item in ma_liste if item > 3)\n", "\n", "for item in gencomp:\n", " print (item)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Conseil google: generator comprehension !\n", "\n", "# Beau boulot !" ] } ], "metadata": { "anaconda-cloud": {}, "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.6.8" } }, "nbformat": 4, "nbformat_minor": 1 }