{ "cells": [ { "cell_type": "markdown", "id": "23d25984", "metadata": {}, "source": [ "# Sixième exercice en Python (Niveau Lycée)" ] }, { "cell_type": "markdown", "id": "e72e046d", "metadata": {}, "source": [ "" ] }, { "cell_type": "markdown", "id": "c69b5047", "metadata": {}, "source": [ "*Résumé en français* : Vous devez créer un programme qui à partir d'une phrase, met tous les mots distincts dans une liste et retourne une chaine donnant les positions des mots de la phrase initiale dans cette liste. On ne tiendra pas compte de la casse." ] }, { "cell_type": "markdown", "id": "f2539dc9", "metadata": {}, "source": [ "Voici un autre exemple pour mieux comprendre :\n", "\n", "`phrase = 'The number 0 is such a strange number Strangely it has zero meaning'`\n", "\n", "`>> compress(phrase)`\n", "\n", "`'012345617891011'`" ] }, { "cell_type": "markdown", "id": "6b12a0f0", "metadata": {}, "source": [ "En effet, la liste des mots uniques est :\n", "\n", "`['the', 'number', '0', 'is', 'such', 'a', 'strange', 'strangely', 'it', 'has', 'zero', 'meaning']`\n", "\n", "Il faut donc bien voir que le mot 'strangely' est à la 8e place dans la phrase initiale mais à la 7e place dans la liste des mots uniques, c'est donc 7 qu'il faut récupérer en non 8." ] }, { "cell_type": "markdown", "id": "728f89b3", "metadata": {}, "source": [ "## Version classique avec boucles" ] }, { "cell_type": "markdown", "id": "4fe60606", "metadata": {}, "source": [ "On peut commencer par créer la *liste des mots uniques* trouvés dans la phrase et dans un second temps parcourir à nouveau tous les mots de la phrase pour trouver leurs positions dans cette liste. Première étape :" ] }, { "cell_type": "code", "execution_count": 1, "id": "a9b28f09", "metadata": {}, "outputs": [], "source": [ "def compress(phrase):\n", " mots = [] # Tableau des mots uniques\n", " for m in phrase.lower().split(): # On parcourt chaque mot\n", " if m not in mots: # Nouveau mot ?\n", " mots.append(m) # On l'ajoute à la liste\n", " return mots" ] }, { "cell_type": "code", "execution_count": 2, "id": "4d569d01", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['the',\n", " 'number',\n", " '0',\n", " 'is',\n", " 'such',\n", " 'a',\n", " 'strange',\n", " 'strangely',\n", " 'it',\n", " 'has',\n", " 'zero',\n", " 'meaning']" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "compress('The number 0 is such a strange number Strangely it has zero meaning')" ] }, { "cell_type": "markdown", "id": "52f8e2ee", "metadata": {}, "source": [ "Remarquez qu'en Python, `split` peut s'utiliser sans paramètre (par défaut ce sera espace) :" ] }, { "cell_type": "code", "execution_count": 3, "id": "6ec9a96b", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['ab', 'cd']" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "'ab cd'.split()" ] }, { "cell_type": "markdown", "id": "34b4a788", "metadata": {}, "source": [ "On peut maintenant chercher les **positions** des mots dans la liste des mots uniques en utilisant `index` :" ] }, { "cell_type": "code", "execution_count": 4, "id": "273e0db9", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "3" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "['the', 'number', '0', 'is'].index('is') # Position de 'is' ?" ] }, { "cell_type": "markdown", "id": "aa32b891", "metadata": {}, "source": [ "Ce qui donne cette version finale :" ] }, { "cell_type": "code", "execution_count": 5, "id": "f0deb25f", "metadata": {}, "outputs": [], "source": [ "def compress(phrase):\n", " decoup = phrase.lower().split()\n", " mots = []\n", " for m in decoup:\n", " if m not in mots:\n", " mots.append(m)\n", " return ''.join([ str(mots.index(m)) for m in decoup ])" ] }, { "cell_type": "code", "execution_count": 6, "id": "de6fede9", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'012345617891011'" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "compress('The number 0 is such a strange number Strangely it has zero meaning')" ] }, { "cell_type": "markdown", "id": "ce719e9f", "metadata": {}, "source": [ "`str` permet de convertir un nombre en chaine." ] }, { "cell_type": "markdown", "id": "1524977e", "metadata": {}, "source": [ "## Autres piste" ] }, { "cell_type": "markdown", "id": "08402512", "metadata": {}, "source": [ "Nous aurions également pu utiliser un **dictionnaire** :" ] }, { "cell_type": "code", "execution_count": 7, "id": "04e628bd", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'a': None, 'b': None, 'c': None}" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dict.fromkeys('a b B A C b a'.lower().split())" ] }, { "cell_type": "code", "execution_count": 8, "id": "20c64311", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['a', 'b', 'c']" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "list(dict.fromkeys('a b B A C b a'.lower().split()))" ] }, { "cell_type": "markdown", "id": "70123d68", "metadata": {}, "source": [ "Ce qui donne ce **programme final** :" ] }, { "cell_type": "code", "execution_count": 9, "id": "e16e8e15", "metadata": {}, "outputs": [], "source": [ "def compress(phrase):\n", " decoup = phrase.lower().split() \n", " mots = list(dict.fromkeys(decoup)) # Liste des mots uniques\n", " return ''.join(str(mots.index(m)) for m in decoup)" ] }, { "cell_type": "code", "execution_count": 10, "id": "49ab1d4e", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'012345617891011'" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "compress('The number 0 is such a strange number Strangely it has zero meaning')" ] } ], "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.9.6" } }, "nbformat": 4, "nbformat_minor": 5 }