1. Implementar uma classe Animal com os atributos: nome, espécie, gênero, peso, altura e idade. O objeto derivado desta classe deverá salvar seu estado em arquivo com um método chamado “salvar” e recarregar o estado em um método chamado “desfazer”.
Solução:
import pickle
class Animal(object):
"""
Classe que representa um animal.
"""
attrs = ['nome', 'especie', 'genero', 'peso', 'altura', 'idade']
def __init__(self, **args):
# Crie os atributos no objeto a partir da lista
# Os atributos tem None como valor default
for attr in self.attrs:
setattr(self, attr, args.get(attr, None))
def __repr__(self):
dic_attrs = {}
for attr in self.attrs:
dic_attrs[attr] = getattr(self, attr)
return 'Animal: %s' % str(dic_attrs)
def salvar(self):
"""
Salva os dados do animal.
"""
dic_attrs = {}
for attr in self.attrs:
dic_attrs[attr] = getattr(self, attr)
pickle.dump(dic_attrs, file('a.pkl', 'w'))
def desfazer(self):
"""
Restaura os últimos dados salvos.
"""
attrs = pickle.load(file('a.pkl'))
for attr in attrs:
setattr(self, attr, attrs[attr])
# Teste
gato = Animal(nome='Tinker', especie='Gato', genero='m',
peso=6, altura=0.30, idade=4)
gato.salvar()
gato.idade = 5
print gato
gato.desfazer()
print gato
Animal: {'especie': 'Gato', 'genero': 'm', 'nome': 'Tinker', 'peso': 6, 'idade': 5, 'altura': 0.3} Animal: {'especie': 'Gato', 'genero': 'm', 'nome': 'Tinker', 'peso': 6, 'idade': 4, 'altura': 0.3}
2. Implementar uma função que formate uma lista de tuplas como tabela HTML.
Solução:
# O módulo StringIO implementa uma classe
# de strings que se comportam como arquivos
import StringIO
def table_format(dataset):
"""
Classe que representa um animal.
"""
out = StringIO.StringIO()
out.write('<table>')
for row in dataset:
out.write('<tr>')
for col in row:
out.write('<td>%s</td>' % col)
out.write('</tr>')
out.write('</table>')
out.seek(0)
return out.read()
3. Implementar uma aplicação Web com uma saudação dependente do horário (exemplos: “Bom dia, são 09:00.”, “Boa tarde, são 13:00.” e “Boa noite, são 23:00.”).
Solução:
import time
import cherrypy
class Root(object):
"""
Raiz do site.
"""
@cherrypy.expose
def index(self):
"""
Exibe a saudação conforme o horário do sistema.
"""
# Lê a hora do sistema
hour = '%02d:%02d' % time.localtime()[3:5]
if '06:00' < hour <= '12:00':
salute = 'Bom dia'
elif '12:00' < hour <= '18:00':
salute = 'Boa tarde'
else:
salute = 'Boa noite'
# Retorna a mensagem para o browser
return '%s, são %s.' % (salute, hour)
cherrypy.quickstart(Root())
4. Implementar uma aplicação Web com um formulário que receba expressões Python e retorne a expressão com seu resultado.
Solução:
import traceback
import cherrypy
class Root(object):
# Modelo para a página HTML
template = '''
<html><body>
<form action="/">
<input type="text" name="exp" value="%s" />
<input type="submit" value="enviar">
<pre>%s</pre>
</body></html>'''
@cherrypy.expose
def index(self, exp=''):
out = ''
if exp:
# Tente avaliar a expressão
try:
out = eval(exp)
# Se der errado, mostre a mensagem do erro
except:
out = traceback.format_exc()
return self.template % (exp, out)
cherrypy.quickstart(Root())