{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Estudiante: María José Ramos \n",
    "\n",
    "# Análisis de Datos\n",
    "## Módulo 1: Research Software Engineering in Python\n",
    "\n",
    "### Tarea 1: Ejercicios para practicar las bases de Python.\n",
    "\n",
    "**Ejercicio 1: Lista de palabras**\n",
    "\n",
    "Escriba un programa en python que acepte una lista de palabras separadas por guiones, e imprima de vuelta las mismas palabras, sin repetición y nuevamente separadas por guiones, después de ordenarlas alfabéticamente.  \n",
    "Ejemplo de entrada: naranja-avión-melodía-tupla-avión  \n",
    "Salida esperada: avión-melodía-naranja-tupla"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "*1. Creando el código*\n",
    "\n",
    "Para resolver este problema, el código aceptará una entrada tipo string. Al convertir el string en listas, cuyos elementos son las palabras dadas, se pueden aplicar cambios para ordenar a las mismas y quitar sus repeticiones. A la lista final, con las palabras en el orden adecuado y sin repeticiones se convierte en string y se devuelve como salida.\n",
    "Nota: a medida que desarrollo el código, usaré el ejemplo de entrada y print() luego de los comandos, para comprobar que estoy obteniendo los resultados deseados en cada línea. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Escriba una lista de palabras separadas por guiones: naranja-avión-melodía-tupla-avión\n",
      "naranja-avión-melodía-tupla-avión\n"
     ]
    }
   ],
   "source": [
    "# Defino la variable que almacenará el input\n",
    "palabras = str(input('Escriba una lista de palabras separadas por guiones: '))\n",
    "print(palabras)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['naranja', 'avión', 'melodía', 'tupla', 'avión']\n"
     ]
    }
   ],
   "source": [
    "# Se convierte la entrada en lista usando .split\n",
    "listaPal = palabras.split('-')\n",
    "print(listaPal)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['avión', 'avión', 'melodía', 'naranja', 'tupla']\n"
     ]
    }
   ],
   "source": [
    "# Con sorted() la lista se ordena en orden alfabético:\n",
    "listaPalOrd = sorted(listaPal)\n",
    "print(listaPalOrd)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['avión', 'melodía', 'naranja', 'tupla']\n"
     ]
    }
   ],
   "source": [
    "# Defino una nueva lista vacía para almacenar las palabras no repetidas\n",
    "listaSinRep = []\n",
    "# Y se agrega cada elemento de listaPalOrd solo si el elemento no está \n",
    "# ya incluido. Así, se obtienen solo los elementos sin repetición.\n",
    "[listaSinRep.append(i) for i in listaPalOrd if i not in listaSinRep]\n",
    "print(listaSinRep)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "avión-melodía-naranja-tupla\n"
     ]
    }
   ],
   "source": [
    "# Utilizando .join se convierte listaSinRep en un string, con elementos\n",
    "# separados por guion.\n",
    "palabrasSeparadas= '-'.join(listaSinRep)\n",
    "# Así, palabrasSeparadas es el output esperado:\n",
    "print(palabrasSeparadas)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "*2. Probando el código con otros ejemplos*\n",
    "\n",
    "A continuación, definiré una función que guardará el código creado anteriormente, omitiendo los print luego de cada comando y solo conservando el print final. Luego, probaré la función con más entradas, para confirmar su funcionalidad.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Escriba una lista de palabras separadas por guiones: datos-ciencia-python-ciencia-ciencia-jupyter\n",
      "Las palabras ordenadas alfabéticamente, sin repetición y separadas por guion: \n",
      "ciencia-datos-jupyter-python\n"
     ]
    }
   ],
   "source": [
    "\n",
    "def ordenarSinRep(palabras):\n",
    "    listaPal = palabras.split('-')\n",
    "    listaPalOrd = sorted(listaPal)\n",
    "    listaSinRep = []\n",
    "    [listaSinRep.append(i) for i in listaPalOrd if i not in listaSinRep]\n",
    "    palabrasSeparadas= '-'.join(listaSinRep)\n",
    "    print('Las palabras ordenadas alfabéticamente, sin repetición y ' \n",
    "          f'separadas por guion: \\n{palabrasSeparadas}')\n",
    "    return\n",
    "\n",
    "palabras = str(input('Escriba una lista de palabras separadas por guiones: '))\n",
    "ordenarSinRep(palabras)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Escriba una lista de palabras separadas por guiones: conga-datos-instrumentación-módulo-teoría\n",
      "Las palabras ordenadas alfabéticamente, sin repetición y separadas por guion: \n",
      "conga-datos-instrumentación-módulo-teoría\n"
     ]
    }
   ],
   "source": [
    "# Un ejemplo más:\n",
    "\n",
    "palabras = str(input('Escriba una lista de palabras separadas por guiones: '))\n",
    "ordenarSinRep(palabras)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Y como se ha demostrado, el código funciona."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[NbConvertApp] Converting notebook ejercicio1.ipynb to html\n",
      "[NbConvertApp] Writing 581588 bytes to ejercicio1.html\n"
     ]
    }
   ],
   "source": [
    "! jupyter nbconvert ejercicio1.ipynb --to html --output ejercicio1.html"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "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.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}