Skip to content

Instantly share code, notes, and snippets.

@Bemesko
Created September 30, 2020 18:11
Show Gist options
  • Save Bemesko/9f170e69ecd14eb0adc57707529d3b1d to your computer and use it in GitHub Desktop.
Save Bemesko/9f170e69ecd14eb0adc57707529d3b1d to your computer and use it in GitHub Desktop.
Pequeno experimento com osBrain para criar uma calculadora; Espera entradas no formato "1 + 1"
from osbrain import run_agent
from osbrain import run_nameserver
def somar(agent, message):
# Separar números e operador em uma lista
operadores = message.split()
# Checar se a operação desejada é uma soma
if operadores[1] == "+":
resultado = int(operadores[0]) + int(operadores[2])
# Enviar mensagem
agent.log_info(
"{} + {} = {}".format(operadores[0], operadores[2], resultado))
def subtrair(agent, message):
# Separar números e operador em uma lista
operadores = message.split()
# Checar se a operação desejada é uma soma
if operadores[1] == "-":
resultado = int(operadores[0]) - int(operadores[2])
# Enviar mensagem
agent.log_info(
"{} - {} = {}".format(operadores[0], operadores[2], resultado))
def multiplicar(agent, message):
# Separar números e operador em uma lista
operadores = message.split()
# Checar se a operação desejada é uma soma
if operadores[1] == "*":
resultado = int(operadores[0]) * int(operadores[2])
# Enviar mensagem
agent.log_info(
"{} * {} = {}".format(operadores[0], operadores[2], resultado))
def dividir(agent, message):
# Separar números e operador em uma lista
operadores = message.split()
# Checar se a operação desejada é uma soma
if operadores[1] == "/":
resultado = int(operadores[0]) / int(operadores[2])
# Enviar mensagem
agent.log_info(
"{} / {} = {}".format(operadores[0], operadores[2], resultado))
if __name__ == '__main__':
# Inicialização do nameserver e agentes
ns = run_nameserver()
publisher = run_agent("Publisher")
mais = run_agent("Mais")
menos = run_agent("Menos")
vezes = run_agent("Vezes")
divisao = run_agent("Divisao")
# Criando um endereço de comunicação publish-subscribe
address = publisher.bind("PUB")
# Conectando os agentes ao endereço de comunicação e atribuindo os comportamentos
mais.connect(address, handler=somar)
menos.connect(address, handler=subtrair)
vezes.connect(address, handler=multiplicar)
divisao.connect(address, handler=dividir)
# Input dos parâmetros
mensagem = input("Digite a operação:")
# Envio da mensagem
publisher.send(address, mensagem)
ns.shutdown()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment