信息学奥赛一本通1358:中缀表达式值Python题解
题面
输入一个中缀表达式(由0-9组成的运算数、加+减-乘*除/四种运算符、左右小括号组成。注意“-”也可作为负数的标志,表达式以“@”作为结束符),判断表达式是否合法,如果不合法,请输出“NO”;否则请把表达式转换成后缀形式,再求出后缀表达式的值并输出。
题解
注意:必须用栈操作,不能直接输出表达式的值。
众所周知,Python中有一个exec(str)
的函数。它可以把str
作为Python语句执行。
那么。。。
a = 'b = ' + input().split('@')[0]
try:
exec(a)
print(b)
except:
print('NO')
还能再短一点吗?
经过一段时间的摸索,我发现exec似乎可以执行多行语句。
exec("try:\n exec('b="+input().split('@')[0]+"')\n print(b)\nexcept:\n print('NO')")
(仅供为了专门减少代码可读性时使用,不要在任何正式/非正式场合使用此类代码,因为这样只会减少代码的可读性,令人迷惑)