记录day3
空调一如既往的吵,好吵
今天在做turtle的模块的联系,做了一个多边形的函数,虽说没任何含金量,但觉得还是重在要分享记录吧。
一个多边形的函数
1 import turtle 2 3 def square(t, length): 4 for i in range(4): 5 t.fd(length) 6 t.lt(90) 7 8 def polygon(turtle, length, numOfSide): 9 degree = 360 / numOfSide # 根据几边形决定每次转动的角度 10 for i in range(numOfSide): 11 turtle.fd(length) 12 turtle.lt(degree) 13 14 bob = turtle.Turtle() 15 polygon(turtle = bob, numOfSide = 9, length = 100) 16 turtle.mainloop()
一个不是很准确的圆
1 import turtle 2 3 def square(t, length): 4 for i in range(4): 5 t.fd(length) 6 t.lt(90) 7 8 def polygon(turtle, length, numOfSide): 9 degree = 360 / numOfSide # 根据几边形决定每次转动的角度 10 for i in range(numOfSide): 11 turtle.fd(length) 12 turtle.lt(degree) 13 14 15 def circle(turtle, radius): 16 ''' 17 由于不能精确算出一个半径对应几边形,但是一个基本的逻辑是半径越大,边数也要越大 18 还有一个问题就是,我也无法精确算出每一步到底改走多远,一般来说半径越大,边数越大,移动举例要越小 19 ''' 20 numOfSide = radius 21 length = 1000 / numOfSide 22 polygon(turtle, length, numOfSide) 23 24 25 26 bob = turtle.Turtle() 27 # polygon(turtle = bob, numOfSide = 9, length = 100) 28 circle(bob, 200) 29 turtle.mainloop()
再补一个也不是很精确的弧形
1 import turtle 2 3 def square(t, length): 4 for i in range(4): 5 t.fd(length) 6 t.lt(90) 7 8 def polygon(turtle, length, numOfSide): 9 degree = 360 / numOfSide # 根据几边形决定每次转动的角度 10 for i in range(numOfSide): 11 turtle.fd(length) 12 turtle.lt(degree) 13 14 15 def circle(turtle, radius): 16 ''' 17 由于不能精确算出一个半径对应几边形,但是一个基本的逻辑是半径越大,边数也要越大 18 还有一个问题就是,我也无法精确算出每一步到底改走多远,一般来说半径越大,边数越大,移动举例要越小 19 ''' 20 numOfSide = radius 21 length = 1000 / numOfSide 22 polygon(turtle, length, numOfSide) 23 24 def arc(turtle, radius, angle): 25 ''' 26 先说一下这个函数不能以circle函数为基础做,只能以polygon的基础来做 27 为什么呢?
事实上polygon也不可以 28 circle函数里面并没有可以调节不封闭的选项 29 ''' 30 numOfSide = radius 31 length = 1000 / numOfSide 32 x = int(angle / 360 * numOfSide) 33 degree = 360 / numOfSide # 根据几边形决定每次转动的角度 34 for i in range(x): 35 turtle.fd(length) 36 turtle.lt(degree) 37 38 39 40 bob = turtle.Turtle() 41 # polygon(turtle = bob, numOfSide = 9, length = 100) 42 # circle(bob, 200) 43 arc(bob, 200, 180) 44 turtle.mainloop()
接下去看了答案,心都痛了,董数学还是好,可以知道圆的周长可以推出每步走多长。
就只贴下对arc的修改就好了,书中说到的接口概念很是科学,不要给接口调用者他搞不清怎么回事的参数,尽量提供干净的接口
1 def arc(turtle, radius, angle): 2 ''' 3 先说一下这个函数不能以circle函数为基础做,只能以polygon的基础来做 4 为什么呢? 5 circle函数里面并没有可以调节不封闭的选项 6 ''' 7 zhouChang = 2 * math.pi * radius 8 numOfSide = radius 9 length = zhouChang / numOfSide 10 x = int(angle / 360 * numOfSide) 11 degree = 360 / numOfSide # 根据几边形决定每次转动的角度 12 for i in range(x): 13 turtle.fd(length) 14 turtle.lt(degree)
对于重构的描述也是很精彩啊,我们观察到,如果做arc函数,必须以修改polygon函数,我们发现自己写的代码和polygon其实很多相似,为什么不把这2部分提炼出来,重新写一个更通用的函数polyline呢?
1 def polyline(turtle, length, numOfSide, lines): 2 degree = 360 / numOfSide # 根据几边形决定每次转动的角度 3 for i in range(lines): 4 turtle.fd(length) 5 turtle.lt(degree)
暂时跳过这节的作业,实在是噩梦般的会议,等周末来补吧。
    Think!
                    
                
                
            
        
浙公网安备 33010602011771号