2016-11-12 43 views
0

所以我的代碼,以使逆波蘭式的工作逆波蘭式 - 監測輸入

def rpn(x): 
    stack = [] 
    operators=['+', '-', '*'] 

    for i in x.split(' '): 
     if i in operators: 
      op1 = stack.pop() 
      op2 = stack.pop() 
      if i=='+': result = op2 + op1 
      if i=='-': result = op2 - op1 
      if i=='*': result = op2 * op1 
      stack.append(result) 
     else: 
      stack.append(float(i)) 

    return stack.pop() 


x = str(input("Enter a polish expression:")) 
result = rpn(x) 
print (result) 

但是我掙扎於如何爲特定輸入 目前該代碼提供了一些錯誤信息將只工作,如果我有即每個值後面輸入一個空格 3 4 +再生病得到7

結果,但我想讓它,這樣它要麼

- 移除的間距自動

或代碼只會無間距工作,如果有間距 提供一個錯誤我想添加一些代碼沿

if x contains " ": 
    print("error") 

我的第二個問題,我正在努力工作線限制使用的操作符 因此,如果它有數字和3個操作符(+, - ,*),如果有其他操作符或字母會顯示錯誤,它將只運行代碼。再次我的想法將是

if x contains something other than "integers and +,-,*: 
    then print an error 

再次,我有概念,但沒有關於如何執行它的python關鍵字知識。

+1

沒有空格你如何確定一個數字何時結束?除非每個數字都是一個數字。 – AChampion

+0

嗯,我應該提到的確,它只會是單個數字 – Xrin

+0

你可以通過遍歷'x.strip()'並放棄空格。 – AChampion

回答

1

您應該使用x.split()而不是x.split(' '),它會提取除x之外的所有空格。

split()將多個連續空格視爲一個空格(所以一個分隔符),而split(' ')將一個空格視爲一個分隔符。

這裏的區別:

>>> print(' '.split(' ')) 
['', '', '', ''] 
>>> print(' '.split()) 
[] 

鑑於你的代碼將只處理單位數:

for i in (_ for _ in x if not _.isspace()): 
    # your algorithm 

如果你想提高一個錯誤:

for i in (_ if not _.isspace() else None for _ in x): 
    if i is None: 
     raise ValueError("Error!") 
    # your algorithm here 
+0

這是有道理的,但現在讓我們說我們輸入作爲輸入(34 +)它會顯示一個錯誤,因爲我試圖將字符串轉換爲浮動。那麼刪除真正解決我的問題的空間?或者這是否意味着我的代碼不能工作,除非它有空格? – Xrin

+0

但是'34 +'沒有任何意義。這與'34 + WHAT ??'相同。 – ForceBru

+0

以RPM計算的井34+與3 + 4相同 – Xrin