本题主要使用了eval函数,将字符串作为Python的一条语句来执行,达到计算表达式的目的。
题目描述
第一行给出一个正整数N,接下来N行各有一个数学表达式。如果表达式的结果为24点,则输出"Yes",否则输出"No"。
问题分析
本题一般的解法可以使用栈stack进行操作,或者构造表达式树。
这里使用Python的“动态语句”来实现计算表达式的值。
而eval函数达到了这个效果,它以一个字符串作为参数,返回字符串语句执行后的计算结果。
例如,eval("9+3+4*3")将返回24。类似的Python函数还有exec(),读者可以自行了解。
问题解决
掌握了eval()函数的用法,解决本问显得轻而易举。但仍然有一些需要注意的问题:
①表达式中的乘法符号为小写字母"x",需要将其替换为"*"
②在Python中,"/"表示浮点数除法,"//"才表示整数向下取整,题意为后者
③Python的input()函数返回的是一个字符串,需要手动转化为int类型
④利用Python的三目运算符可以简化代码
实现代码及运行结果
n = int(input()) for i in range(n): str = input().replace('x', '*').replace('/', '//') print("Yes" if eval(str) == 24 else "No")