{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Listas e Funções\n",
    "\n",
    "Agora que você já aprendeu sobre listas, vamos ver algumas funções que podem ser usadas com elas.\n",
    "\n",
    "Vamos começar relembrando algumas funções que você já aprendeu sobre listas.<br>\n",
    "Se tiver dúvidas, reveja o [notebook sobre listas](08-listas.ipynb).\n",
    "\n",
    "## Acessando elementos\n",
    "Esse exercício é para relembrar como acessamos elementos de uma lista.\n",
    "\n",
    "Na célula abaixo mostre o segundo elemento da lista:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "n = [1, 3, 5]\n",
    "\n",
    "# Escreva o seu código abaixo\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Modificando elementos\n",
    "Também já vimos como modificar elementos.<br>\n",
    "Na linha 3 da célula abaixo, multiplique o segundo elemento da lista `n` por 5 e sobrescreva o segundo elemento com o resultado da multiplicação.<br>\n",
    "Ao final mostre o conteúdo da lista."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "n = [1, 3, 5]\n",
    "# Escreva o seu código abaixo\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Adicionando elementos à lista\n",
    "\n",
    "Na célula abaixo use a função `.append(elemento)` para adicionar o número 4 ao final lista."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[1, 3, 5]\n"
     ]
    }
   ],
   "source": [
    "n = [1, 3, 5]\n",
    "# Adicione o número 4 aqui\n",
    "\n",
    "print(n)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Várias maneiras de remover elementos de listas\n",
    "\n",
    "Existem diversas formas de remover elementos de listas. \n",
    "\n",
    "#### .pop(indice)\n",
    "Começaremos com `.pop(indice)`. Ela removerá o elemento no índice `indice` e o retornará para você:\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "3\n",
      "[1, 5]\n"
     ]
    }
   ],
   "source": [
    "n = [1, 3, 5]\n",
    "elemento = n.pop(1)\n",
    "# retorna 3 (o elemento no índice 1)\n",
    "print(elemento)\n",
    "print(n)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### .remove(elemento)\n",
    "`.remove(elemento)` vai remover o próprio elemento assim que encontrá-lo:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[3, 5]\n"
     ]
    }
   ],
   "source": [
    "n = [1, 3, 5]\n",
    "n.remove(1) # Remove o elemento 1 da lista, não o elemento no índice 1\n",
    "print(n)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### del(lista[indice])\n",
    "\n",
    "`del(lista[indice])` irá remover o elemento de `lista` na posição `indice`, retornando nada."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[1, 5]\n"
     ]
    }
   ],
   "source": [
    "n = [1, 3, 5]\n",
    "del(n[1]) # Remove o elemento em n[1] e retorna nada\n",
    "print(n)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Na célula abaixo, remova o primeiro elemento de `n` usando qualquer uma das funções acima."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[1, 3, 5]\n"
     ]
    }
   ],
   "source": [
    "n = [1, 3, 5]\n",
    "# Remova o primeiro elemento da lista n\n",
    "\n",
    "print(n)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Alterando o que uma função faz\n",
    "\n",
    "Na célula abaixo modifique a função `funcao` para que ela multiplique por 7 o argumento recebido e o retorne."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "8\n"
     ]
    }
   ],
   "source": [
    "numero = 5\n",
    "\n",
    "def funcao(x):\n",
    "    return x + 3\n",
    "\n",
    "print(funcao(numero))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Na célula abaixo, defina uma função chamada `soma` que possui dois parâmetros `a` e `b` e retorna a soma deles. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "ename": "NameError",
     "evalue": "name 'soma' is not defined",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mNameError\u001b[0m                                 Traceback (most recent call last)",
      "\u001b[0;32m<ipython-input-13-75af015b947f>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m      5\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      6\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 7\u001b[0;31m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msoma\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
      "\u001b[0;31mNameError\u001b[0m: name 'soma' is not defined"
     ]
    }
   ],
   "source": [
    "x = 5\n",
    "y = 13\n",
    "# Defina soma aqui\n",
    "\n",
    "\n",
    "\n",
    "print(soma(x, y))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Na célula abaixo, escreva uma função chamada `funcao_string` que recebe uma string `s` como argumento e retorna esse argumento concatenado com a palavra `mundo`. Não adicione um espaço antes de mundo.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "ename": "NameError",
     "evalue": "name 'funcao_string' is not defined",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mNameError\u001b[0m                                 Traceback (most recent call last)",
      "\u001b[0;32m<ipython-input-14-7f335bc657d9>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m      4\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      5\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 6\u001b[0;31m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfuncao_string\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mentrada\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
      "\u001b[0;31mNameError\u001b[0m: name 'funcao_string' is not defined"
     ]
    }
   ],
   "source": [
    "entrada = \"Hello\"\n",
    "# Escreva a sua função aqui\n",
    "\n",
    "\n",
    "\n",
    "print(funcao_string(entrada))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Nós podemos passar uma lista para uma função, do mesmo jeito que passamos qualquer argumento. Veja o exemplo abaixo:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[3, 5, 7]\n"
     ]
    }
   ],
   "source": [
    "def funcao_lista(x):\n",
    "    \"\"\"Não faz nada, apenas retorna a lista recebida x\"\"\"\n",
    "    return x\n",
    "\n",
    "n = [3, 5, 7]\n",
    "print(funcao_lista(n))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Funções disponíveis para serem usadas com listas\n",
    "\n",
    "Vejamos algumas funções úteis que já estão disponíveis em Python e que podem ser usadas com listas. Veja algumas dessas funções célula abaixo:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "10\n",
      "-10\n",
      "5\n"
     ]
    }
   ],
   "source": [
    "lista = [-10, -5, 5, 10]\n",
    "\n",
    "# Mostrando o maior valor em uma lista\n",
    "print(max(lista))\n",
    "# Mostrando o menor valor em uma lista\n",
    "print(min(lista))\n",
    "# Mostrando o valor absoluto de um elemento\n",
    "print(abs(-5))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Dada a lista abaixo, modifique a lista para que todos os elementos fiquem com o sinal trocado, depois mostre o maior e o menor elemento da lista modificada."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "numeros = [2, -3, -8, 5, -4, 10, -2, 1, 0 ]\n",
    "\n",
    "# Escreva o seu código aqui\n"
   ]
  }
 ],
 "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.6.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}