{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# <font color='blue'>Data Science Academy - Python Fundamentos - Capítulo 4</font>\n",
    "\n",
    "## Download: http://github.com/dsacademybr"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Exercícios "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[27, 64, 125]\n"
     ]
    }
   ],
   "source": [
    "# Exercício 1 - Crie uma lista de 3 elementos e calcule a terceira potência de cada elemento.\n",
    "list1 = [3,4,5]\n",
    "quadrado = [item**3 for item in list1] \n",
    "print(quadrado)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['A', 'a', 1]\n",
      "['DATA', 'data', 4]\n",
      "['SCIENCE', 'science', 7]\n",
      "['ACADEMY', 'academy', 7]\n",
      "['OFERCE', 'oferce', 6]\n",
      "['OS', 'os', 2]\n",
      "['MELHORES', 'melhores', 8]\n",
      "['CURSOS', 'cursos', 6]\n",
      "['DE', 'de', 2]\n",
      "['ANÁLISE', 'análise', 7]\n",
      "['DE', 'de', 2]\n",
      "['DADOS', 'dados', 5]\n",
      "['DO', 'do', 2]\n",
      "['BRASIL', 'brasil', 6]\n"
     ]
    }
   ],
   "source": [
    "# Exercício 2 - Reescreva o código abaixo, usando a função map(). O resultado final deve ser o mesmo!\n",
    "palavras = 'A Data Science Academy oferce os melhores cursos de análise de dados do Brasil'.split()\n",
    "resultado = [[w.upper(), w.lower(), len(w)] for w in palavras]\n",
    "for i in resultado:\n",
    "    print (i)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['A', 'a', 1]\n",
      "['DATA', 'data', 4]\n",
      "['SCIENCE', 'science', 7]\n",
      "['ACADEMY', 'academy', 7]\n",
      "['OFERCE', 'oferce', 6]\n",
      "['OS', 'os', 2]\n",
      "['MELHORES', 'melhores', 8]\n",
      "['CURSOS', 'cursos', 6]\n",
      "['DE', 'de', 2]\n",
      "['ANÁLISE', 'análise', 7]\n",
      "['DE', 'de', 2]\n",
      "['DADOS', 'dados', 5]\n",
      "['DO', 'do', 2]\n",
      "['BRASIL', 'brasil', 6]\n"
     ]
    }
   ],
   "source": [
    "resultado = map(lambda w: [w.upper(), w.lower(), len(w)], palavras)\n",
    "for i in resultado:\n",
    "    print (i)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[1, 3, 5, 7], [2, 4, 6, 8]]\n"
     ]
    }
   ],
   "source": [
    "# Exercício 3 - Calcule a matriz transposta da matriz abaixo.\n",
    "# Caso não saiba o que é matriz transposta, visite este link: https://pt.wikipedia.org/wiki/Matriz_transposta\n",
    "# Matriz transposta é um conceito fundamental na construção de redes neurais artificiais, base de sistemas de IA.\n",
    "matrix = [[1, 2],[3,4],[5,6],[7,8]]\n",
    "transpose = [[row[i] for row in matrix] for i in range(2)]\n",
    "print(transpose)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[0, 0]\n",
      "[1, 1]\n",
      "[4, 8]\n",
      "[9, 27]\n",
      "[16, 64]\n"
     ]
    }
   ],
   "source": [
    "# Exercício 4 - Crie duas funções, uma para elevar um número ao quadrado e outra para elevar ao cubo. \n",
    "# Aplique as duas funções aos elementos da lista abaixo. \n",
    "# Obs: as duas funções devem ser aplicadas simultaneamente.\n",
    "lista = [0, 1, 2, 3, 4]\n",
    "\n",
    "def square(x):\n",
    "        return (x**2)\n",
    "    \n",
    "def cube(x):\n",
    "        return (x**3)\n",
    "\n",
    "funcs = [square, cube]\n",
    "\n",
    "for i in lista:\n",
    "    valor = map(lambda x: x(i), funcs)\n",
    "    print(list((valor)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[1024, 177147, 16777216]"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Exercício 5 - Abaixo você encontra duas listas. Faça com que cada elemento da listaA seja elevado \n",
    "# ao elemento correspondente na listaB.\n",
    "listaA = [2, 3, 4]\n",
    "listaB = [10, 11, 12]\n",
    "list(map(pow, listaA, listaB))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[-5, -4, -3, -2, -1]"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Exercício 6 - Considerando o range de valores abaixo, use a função filter() para retornar apenas os valores negativos.\n",
    "range(-5, 5)\n",
    "list(filter((lambda x: x < 0), range(-5,5)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[2, 3, 5, 7]\n"
     ]
    }
   ],
   "source": [
    "# Exercício 7 - Usando a função filter(), encontre os valores que são comuns às duas listas abaixo.\n",
    "a = [1,2,3,5,7,9]\n",
    "b = [2,3,5,6,7,8]\n",
    "print (list(filter(lambda x: x in a, b)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "05/04/2018 22:16\n",
      "05/04/2018 22:16\n"
     ]
    }
   ],
   "source": [
    "# Exercício 8 - Considere o código abaixo. Obtenha o mesmo resultado usando o pacote time. \n",
    "# Não conhece o pacote time? Pesquise!\n",
    "import datetime\n",
    "print (datetime.datetime.now().strftime(\"%d/%m/%Y %H:%M\"))\n",
    "\n",
    "import time\n",
    "print (time.strftime(\"%d/%m/%Y %H:%M\"))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'a': 4, 'b': 5}\n"
     ]
    }
   ],
   "source": [
    "# Exercício 9 - Considere os dois dicionários abaixo. \n",
    "# Crie um terceiro dicionário com as chaves do dicionário 1 e os valores do dicionário 2.\n",
    "dict1 = {'a':1,'b':2}\n",
    "dict2 = {'c':4,'d':5}\n",
    "\n",
    "def trocaValores(d1, d2):\n",
    "    dicTemp = {}\n",
    "    \n",
    "    for d1key, d2val in zip(d1,d2.values()):\n",
    "        dicTemp[d1key] = d2val\n",
    "    \n",
    "    return dicTemp\n",
    "\n",
    "dict3 = trocaValores(dict1, dict2)\n",
    "print(dict3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "g\n",
      "h\n"
     ]
    }
   ],
   "source": [
    "# Exercício 10 - Considere a lista abaixo e retorne apenas os elementos cujo índice for maior que 5.\n",
    "lista = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']\n",
    "for indice, valor in enumerate(lista):\n",
    "    if indice <= 5:\n",
    "        continue\n",
    "    else:\n",
    "        print (valor)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Fim"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Obrigado - Data Science Academy - <a href=\"http://facebook.com/dsacademybr\">facebook.com/dsacademybr</a>"
   ]
  }
 ],
 "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.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
