1. Implementar um módulo com uma função tribonacci(n)
que retorne uma lista de n
números de Tribonacci, aonde n
é o parâmetro da função. Faça testes da função caso o módulo seja executado como principal.
Solução:
def tribonacci(n):
"""
Retorna uma lista com n elementos de Tribonacci.
>>> t = [1, 1, 2, 4, 7, 13, 24, 44, 81, 149, \
274, 504, 927, 1705, 3136, 5768, 10609, 19513, \
35890, 66012, 121415, 223317]
>>> t == tribonacci(22)
True
>>> tribonacci('22')
Traceback (most recent call last):
File "pyro_server.py", line 26, in <module>
print Dist().tribonacci('22')
File "pyro_server.py", line 14, in tribonacci
raise TypeError
TypeError
"""
if type(n) is not int:
raise TypeError
# Os 3 primeiros elementos da sequência
t = [1, 1, 2]
if n < 4:
return t[:n]
for i in range(3, n):
# Soma os 3 elementos finais
t.append(sum(t[-3:]))
return t
def _doctest():
"""
Evoca o doctest.
"""
import doctest
doctest.testmod()
if __name__ == "__main__":
_doctest()
2. Implementar:
Solução:
Servidor:
import Pyro.core
# Importa o módulo com a função
import trib
class Dist(Pyro.core.ObjBase):
@staticmethod
def tribonacci(n):
return trib.tribonacci(n)
if __name__ == '__main__':
# Define a porta TCP/IP usada pelo Pyro
Pyro.config.PYRO_PORT = 8888
# Define o limite de cliente ao mesmo tempo
Pyro.config.PYRO_MAXCONNECTIONS = 2000
Pyro.core.initServer()
# norange=1 faz com que o Pyro sempre use a mesma porta
daemon = Pyro.core.Daemon(norange = 1)
# Define o limite de tempo
daemon.setTimeout(300)
uri = daemon.connect(Dist(),'dist')
daemon.requestLoop()
Cliente:
import Pyro.core
# URL com a porta
url = 'PYROLOC://127.0.0.1:8888/dist'
proxy = Pyro.core.getProxyForURI(url)
# Teste com até dez elementos
for i in range(10):
print i + 1, '=>', proxy.tribonacci(i + 1)