第十六次CSP认证:24点问题(Python一行代码?)

对于变得强大,首先你能尽量做的,就是接受弱小的事实。

 

今天是第十六次csp认证,由于课程的原因没去参加。舍友回来后闲聊,聊到了这个问题。

我听了下大概意思好像是,给定字符串表达式,判断是否等于24。是的话输出yes,否则输出no。其中的乘法是用的小写的x,除法是/。

也就是说需要注意的一点是运算的优先级问题。好在数字的个数不多,可以硬判断。

我说:“用的switch吗?”

舍友说:“没有,用了一堆if else,写了几十行。”

我们胡扯着想有没有其他解决方法,后来谈到了“栈”,通过栈可以实现。当两个符号进入栈时就判断符号中是否有乘除,有的话先计算,这样可以解决优先级问题。

还有自定义运算,大佬们可能直接就自己写了个x运算,达到原来的*运算的功能。

然后我突然想到点什么东西,笑了。

舍友问我笑啥。

我说:“我可能想到了个坏坏的办法,python一行代码可以解决。赶紧吃,吃完回去试试~”(吃饭中)

舍友:“我X”。

 

 

print('yes' if eval(input().replace('x','*').replace('/','//')) == 24 else 'no')

结束了好吗。

核心在eval函数。

咳咳,等官网出来了题目,大家尝试下吧。我这篇文章发出来,下次的认证是不是就没python了。(别呀,我还有两次机会,拜托让我把剩下的次数用完,再取消。笑)

先这样吧,有史以来我写的最短的一篇文章。

 

 

后记(2019/4/18):

和原题目有点差距,稍微修改下。

 

当然可以简写:

 

酷美纳塞,老哥们,一行解决不了,要两行。

 

不过皮一下又不是不行:

for i in range(int(input())): print('Yes' if eval(input().replace('x', '*').replace('/', '//')) == 24 else 'No')

 

除了不pythonic之外,你也不能说上面的代码不行吧。

 

虽然可读性差,代码编写不规范,但是,它的代码长度是所有里面最短的。(手动笑脸)

 

so,文章名称不改了,就那样。(任性脸)

发布了53 篇原创文章 · 获赞 80 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/qq_41500251/article/details/88625280