Recur17. Вывести значение целочисленного выражения, заданного в виде строки $$S$$. Выражение определяется следующим образом:
<выражение>::= <цифра>| (<выражение><знак><выражение>)
<знак>::= + | — | *
Решение:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
def LenExpression(S): if len(S)<=0: return 0 else: if S[len(S)-1] == ')': S=S[:-1] lenS = LenExpression(S) S = S[:-lenS+1] return lenS+LenExpression(S)+1 if S[len(S)-1] == '(': return 1 else: S = S[:-1] return 1+LenExpression(S) def Expression(S): Res=0 if len(S)>0: if S[len(S)-1]==')': S = S[:-1] lenS = LenExpression(S) Res = Expression(S) S = S[:-lenS+1] elif S[len(S)-1] == '0' or S[len(S)-1] == '1' or S[len(S)-1] == '2' or S[len(S)-1] == '3' or S[len(S)-1] == '4' or S[len(S)-1] == '5' or S[len(S)-1] == '6' or S[len(S)-1] == '8' or S[len(S)-1] == '9': Res = (ord(S[len(S)-1])-48) S = S[:-1] if len(S)>0: if S[len(S)-1] == '-': S = S[:-1] return Expression(S)-Res if S[len(S)-1] == '+': S = S[:-1] return Expression(S)+Res if S[len(S)-1] == '*': S = S[:-1] return Expression(S)*Res if S[len(S)-1] == '(': return Res else: return Res else: print('!!error!!') S= input("S:") S = '('+S+')' print('Exp: ',Expression(S)) |
Другие задачи из раздела Recur можно посмотреть здесь.
Комментарии: