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
3

四行四列的小网格

By xrspook @ 22:17:26 归类于: 扮IT

先放效果图

Think Python 2 第三章练习题三我的解决办法。只能用学过的语句(还没讲到循环),for啊,while啊都不许用,于是我只能很蛮很直接了。如果要绘制两行两列的小网格,我只需把do_twice里的a、b函数从现在的重复4次变成重复两次即可。我觉得自己的脚本比官方提供的四行四列的小网格绘制法更易懂肿么破。

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
31
32
33
34
def plus():
    print('+ ', end='')
def minus():
    print('- ' * 4, end='')
def bar():
    print('| ', end='')
def space():
    print('  ' * 4, end='')
def do_twice(a,b):
    a()
    b()
    a()
    b()
    a()
    b()
    a()
    b()
def do_four():
    col()
    col()
    col()
    col()
def col():
    do_twice(bar,space)
    bar()
    print('')    
def row():
    do_twice(plus,minus)
    plus()
    print('') 
def print_grid():
    do_twice(row,do_four)
    row()
print_grid()
2020-04
2

学习思路

By xrspook @ 10:39:47 归类于: 烂日记

昨天因为网速不好,所以晚上我开始看某本叫做Think Python的书。那本书有免费的电子版,但是也已经被O’ Reilly出版了.如果在亚马逊上买,需要接近20美金。为什么明明不用钱就能看电子版的书要给钱呢?其实在看这本书之前,我已经见过非常多O’ Reilly的书了。我感觉他们出的书都是某个体系里面的大头,不是一般的有名,但是好不好学又是另外一回事。我还记得大四的时候,晚上我要在实验室里独自通宵度过生死时速33,那时我带了一本O’ Reilly的犀牛过去看(学校图书馆借的)。那本是JavaScript的书是中文版的,但看得我太郁闷了,因为翻译的简直牛头不对马嘴,感觉根本不是人肉翻译的。又过了好多年我才看到评论叫大家千万不要买那本犀牛!JavaScript这个东西可以这么说,我完全没学好。甚至可以说不知道自己学了些什么。之所以大四的时候要学习JavaScript,是因为我想做某些网页特效。一般的网页用HTML跟CSS就可以了,但是一些炫酷的东西就必须掌握JavaScript,这包括一些动画效果。现在大不一样了,绝大多数浏览器都已经兼容了HTML5,所以一些对从前来说需要一大段话的东西现在两句话就搞定了。以前我总在BlogBus的网页里放不少JavaScript,有可能是网站统计的,也有可能是某些特效的,但当我开始用WordPress以后,我很少用那个东西了,我尽量地让网页上的JavaScript瘦身到极点,但是还是会有些东西是我控制不了的。比如说WordPress自带的,虽然我没有写上去,但是后台会在生成我的网页的时候加不少东西,我一点办法都没有。除非我的后台不用WordPress,我才能做到我想要的那种纯净,但显然现在我没有那么强大。或许某一天我把整个网站静态下来了,我就可以这么干了。

回到Think Python这本书。第一章的一开头,他们就说到了计算机科学家。之前我好像没听说过这种说法。他们是这样给计算机科学家定义的:

计算机科学家像数学家一样,使用规范的语言来阐述思想(尤其是一些计算);像工程师一样设计、组装系统,并且在多重选择中寻找最优解;像自然科学家一样观察复杂系统的行为模式,建立猜想,测试预估的结果。计算机科学家唯一最重要的技能就是『解决问题』。解决问题意味着要有能力把问题进行方程化,创造性地考虑解决思路,并且清晰又精确地表达出解决方案。

所以他们必备清晰的思路。以及非常有条理的逻辑。把大问题拆分为小问题,然后逐个击破。我已经活了34年多,看到计算机科学家这个定义以后,我才发现原来自己就是这种人。还记得从前大学的时候,专业课老师给我们解释过科学与技术到底是什么东西。科学就是研究一些比较抽象的概念。而技术是解决一些实际的问题。我属于那种二者兼有之的类型,一方面我对未知的世界充满好奇心,但另一方面,在解决具体问题的时候我会非常带劲。工作了10年有余以后,我觉得其实科学与技术这两种东西并不是从前老师定义上的那么黑白分明。科学你要深入进去,你就必须用技术探索,而技术之所以存在,就是为了要解决一些人类未知,但又很想知道的东西。

我不知道其他人学习编程是为了什么,但我知道,我学习编程是因为我想实现一些我想做到的事。此刻,我只是想做到一些我想做到的,或许在以后,我会把这变成是别人很希望我能帮他们做到的。

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