对于变得强大,首先你能尽量做的,就是接受弱小的事实。
今天是第十六次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,文章名称不改了,就那样。(任性脸)