{
"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": {}
}
]
}