第 1 期:你的头脑是二值逻辑,还是三值逻辑?
最后更新于
最后更新于
@Author : Lewis Tian (taseikyo@gmail.com)
@Link : github.com/taseikyo
@Range : 2020-11-01 - 2020-11-07
总字数:1753 个(汉字:1087,英文单词:178,数字:62,中文标点:124,英文标点:302),阅读时长约:3 分 30 秒。
*Photo by Clay Banks on Unsplash
1356.根据数字二进制下 1 的数目排序
Python 的 eval() 函数很危险
如何在 Markdown 文档显示 diff 效果(英文)
华氏度与摄氏度的简单估算(英文)
你的头脑是二值逻辑,还是三值逻辑?
20/11/6 的每日一题,将数组中的元素按照其二进制表示中数字 1 的数目升序排序。思路很简单,直接将数组按照 1 的个数分组,然后排序即可。
Python 中的 eval() 函数用来执行一个字符串表达式,并返回表达式的值。它的语法如下:
expression -- 表达式。
globals -- 变量作用域,全局命名空间,如果被提供,则必须是一个字典对象。
locals -- 变量作用域,局部命名空间,如果被提供,可以是任何映射对象。
它并不会进行检查,所以即使你传入一个 "os.system('rm -rf /')" 这类命令它也会执行,所以这个函数是很危险的。
文中介绍了使用 eval 的 "攻防",先是给出一段代码无法运行,似乎是保证了 eval 函数的安全,但是紧接着立马给出破解的方法,使得 eval 能跑出结果,挺有趣的。
本来是边看边跑文中给出的代码,然而文中的下面这段代码现在无法运行,文中介绍说需要提供 12 个参数,但是放到 ipython 中运行提示说参数不够,需要 14 个,不太懂这段代码的展开,以后有机会再看吧。
能够直接解析字符串运行的函数似乎都挺危险的,之前了解到 js 中也有这样的问题。算是个双刃剑吧,看使用者如何使用,用在恰当的地方就是好的 feature,被利用来干坏事就是 bug 了。
挺有趣的一个小技巧,之前也有想过怎么显示 diff 效果,后面就忘记去研究了。
其实也简单,本身就是 md 支持的,用 diff
标记语言类型,然后用 +/-
表示修改的代码行即可:
华氏度与摄氏度的转换,有一个简单的估算方法。有三个华氏度,颠倒个位数和十位数,等于对应的摄氏度。
因此,记住这三个数字(40、61、82),就可以简单估算:
摄氏度范围 | 华氏度范围 | 描述 |
< 4°C | < 40°F | Cold |
4°C ~ 16°C | 40°F ~ 61°F | Cool |
16°C ~ 28°C | 61°F ~ 82°F | Warm |
> 28°C | > 82°F | Hot |
这个话题来自阮一峰的 第 131 期 科技爱好者周刊,他文中写道:
我现在的看法是,这可以区分一个人的世界观是否成熟深刻。有些年轻朋友就是二值逻辑的头脑,一看到不赞成、不理解、不喜欢的言论,就认定对方是错误的,完全否定,这其实是思想不成熟的表现。世界太复杂,很难用两分法来判断,三值逻辑会让你的心态好很多,而且有利于个人的进步:正确和错误之间,存在一个广阔的中间地带,任何一种言论都可能有正确的成分,要学会从中间地带去看待事物,吸收对自己有用的部分,摒弃无用的部分。
我比较赞成阮一峰老师的观点,为人处事不是做数学题,在你做完某道数学题后,结果就已经确定了,要么对要么错,但人不是,对于一个陌生人,你能用一个简单标准划分他是好人还是坏人吗?在对与错中间应该还有一个区域,就拿我们学过的牛顿力学一样,在某种条件下它是对的,在另外一种条件下,它又变成错的了。我们得发散地去看待事物,不要非黑即白,应该看到它中间的灰色地带。
两值世界观的人是没长大的小屁孩吧(指特定人群),轻易就能被人煽动,因为他们的思维是非黑即白的,一旦接受白变黑或者黑变白的设定,他们会很有认同感,然后就被牵着鼻子走。令人厌恶的网络喷子大概也是这类人吧。