{ "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 V\n", "=============================\n", "_____________________________\n", "1\\. Implementar uma classe *Animal* com os atributos: nome, esp\u00e9cie, g\u00eanero, peso, altura e idade. O objeto derivado desta classe dever\u00e1 salvar seu estado em arquivo com um m\u00e9todo chamado \u201csalvar\u201d e recarregar o estado em um m\u00e9todo chamado \u201cdesfazer\u201d.\n", "\n", "Solu\u00e7\u00e3o:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "import pickle\n", "\n", "class Animal(object):\n", " \"\"\"\n", " Classe que representa um animal.\n", " \"\"\"\n", "\n", " attrs = ['nome', 'especie', 'genero', 'peso', 'altura', 'idade']\n", "\n", " def __init__(self, **args):\n", "\n", " # Crie os atributos no objeto a partir da lista\n", " # Os atributos tem None como valor default\n", " for attr in self.attrs:\n", " setattr(self, attr, args.get(attr, None))\n", " \n", " def __repr__(self):\n", "\n", " dic_attrs = {}\n", " for attr in self.attrs:\n", " dic_attrs[attr] = getattr(self, attr)\n", " return 'Animal: %s' % str(dic_attrs)\n", "\n", " def salvar(self):\n", "\n", " \"\"\"\n", " Salva os dados do animal.\n", " \"\"\"\n", " dic_attrs = {}\n", " for attr in self.attrs:\n", " dic_attrs[attr] = getattr(self, attr)\n", "\n", " pickle.dump(dic_attrs, file('a.pkl', 'w'))\n", "\n", " def desfazer(self):\n", "\n", " \"\"\"\n", " Restaura os \u00faltimos dados salvos.\n", " \"\"\"\n", " attrs = pickle.load(file('a.pkl'))\n", "\n", " for attr in attrs:\n", " setattr(self, attr, attrs[attr])\n", "\n", "# Teste\n", "gato = Animal(nome='Tinker', especie='Gato', genero='m',\n", " peso=6, altura=0.30, idade=4)\n", "\n", "gato.salvar()\n", "gato.idade = 5\n", "print gato\n", "gato.desfazer()\n", "print gato" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Animal: {'especie': 'Gato', 'genero': 'm', 'nome': 'Tinker', 'peso': 6, 'idade': 5, 'altura': 0.3}\n", "Animal: {'especie': 'Gato', 'genero': 'm', 'nome': 'Tinker', 'peso': 6, 'idade': 4, 'altura': 0.3}\n" ] } ], "prompt_number": 1 }, { "cell_type": "markdown", "metadata": {}, "source": [ "2\\. Implementar uma fun\u00e7\u00e3o que formate uma lista de tuplas como tabela HTML.\n", "\n", "Solu\u00e7\u00e3o:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "# O m\u00f3dulo StringIO implementa uma classe\n", "# de strings que se comportam como arquivos\n", "import StringIO\n", "\n", "def table_format(dataset):\n", " \"\"\"\n", " Classe que representa um animal.\n", " \"\"\"\n", "\n", " out = StringIO.StringIO()\n", " out.write('')\n", "\n", " for row in dataset:\n", " out.write('')\n", " for col in row:\n", " out.write('' % col)\n", " out.write('')\n", "\n", " out.write('
%s
')\n", " out.seek(0)\n", " return out.read()" ], "language": "python", "metadata": {}, "outputs": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "3\\. Implementar uma aplica\u00e7\u00e3o Web com uma sauda\u00e7\u00e3o dependente do hor\u00e1rio (exemplos: \u201cBom dia, s\u00e3o 09:00.\u201d, \u201cBoa tarde, s\u00e3o 13:00.\u201d e \u201cBoa noite, s\u00e3o 23:00.\u201d).\n", "\n", "Solu\u00e7\u00e3o:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "import time\n", "import cherrypy\n", "\n", "class Root(object):\n", " \"\"\"\n", " Raiz do site.\n", " \"\"\"\n", "\n", " @cherrypy.expose\n", " def index(self):\n", " \"\"\"\n", " Exibe a sauda\u00e7\u00e3o conforme o hor\u00e1rio do sistema.\n", " \"\"\"\n", "\n", " # L\u00ea a hora do sistema\n", " hour = '%02d:%02d' % time.localtime()[3:5]\n", "\n", " if '06:00' < hour <= '12:00':\n", " salute = 'Bom dia'\n", " elif '12:00' < hour <= '18:00':\n", " salute = 'Boa tarde'\n", " else:\n", " salute = 'Boa noite'\n", "\n", " # Retorna a mensagem para o browser\n", " return '%s, s\u00e3o %s.' % (salute, hour)\n", "\n", "cherrypy.quickstart(Root())" ], "language": "python", "metadata": {}, "outputs": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "4\\. Implementar uma aplica\u00e7\u00e3o Web com um formul\u00e1rio que receba express\u00f5es Python e retorne a express\u00e3o com seu resultado.\n", "\n", "Solu\u00e7\u00e3o:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "import traceback\n", "import cherrypy\n", "\n", "class Root(object):\n", "\n", " # Modelo para a p\u00e1gina HTML\n", " template = '''\n", " \n", "
\n", " \n", " \n", "
%s
\n", " '''\n", "\n", " @cherrypy.expose\n", " def index(self, exp=''):\n", "\n", " out = ''\n", " if exp:\n", "\n", " # Tente avaliar a express\u00e3o\n", " try:\n", " out = eval(exp)\n", "\n", " # Se der errado, mostre a mensagem do erro\n", " except:\n", " out = traceback.format_exc()\n", "\n", " return self.template % (exp, out)\n", "\n", "cherrypy.quickstart(Root())" ], "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": {} } ] }