看了老師給的部落格,學習了一下,我學的確實很菜啊,仿照寫了乙個可以實現任意數字個數的加括號運算,目前只支援加乙個括號。。。。
收穫真的挺大
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)
(r) r =to_rpn(r)
(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 利用棧,把中綴表示...