示例#1
0
def repeat():
    """ Repeat the last action that was done, if it is still stored in "it".
        No argument. Return a string as a response. """
    it = paul.get_it()
    if it.startswith('tell application "System Events" to key code'):
        paul.run_script(it, language="applescript")
        return "Ok."
    elif it.startswith("set volume output volume (output volume of "):
        paul.run_script(it, language="applescript")
        return "Ok."
    else:
        return "What? I don't understand."
示例#2
0
def process(sentence):
    ''' Process the sentence. '''
    
    sentence.replace_it()
    eqns = make_equations(sentence)
    if len(eqns) == 0:
        return "I'm not sure what you want me try try and solve. Sorry!"
    subs = sentence.has_one_of(["sub", "substitute", "solve"])
    rearrange = sentence.has_one_of(["rearrange", "solve"])
    if subs: rearrange = False
    if (paul.get_it() and
        paul.Sentence(paul.get_it()).has_one_of("+/^*-=1234567890")):
        eqns.append(paul.get_it()) if len(eqns) < 2 else 0
    paul.log(eqns)
    eqn_string = eqns[0]
    if subs:
        try:
            eqn_string = eqns[1]
        except IndexError:
            eqn_string = eqns[0]
    if rearrange:
        for e in eqns:
            if len(e) > 1:
                eqn_string = e
                break
    
    paul.log("SUBS:", subs, "REARRANGE:", rearrange)
    paul.log("EQUATION:", eqn_string)
    had_equals = True
    if not paul.has_word(eqn_string, "="):
        eqn_string = "y=" + eqn_string
        had_equals = False
    elif eqn_string.strip()[0] == "=":
        eqn_string = "y" + eqn_string
    paul.log("EQUATION:", eqn_string)
    
    # try:
    eqn = Equation(eqn_string)
    # except:
    #     return "Something went horribly wrong when I tried to math. Oops."
    # 
    if subs and len(eqns) > 1:
        eq2 = Equation(eqns[0])
        if type(eq2.head.right.value) == float:
            eqn.substitute((eq2.head.left.value, eq2.head.right.value))
        elif type(eqn.head.right.value) == float:
            eq2.substitute((eqn.head.left.value, eqn.head.right.value))
            eqn, eq2 = eq2, eqn
        else:
            url = "http://www.wolframalpha.com/input/?i="
            query = "sub {} into {}".format(eq2, eqn)
            query.replace("+", "%2D").replace("=", "%3D").replace("/", "%2F")
            paul.open_URL(url+query)
            return '''I was unsuccessful in finding the solution:\n{}\n{}'''.format(eq2, eqn)
    
    if rearrange:
        targ = "x"
        targets = sentence.keywords()
        for word, _ in targets:
            if len(word) == 1:
                targ = word
        try:
            eqn.rearrange_linear_for(targ)
        except RuntimeError:
            url = "http://www.wolframalpha.com/input/?i="
            query = "rearrange {} for {}".format(eqn, targ)
            query.replace("+", "%2D").replace("=", "%3D").replace("/", "%2F")
            paul.open_URL(url+query)
            return "Oh dear, not a clue. Try this instead."
    
    result = str(eqn)
    if not had_equals:
        result = result[4:]
    
    paul.set_it(result)
    try:
        if result[0] == "(" and result[-1] == ")": result = result[1:-1]
    except IndexError:
        pass
    return result