Ejemplo n.º 1
0
def parse(s: str):
    if s.rfind('+') > 0:  #足し算
        pos = s.rfind('+')
        s1 = s[:pos]
        s2 = s[pos + 1:]
        return Add(parse(s1), parse(s2))

    elif s.rfind('-') > 0:  #引き算
        pos = s.rfind('-')
        s1 = s[:pos]
        s2 = s[pos + 1:]
        return Sub(parse(s1), parse(s2))

    elif s.rfind('*') > 0:  #かけ算
        pos = s.rfind('*')
        s1 = s[:pos]
        s2 = s[pos + 1:]
        return Mul(parse(s1), parse(s2))

    elif s.rfind('/') > 0:  #割り算
        pos = s.rfind('/')
        s1 = s[:pos]
        s2 = s[pos + 1:]
        return Div(parse(s1), parse(s2))

    else:
        num = int(s)
        return Val(num)
Ejemplo n.º 2
0
def parse(s: str):
    pos = s.rfind("+") # +文字の位置を見つける
    if pos > 0:
        s1 = s[0:pos]
        s2 = s[pos+1:]
        return Add(parse(s1), parse(s2))

    pos = s.rfind("-") # -文字の位置を見つける
    if pos > 0:
        s1 = s[0:pos]
        s2 = s[pos+1:]
        return Sub(parse(s1), parse(s2))

    pos = s.rfind("*") # *文字の位置を見つける
    if pos > 0:
        s1 = s[0:pos]
        s2 = s[pos+1:]
        return Mul(parse(s1), parse(s2))

    pos = s.rfind("/") # /文字の位置を見つける
    if pos > 0:
        s1 = s[0:pos]
        s2 = s[pos+1:]
        return Div(parse(s1), parse(s2))
    
    num = int(s)
    return Val(num)
Ejemplo n.º 3
0
def parse(s: str):
    if s.find('+') > 0:
        pos = s.find('+')
        s1 = s[0:pos]
        s2 = s[pos+1:]
        return Add(parse(s1),parse(s2))

    if s.rfind('-') > 0:
        pos = s.find('-')
        s1 = s[0:pos]
        s2 = s[pos+1:]
        return Sub(parse(s1),parse(s2))

    if s.find('*') > 0:
        pos = s.find('*')
        s1 = s[0:pos]
        s2 = s[pos+1:]
        return Mul(parse(s1),parse(s2))


    if s.find('/') > 0:
        pos = s.find('/')
        s1 = s[0:pos]
        s2 = s[pos+1:]
        return Div(parse(s1),parse(s2))
    return Val(int(s))
Ejemplo n.º 4
0
def parse(s: str):
    if s.find('+') > 0:
        pos = s.find('+')
        s1 = s[0:pos]
        s2 = s[pos + 1:]
        num = Add(parse(s1), parse(s2))
        return num
    if s.find('-') > 0:
        pos = s.find('-')
        s1 = s[0:pos]
        s2 = s[pos + 1:]
        num = Sub(parse(s1), parse(s2))
        return num
    if s.find('*') > 0:
        pos = s.find('*')
        s1 = s[0:pos]
        s2 = s[pos + 1:]
        num = Mul(parse(s1), parse(s2))
        return num
    if s.find('/') > 0:
        pos = s.find('/')
        s1 = s[0:pos]
        s2 = s[pos + 1:]
        num = Div(parse(s1), parse(s2))
        return num
    return Val(int(s))
Ejemplo n.º 5
0
def parse(s: str):
    if s.find('+') > 0:
        pos = s.find('+')
        s1 = s[0:pos]
        s2 = s[pois + 1:]
        return Mul(parse(s1), parse(s2))
    if s.find('*') > 0:
        pos = s.find('*')
        s1 = s[0:pos]
        s2 = s[pos + 1:]
        return Mul(parse(s1), parse(s2))
    return Val(int(s))
Ejemplo n.º 6
0
def parse(s: str):
    if s.find('+') > 0:
        pos = s.find('+')
        s1 = s[0:pos]
        s2 = s[pos + 1:]
        return Div(parse(s1), parse(s2))
    if s.find('/') > 0:
        pos = s.rfind('/')  #-,/を計算するときは、rfindで逆から求める
        s1 = s[0:pos]
        s2 = s[pos + 1:]
        return Div(parse(s1), parse(s2))
    return Val(int(s))
Ejemplo n.º 7
0
def parse(s: str):

    if s.find("+") > 0:
        pos = s.find("+")
        s1 = s[0:pos]
        s2 = s[pos + 1:]
        return Add(parse(s1), parse(s2))
    if s.rfind("-") > 0:
        pos = s.rfind("-")
        s1 = s[0:pos]
        s2 = s[pos + 1:]
        return Sub(parse(s1), parse(s2))
    if s.find("*") > 0:
        pos = s.find("*")
        s1 = s[0:pos]
        s2 = s[pos + 1:]
        return Mul(parse(s1), parse(s2))
    if s.rfind("/") > 0:
        pos = s.rfind("/")
        s1 = s[0:pos]
        s2 = s[pos + 1:]
        return Div(parse(s1), parse(s2))
    return Val(int(s))
Ejemplo n.º 8
0
def parse(s: str):
    num = int(s)
    return Val(num)
Ejemplo n.º 9
0
from exp import Val, Add, Sub, Mul, Div

def parse(s: str):
    if s find('+') > 0:
        pos = s.find('+')
        s1 = s[0:pos]
        s2 = s[pos+1:]
        return Add(parse(s1), parse(s2))
    if s.find('*')  > 0:
        pos = s.find('*')
        s1 = s[0:pos]
        s2 = s[pos+1:]
        return Mul(parse(s1), parse(s2))
    return Val(int(s))

e = parse("1-2-3")
print(e, e.eval())
assert e.eval() == -4