{ "metadata": { "name": "" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "[Python para Desenvolvedores](http://ricardoduarte.github.io/python-para-desenvolvedores/#conteudo)\n", "===================================\n", "2ª edi\u00e7\u00e3o, revisada e ampliada\n", "-----------------------------------\n", "\n", "Respostas dos exerc\u00edcios I\n", "=============================\n", "_____________________________\n", "1\\. Implementar duas fun\u00e7\u00f5es:\n", "\n", "+ Uma que converta temperatura em graus *Celsius* para *Fahrenheit*.\n", "+ Outra que converta temperatura em graus *Fahrenheit* para *Celsius*.\n", "\n", "Lembrando que:\n", "\n", "$$F = \\frac{9}{5} \\cdot C + 32$$\n", "\n", "Solu\u00e7\u00e3o:\n" ] }, { "cell_type": "code", "collapsed": false, "input": [ "def celsius_fahrenheit(c=0):\n", "\n", " # round(n, d) => arredonda n em d casas decimais\n", " return round(9. * c / 5. + 32., 2)\n", "\n", "def fahrenheit_celsius(f=0):\n", " \n", " return round(5. * (f - 32.) / 9., 2)\n", "\n", "# Testes\n", "print celsius_fahrenheit(123.0)\n", "print fahrenheit_celsius(253.4)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "253.4\n", "123.0\n" ] } ], "prompt_number": 1 }, { "cell_type": "markdown", "metadata": {}, "source": [ "2\\. Implementar uma fun\u00e7\u00e3o que retorne verdadeiro se o n\u00famero for primo (falso caso contr\u00e1rio). Testar de 1 a 100.\n", "\n", "Solu\u00e7\u00e3o:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "# Testa se o n\u00famero \u00e9 primo\n", "def is_prime(n):\n", "\n", " if n < 2:\n", " return False\n", "\n", " for i in range(2, n):\n", " if not n % i:\n", " return False\n", " else:\n", " return True\n", "\n", "# Para x de 1 a 100\n", "for x in range(1, 101):\n", " if is_prime(x):\n", " print x" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "2\n", "3\n", "5\n", "7\n", "11\n", "13\n", "17\n", "19\n", "23\n", "29\n", "31\n", "37\n", "41\n", "43\n", "47\n", "53\n", "59\n", "61\n", "67\n", "71\n", "73\n", "79\n", "83\n", "89\n", "97\n" ] } ], "prompt_number": 2 }, { "cell_type": "markdown", "metadata": {}, "source": [ "3\\. Implementar uma fun\u00e7\u00e3o que receba uma lista de listas de comprimentos quaisquer e retorne uma lista de uma dimens\u00e3o.\n", "\n", "Solu\u00e7\u00e3o:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "def flatten(it):\n", " \"\"\"\n", " \"Achata\" listas...\n", " \"\"\"\n", "\n", " # Se for uma lista\n", " if isinstance(it, list):\n", " ls = []\n", "\n", " # Para cada item da lista\n", " for item in it:\n", " # Evoca flatten() recursivamente\n", " ls = ls + flatten(item)\n", " return ls\n", "\n", " else:\n", " return [it]\n", "\n", "# Teste\n", "l = [[1, [2]], [3, 4], [[5, 6], 7]]\n", "print flatten(l)\n", "\n", "# imprime: [1, 2, 3, 4, 5, 6, 7]" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "[1, 2, 3, 4, 5, 6, 7]\n" ] } ], "prompt_number": 3 }, { "cell_type": "markdown", "metadata": {}, "source": [ "4\\. Implementar uma fun\u00e7\u00e3o que receba um dicion\u00e1rio e retorne a soma, a m\u00e9dia e a varia\u00e7\u00e3o dos valores.\n", "\n", "Solu\u00e7\u00e3o:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "def stat(dic):\n", "\n", " # Soma\n", " s = sum(dic.values())\n", "\n", " # M\u00e9dia\n", " med = s / len(dic.values())\n", "\n", " # Varia\u00e7\u00e3o\n", " var = max(dic.values()) - min(dic.values())\n", "\n", " return s, med, var" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 4 }, { "cell_type": "markdown", "metadata": {}, "source": [ "5\\. Escreva uma fun\u00e7\u00e3o que:\n", "\n", "+ Receba uma frase como par\u00e2metro.\n", "+ Retorne uma nova frase com cada palavra com as letras invertidas.\n", "\n", "Solu\u00e7\u00e3o:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "def reverse1(t):\n", " \"\"\"\n", " Usando um loop convencional.\n", " \"\"\"\n", "\n", " r = t.split()\n", " for i in xrange(len(r)):\n", " r[i] = r[i][::-1]\n", " return ' '.join(r)\n", "\n", "def reverse2(t):\n", " \"\"\"\n", " Usando Generator Expression.\n", " \"\"\"\n", "\n", " return ' '.join(s[::-1] for s in t.split())\n", "\n", "# Testes\n", "f = 'The quick brown fox jumps over the lazy dog'\n", "print reverse1(f)\n", "print reverse2(f)\n", "# mostra: \"ehT kciuq nworb xof spmuj revo eht yzal god\"" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "ehT kciuq nworb xof spmuj revo eht yzal god\n", "ehT kciuq nworb xof spmuj revo eht yzal god\n" ] } ], "prompt_number": 5 }, { "cell_type": "markdown", "metadata": {}, "source": [ "6\\. Crie uma fun\u00e7\u00e3o que:\n", "\n", "+ Receba uma lista de tuplas (dados), um inteiro (chave, zero por padr\u00e3o igual) e um booleano (reverso, falso por padr\u00e3o).\n", "+ Retorne dados ordenados pelo item indicado pela chave e em ordem decrescente se reverso for verdadeiro.\n", "\n", "Solu\u00e7\u00e3o:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "def ord_tab(dados, chave=0, reverso=False):\n", "\n", " # Rotina para comparar as tuplas em sort()\n", " def _ord(x, y):\n", "\n", " return x[chave] - y[chave]\n", "\n", " dados.sort(_ord, reverse=reverso)\n", "\n", " return dados\n", "\n", "# Testes\n", "t = [(1, 2, 0), (3, 1, 5), (0, 3, 3)]\n", "print ord_tab(t)\n", "print ord_tab(t, 1)\n", "print ord_tab(t, 2)\n", "\n", "# Mostra:\n", "# [(0, 3, 3), (1, 2, 0), (3, 1, 5)]\n", "# [(3, 1, 5), (1, 2, 0), (0, 3, 3)]\n", "# [(1, 2, 0), (0, 3, 3), (3, 1, 5)]" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "[(0, 3, 3), (1, 2, 0), (3, 1, 5)]\n", "[(3, 1, 5), (1, 2, 0), (0, 3, 3)]\n", "[(1, 2, 0), (0, 3, 3), (3, 1, 5)]\n" ] } ], "prompt_number": 6 }, { "cell_type": "code", "collapsed": false, "input": [], "language": "python", "metadata": {}, "outputs": [ { "html": [ "\n", "" ], "output_type": "pyout", "prompt_number": 1, "text": [ "" ] } ], "prompt_number": 1 } ], "metadata": {} } ] }