棧 字尾表示式

2022-05-29 02:30:11 字數 2268 閱讀 4210

看了老師給的部落格,學習了一下,我學的確實很菜啊,仿照寫了乙個可以實現任意數字個數的加括號運算,目前只支援加乙個括號。。。。

收穫真的挺大

def

to_rpn(f4):

defcompare(x, y):

v =

return 1 if y == '('

else v[x] -v[y]

rpn, operators =,

for i in

f4:

if i not

in ['

+', '

-', '

*', '

/', '

(', ')'

]:

else

:

if i == ')'

:

while operators[-1] != '('

: operators.pop()

elif

not operators or 0 < compare(i, operators[-1]):

else

:

while operators and compare(i, operators[-1]) < 1:

while

operators:

return

rpndef

rpn_to_answer(f4):

answer_func = [lambda x, y: x + y, lambda x, y: x - y, lambda x, y: x * y, lambda x, y: x /y]

answer_func_re = [lambda x, y: y + x, lambda x, y: (y - x) * -1, lambda x, y: y *x]

number =

for i in

f4:

if i not

in ['

+', '

-', '

*', '/'

]:

else

: x, y, z =number.pop(), number.pop(), none

try:

z = answer_func[['

+', '

-', '

*', '/'

].index(i)](y, x)

except

typeerror:

z = answer_func_re[['

+', '

-', '

*', '/'

].index(i)](y, x)

return

number[0]

def random_f4(_op):#

運算元from random import

randint as ran

r =j = _op*2 - 1

for i in

range(j):

if i % 2 == 1:'+

', '

-', '

*', '

/'][ran(0, 3)])

if i % 2 ==0:

x = ran(0,_op-2)

r.insert(x*2,'('

) y = ran(x+2,_op)

r.insert(y*2,')'

)

return

(r)if

__name__ == "

__main__":

from fractions import

fraction as f

ops = input("

數字個數:")

ops =int(ops)

r = random_f4(_op=ops)

print

(r) r =to_rpn(r)

print

(r) r =rpn_to_answer(r)

r = f(r).limit_denominator(1000)

print(r)

截圖:

現在python學的還是很菜啊。。。。。。。。。

字尾表示式 棧

若干行,每行對應乙個中綴表示式 若干行,每行對應乙個由中綴表示式轉換而來的字尾表示式 x a y b z f a b c d m n s t y a b c d e f gxayb zf abc dm n st y abc def g 解題思路 首先如何實現中綴表示式轉換成字尾表示式,方法如下 1....

字尾表示式與棧

stack,操作受限制的線性表,在表的一端進行插入和刪除,先進後出 filo 後進先出 lifo 表尾是棧頂 top 表頭是棧底 bottom top不是指標型別,但習慣稱為棧頂指標,習慣用詞還有push和pop表示入棧和出棧 棧空,top是 1 陣列 或者0,看是怎麼約定的,這裡採用棧空指向0 至...

棧 中綴 字尾表示式

利用棧計算字尾表示式 include include include using namespace std int main s.push num i cout i else if str i str i str i str i s.push res cout result 0 利用棧,把中綴表示...