【CCF 201903-2】 二十四点(Python 4行代码)

本题主要使用了eval函数,将字符串作为Python的一条语句来执行,达到计算表达式的目的。

题目描述

第一行给出一个正整数N,接下来N行各有一个数学表达式。如果表达式的结果为24点,则输出"Yes",否则输出"No"。

问题分析

本题一般的解法可以使用栈stack进行操作,或者构造表达式树。

这里使用Python的“动态语句”来实现计算表达式的值。

而eval函数达到了这个效果,它以一个字符串作为参数,返回字符串语句执行后的计算结果。

例如,eval("9+3+4*3")将返回24。类似的Python函数还有exec(),读者可以自行了解。

Python eval() 函数 | 菜鸟教程

问题解决

掌握了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")

发布了91 篇原创文章 · 获赞 142 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/leelitian3/article/details/99933130