2020-04
17

我想知道

By xrspook @ 10:19:42 归类于: 烂日记

验证出某些数学定理是一件非常酷的事,但我为什么要那么干呢?所以当Think Python的习题要我做那种事的时候,我会莫名其妙地产生一些弱弱的抗拒心理。有时,留存在我脑海的数学知识根本不足以让我理解那些符号到底要我做什么。我不知道为什么写这本书的人觉得读者都明白那些数学符号是要干些什么的,他们面向的到底是什么知识层面的读者呢?那些符号在中国的教育系统里,大概高中中等水平以上的学生会懂。作为一个大学生,理论上我应该全懂那些东西到底是什么意思。倒不是要你真的算出来,但你起码得知道他们要你做些什么。时间是把杀猪刀,中国的应试教育使得大家在离开学校多年以后,如果期间又长期不用,通常都不会记得那些东西,大概只会隐约记得曾经学过。还记得小学的时候,我的某个同学很抗拒学数学,他觉得生活中最简单的加减乘除就能解决几乎所有问题,当然这个所有问题只是他眼中、他当时所遇到的那些。

为什么要学数学?我不知道。有些时候我觉得数学真的很有趣。大概是因为我觉得其中的某些规律会让我惊叹不已。那些规律不是人类创造出来的,是大自然母亲孕育出来的,我们只是逐步知道了那些东西的存在,逐步开始利用那些规律做某些事。之所以某些时候我会有点害怕数学,是因为我是个吊儿郎当的人,即便我懂得某些规律,但是在不断重复的过程中,做着做着我就出错了。小学时计算之所以出错,倒不是因为我乘法表背得不好,而是因为我的字写得太丑,为了图快,字写着写着连我自己都不认得到底是什么。计算机不会因为正常重复而犯错误,如果真的崩了,必定是制定的规则有问题。还记得小学时候影响我最深的那个数学老师,非常看重数学的思维,而不是数学重复计算本身。我的运气非常好,小学、初中、高中,我都分别遇到了一个影响我一生的数学老师。在我印象之中,其他老师从来没有这么深刻地影响过我,虽然他们其中的某些对我来说很重要,我也非常喜欢。也有一些老师是我很不喜欢的,但不喜欢归不喜欢,我不会因为那个就故意搞砸自己那一门课的成绩,反而,我要拿出更优秀的成绩向他们示威。当然,有些时候,我不够强大,所以想示威也无能为力。我的学习不是为了跟老师较劲。

学生时代,为什么要学习?为什么要把题目解答正确?其实当时我完全没有考虑过这些问题,我也没有时间考虑除了用一种方法,还能不能用其它方法得出同样的答案。这里的发散应该包括除了那个参考答案以外,某道题是否还会存在其它情况,还会出现其它答案吗?很多时候,我们的时间就只够解答那道题,根本没有闲情考虑那道题如果改变了某些参数,会不会出现一些比较颠覆的结果。做作业时的我们,又或者考试时的我们,干掉这道题以后就直奔下一道。如果每次都胡思乱想,作业无论如何都做不完,考试就更别想可以在规定时间之内完成答题。

后来我才发现,如果人要真的有所得,要认真地学习研究,除了理解某个知识以外,还必须有一定的自主思考的空间与时间。我们不应该一直被别人牵着鼻子去发散,而应该学会主动地脑洞大开。很多时候,别人会用某个分数衡量我们,或许是通过考试,或许是通过讨论,但那个真的就代表我们吗?能定义我们的只有我们自己。

我们之所以要探寻,我们之所以要纠结,是因为我们想知道、想做得更好。

2020-04
10

强大到让我瑟瑟发抖的递归

By xrspook @ 8:41:56 归类于: 烂日记

大学学习C语言的时候,基本上我不会写单独的函数,所有要解决的事都在主函数里搞定了。当时我学过判断和循环,但是,我却从来没学过递归。在解决一些简单事情的时候,循环跟递归,没什么差别。从理解程度来说,我觉得循环更简洁一些,但是,当某个东西像套娃那样一层叠一层,每层里面依然用同样的规则继续套叠,不知道要叠多少层的时候。递归就会展现它无穷的魔力。循环难以实现这个,又或者循环并非实现不了,但是递归在完全不需要体现循环的框架下,简洁的语言就已经在做着循环的事情。

昨天,我第一次在Python里见到这个恐怖的递归。外国人的书,我觉得都有一个特点。正文的时候举的例子都很简单,但是一到习题,就会把你彻底搞死。习题里面会偷偷带入一些超纲的东西。大概写书的人理所当然默认你应该知晓。这种事情我已经在学习Java的时候领略过。当时那本书之所以没法看下去,就是因为我没办法想象出作者的脑洞到底是什么。他们的习题几乎可以说大多是一些填空题,但要实现一个功能,其实未必一定就得用某种方法。你给我一个条件,给我一些目标值,我能做出来也就OK了,为啥必须走你的路呢,这非常难。之前我不觉得自己跟外国人的脑洞到底差多远,但是当我对比过自己和他们写的程序以后,我发现真的差挺远的。虽然我们都能实现某个功能,就效率而言,感觉上没差多少,因为我只是在做一些非常初级的东西。应试教育的时候,有标准答案,当然好判定成绩,但实际上,编程这种东西真心应该天马行空。给我一个效率的限制,比如说完成某件事,必须在多长时间之内解决,代码长度不能多于多少,至于我用什么办法,这是我的事。

说回递归函数这件事,在处理几个简单数字的时候,可能你感觉不到它的强大,但是,当我见识过用那个东西画出来的层级图形以后,我简直就只有站在旁边瑟瑟发抖的份儿。真的不知道是哪个神经质想出来这么强大的东西。但实际上,深究下去,那也不是很强大,那不过是不断地重复一些已经设计好的事情而已。如果要人去做那些重复,一开始还好,但是随着事情的深入,会慢慢乱套,但是计算机不会,他们会一根筋地执行我们的指令。最终出来的结果是令人惊叹的优雅,还是乱七八糟一坨屎:就得看设定规律的人的功力了。

递归现在对我来说是一个非常恐怖的东西。因为我不了解它,所以我害怕它,就像当年认识循环一样。但是,用好递归以后,我的武器库里就会增加一个杀伤性非常大的家伙。说到递归,让我联想起新冠病毒。这个东西的递归到底什么时候才是个头?我觉得这肯定不是一个死循环,自然界非常擅长递归,处处都是数学和逻辑你知道吗?!但是,到底要递归多少次,全人类才最终能看到隧道尽头的曙光呢?到底这个新冠病毒函数的递归里埋伏了多少个随机数呢?学习递归让我明白到,层级少好对付,层级一旦扩增,那就是次数级的增长,而且,说不准到达一定层级的以后就会触发某些大招炸弹,想想都心寒。

编程是一个让我重新理解自然规律的过程。

2020-04
8

为什么会被小海龟折磨

By xrspook @ 8:44:09 归类于: 烂日记

先画一个正方形,然后画一个正多边形,接着画一个圆形,最后画一个圆弧。从思路上说,再简单不过了,但实际上实施起来的时候,我还是花费了一点心思,但这些东西跟之后的用圆弧画出三个花朵比起来,我算是轻而易举就完成了的任务。后来的花朵之所以耗费了好几个小时才终于搞定,倒不是因为问题本身有多难,而是因为其实我没想通那些数学上的问题。我要画一朵花,花是由花瓣组成的。我画的那朵花是规则结构。那么画完一个花瓣到下一个花瓣的时候,角度我应该如何确定呢?这个问题很简单,但实际上我却在这里兜了无数个圈。我在那里瞎猜,所以很浪费时间。有无数次,我想直接去看答案了,但是我还是控制住了自己。当我终于画出一朵花,并在里面测试无论花瓣是胖是瘦,是多是少,我都能画出来以后,接下来我考虑的是如何一次性在一个面板上画出三朵花。画出一朵跟一次性画出三朵,其实已经非常接近了,但要怎么实现,还是费了一点心,因为某些函数的应用书上根本没说。我去网上稍微搜了一下,发现直接搬过来,而且是在没有看到例子的时候就搬过来行不通。最终我用了COPY大法,一次性画出了三朵花,虽然花的大小跟要求的有点差别。当我看过答案以后,我觉得这种差别是完全可以理解的。胖瘦跟大小是由他们设定的参数决定的,那些参数我们不可能知道。我只能模拟出个大概比例,要我完全模拟出一模一样是不可能的。

小海龟这个东西是一个画图的玩意,但是那又不像艺术家手里的画笔那样随心所欲。那是编程出来的,编程出来的东西还是有大神可以画出个小猪佩奇,但这些做法正如某些大神能用Excel的单元格画出他们想画的任意东西一样。

玩过成年人常规的编程以后再去搞这个小海龟,我觉得最难的地方在于数据的运用。你该怎么处理那些数据?难就难在那些公式设计上面。我不知道为什么Think Python 2这一章要这么整人,但也正是因为他们把我整得很惨,所以我在函数调用上面的确有了一些思路,而那种感觉是从前老师又或者我自学的课程里从来没接触过的。这些才是最核心的东西!为了让我懂得这个,他们祭出了从来都让我很崩溃的小海龟。

现在回想起来,为什么小学的时候小海龟会那么容易让我崩溃,估计情况跟现在差不多。在解决问题的时候我没有把那个箭头当作是一条数学题,一定程度上我把它当作是一个游戏了,所以当我不可以一口说出答案的时候,我首先开始做的是瞎掰,折腾好长时间以后我才终于静下心来,用脑子去考虑,这到底是怎么回事。所以可能某些东西的实现并不难,但是因为我耗在瞎掰上面的时间太多了,简直把我搞得慌张了,所以我会对那个东西瑟瑟发抖。把大问题解剖下来变成小问题,再逐个击破,我应该能很快的发现我的问题所在。

战胜人生中曾经不敢去面对的,非常有意思。

2020-04
7

阴魂不散的小海龟

By xrspook @ 21:56:27 归类于: 扮IT

LOGO语言小海龟,你为啥阴魂不散啊啊啊啊啊啊啊啊啊啊!!!!!对从前小学3年级的我来说是个噩梦,现在依然是个噩梦!Think Python 2的第四章正是用这个turtle讲故事,想死的心都有了。没有一定英语基础,没有足够强悍的数学基础,怎么可能玩得转小海龟,而且还要空间思维能力。小时候我对这个东西瑟瑟发抖实在太正常了…… 25年后再遇到,我继续纠结得死去活来……

第四章最后的习题1要求画一个堆栈图,不知道他们到底要画些什么,要画到什么程度,mindmanager了一个,画完以后的确对函数的嵌套有点开窍。

习题2要画3朵花,画得我死去活来…… 但总算完全不看答案能画出来,看完答案,得到那些偷偷摸摸设定的参数后能画得跟要求一模一样。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import turtle, math
def arc(t, r, angle):
    n = 20 # int(2*math.pi*r/4)+3 公式画图太细致太慢,直接赋值加速
    step_length = int(2*math.pi*r)*angle/360/n
    step_angle = angle/n
    t.lt(step_angle/2) # 据说折腾一下角度能消除像素误差?
    polygon(t, step_length, n, step_angle)
    t.rt(step_angle/2)
def polygon(t, length, n, angle):
    for i in range(n):
        t.fd(length)
        t.lt(angle)
def flower(t, p, r, a): # t for turtle, p for petal, r for radius, a for angle
    for i in range(p):
        for i in range(2): # 重复两次画花瓣,两次转向后和初始方向一致,非常重要!!!!!
            arc(t, r, a)
            t.lt(180-a)
        t.lt(360/p)
def move(t, length): # 一个画板画3朵花必须用暗中位移
    t.pu()
    t.fd(length)
    t.pd()
bob = turtle.Turtle()
move(bob, -100)
flower(bob, 7, 60, 60) # 偷偷设定半径和角度,万恶的例子,叫人怎么猜!于是我也直接搬!
move(bob, 100)
flower(bob, 10, 40, 80)
move(bob, 100)
flower(bob, 20, 140, 20)
turtle.mainloop()
2020-04
6

因为抠门,所以纠结

By xrspook @ 17:45:04 归类于: 烂日记

昨天我花了一个下午的时间去研究怎么停用小米平板1上面的系统应用。昨天晚上,我用了半个晚上的时间研究并完成了小米平板1的刷机,然后我又用了一个多小时的时间写下了自己的心得。今天早上开机,果然如我所料,一整晚的待机,电量只消耗了1%。今天我又花了一整个下午的时间去研究买个新的平板保护壳。之所以有这样的想法,是因为前两天当我把小米平板1从保护壳拆下来的时候,我才发现那个机子真的被我保护得很好,简直可以说是完美无缺。前两天,我把小米平板1的保护壳拆下来了,也把膜给撕了。

还记得把那张标透膜费了我九牛二虎之力,因为跟手机比起来,平板要贴膜的区域很大。当时我是在实验室弄的,虽然关着窗,但是灰尘还是很大。我用透明胶折腾了半天,最后才好不容易地把膜给贴上去了,但是还是有个地方有个小气泡,虽然不是太明显。除了贴膜区域大以外,我还觉得跟小米1s青春的标透膜比起来,小米平板的薄一些。排气的操作非常郁闷。之所以这么折腾,大概因为当时我手上根本没有酒精或异丙醇之类的东西,所以灰尘上去以后我一点办法都没有,除了不断地用透明胶粘掉,我没有其它招。从前想都没想过手机平板之类的可以不贴膜,实际上平板这类东西,有个保护套,根本不用膜。

之所以想到要买个新的保护套,是因为旧的那个背后的塑料已经有点粘手了,这是老化造成的。我不会拿小米平板去晒太阳,为什么也会老化?用了接近6年的东西,怎么可能不老化?!不是所有塑料都会发生这种事。从前我的手机外壳也发生过老化。那台MOTO手机背壳是金属的,但外面涂了一层黑色的胶,那层胶老化了,结果就是上面非常粘手,还洗不掉的那种。最终,我误打误撞用去茶垢的东西轻松地把那些恶心的去掉了。几乎可以这么说,当那些顽固粘手的东西遇到我去茶垢的晶体稀释的水以后,基本上就被分解掉了。聚集起来的那些不能立即分解掉,但搓一搓也就没了。

很懒惰了我想直接买一个新的外壳,但旧的那个是正版的小米,89块钱。现在的小米平板外壳基本都是第4代的。第1代的外壳只有少量。很便宜的几乎没有,被我看上眼的都30块钱以上。于是我又在那里纠结了半天,到底要买哪个。纠结来,纠结去,最终我还是选择把旧的那个外壳用各种方法清理一下。首先我用手边就有的75%酒精擦了一遍,无效。接着,我用了去水垢的柠檬酸稍微搞了一下,好像也没什么效果。然后,我上了洁厕液,效果不明显。之后,我用了小苏打,同样没效果。兜了一圈以后,最后我还是用回去水垢的柠檬酸晶体,那个东西里面除了食用柠檬酸以外还有一些高级脂肪酸,我觉得那个东西估计能起到乳化的作用。之前我只是随便沾水擦一下,但最后那下,我加大了柠檬酸的用量,而且把保护壳泡到水里,泡了好些时间。能不能达到我想要的效果暂时还不知道,因为那个东西要完全晾干了才能判断。我觉得应该有点效,因为那个黑色的保护壳塑料部分已经被我洗得有点掉色了。

最后,折腾了一圈下来,可能那些新的小米平板保护壳我一个都不用买了。

© 2004 - 2024 我的天 | Theme by xrspook | Power by WordPress