{
"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 III\n",
"=============================\n",
"_____________________________\n",
"1\\. Implementar um gerador de n\u00fameros primos.\n",
"\n",
"Solu\u00e7\u00e3o:"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# Verifica se o n\u00famero \u00e9 primo\n",
"def is_prime(n):\n",
"\n",
" if n < 2:\n",
" return False\n",
"\n",
" for i in xrange(2, n):\n",
" if not n % i:\n",
" return False\n",
"\n",
" else:\n",
" return True\n",
"\n",
"# Gerador de n\u00fameros primos\n",
"def prime_gen():\n",
" i = 1\n",
"\n",
" while True:\n",
" if is_prime(i): yield i\n",
" i += 1\n",
"\n",
"# Teste: 10 primeiros primos\n",
"prime_iter = prime_gen()\n",
"\n",
"for i in range(10):\n",
" print prime_iter.next()"
],
"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"
]
}
],
"prompt_number": 2
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"2\\. Implementar o gerador de n\u00fameros primos como uma express\u00e3o (dica: use o m\u00f3dulo itertools).\n",
"\n",
"Solu\u00e7\u00e3o:"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"from itertools import count\n",
"\n",
"# Verifica se o n\u00famero \u00e9 primo\n",
"def is_prime(n):\n",
"\n",
" if n < 2:\n",
" return False\n",
"\n",
" for i in xrange(2, n):\n",
" if not n % i:\n",
" return False\n",
" else:\n",
" return True\n",
"\n",
"# Generator Expression\n",
"primes = (i for i in count() if is_prime(i))\n",
"\n",
"# Teste: 10 primeiros primos\n",
"for i in range(10):\n",
" print primes.next()"
],
"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"
]
}
],
"prompt_number": 4
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"3\\. Implementar um gerador que produza tuplas com as cores do padr\u00e3o RGB (R, G e B variam de 0 a 255) usando `xrange()` e uma fun\u00e7\u00e3o que produza uma lista com as tuplas RGB usando `range()`. Compare a performance.\n",
"\n",
"Solu\u00e7\u00e3o:"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"def rgb_lst():\n",
"\n",
" rgb = []\n",
" for r in range(256):\n",
" for g in range(256):\n",
" for b in range(256):\n",
" rgb.append((r, g, b))\n",
"\n",
" return rgb\n",
"\n",
"def rgb_gen():\n",
"\n",
" for r in xrange(256):\n",
" for g in xrange(256):\n",
" for b in xrange(256):\n",
"\n",
" yield (r, g, b)\n",
"\n",
"import time\n",
"\n",
"tt = time.time()\n",
"l = rgb_lst()\n",
"print time.time() - tt\n",
"\n",
"tt = time.time()\n",
"for color in rgb_gen(): pass\n",
"print time.time() - tt"
],
"language": "python",
"metadata": {},
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"4\\. Implementar um gerador que leia um arquivo e retorne uma lista de tuplas com os dados (o separador de campo do arquivo \u00e9 v\u00edrgula), eliminando as linhas vazias. Caso ocorra algum problema, imprima uma mensagem de aviso e encerre o programa.\n",
"\n",
"Solu\u00e7\u00e3o:"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"def load_csv(fn):\n",
"\n",
" try:\n",
" for line in file(fn):\n",
" new_line = line.strip()\n",
"\n",
" if new_line:\n",
" yield tuple(new_line.split(','))\n",
"\n",
" except:\n",
" print 'Ocorreu um erro ao ler o arquivo', fn\n",
" raise SystemExit\n",
"\n",
"# Teste\n",
"for line in load_csv('teste.csv'):\n",
" print line"
],
"language": "python",
"metadata": {},
"outputs": []
},
{
"cell_type": "code",
"collapsed": false,
"input": [],
"language": "python",
"metadata": {},
"outputs": [
{
"html": [
"\n",
""
],
"output_type": "pyout",
"prompt_number": 1,
"text": [
""
]
}
],
"prompt_number": 1
}
],
"metadata": {}
}
]
}