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 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() 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() 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)