2
我正在嘗試編寫一箇中綴到前綴轉換器,例如,我想轉換此:將中綴轉換爲python中的前綴
1 + ((C + A) * (B - F))
喜歡的東西:
add(1, multiply(add(C, A), subtract(B, F)))
,但我得到這個代替:
multiply(add(1, add(C, A), subtract(B, F)))
這是我的代碼到目前爲止
postfix = []
temp = []
newTemp = []
def textOperator(s):
if s is '+':
return 'add('
elif s is '-':
return 'subtract('
elif s is '*':
return 'multiply('
else:
return ""
def typeof(s):
if s is '(':
return leftparentheses
elif s is ')':
return rightparentheses
elif s is '+' or s is '-' or s is '*' or s is '%' or s is '/':
return operator
elif s is ' ':
return empty
else :
return operand
infix = "1 + ((C + A) * (B - F))"
for i in infix :
type = typeof(i)
if type is operand:
newTemp.append(i)
elif type is operator:
postfix.append(textOperator(i))
postfix.append(newTemp.pop())
postfix.append(', ')
elif type is leftparentheses :
newTemp.append(i)
elif type is rightparentheses :
next = newTemp.pop()
while next is not '(':
postfix.append(next)
next = newTemp.pop()
postfix.append(')')
newTemp.append(''.join(postfix))
while len(postfix) > 0 :
postfix.pop()
elif type is empty:
continue
print("newTemp = ", newTemp)
print("postfix = ", postfix)
while len(newTemp) > 0 :
postfix.append(newTemp.pop())
postfix.append(')')
print(''.join(postfix))
有人可以幫我弄清楚我會解決這個問題。
一般評論:不要使用'is',而應使用'=='。 '=='通過值進行比較,而'is'通過身份進行比較。兩個字符串可以具有相同的值,但不是*相同的身份。請參閱:[爲什麼使用'=='或'is'來比較Python中的字符串有時會產生不同的結果?](http://stackoverflow.com/q/1504717/660921)。 – Carpetsmoker