(1)绘制屏幕首先绘制屏幕,??命令说明如下:screensize(width,height,bg=color):设置屏幕的大小和颜色screensetup(p1,p2):设置屏幕尺寸,当p1和p2为小数时,表示屏幕比例;当p1和p2为整数时,表示pixeltracer(speed):设置绘制速度,speed越大,绘制速度越快defget_screen(width,height,color,speed):#创建屏幕screen_obj=turtle.Screen()#Canvassize:(width,height),color:colorscreen_obj.screensize(width,height,bg=color)screen_obj.setup(1.0,1.0)#速度加倍screen_obj.tracer(speed)returnscreen_obj(2)绘制落花在确定落花数量的情况下,首先要评估落花的范围。这里用两句来约束落花的范围(落花越多,当然落花的范围越大):#有positive和negative,所以画笔可以往两个方向走x=flower-4*flower*random()#花瓣的整体宽度(-10,10)y=10-20*random()然后说下turtle常用的几个命令:首先我们要明确一点,对于海龟画布,它是一个xOy平面,画布的中心是原点O;对于乌龟笔刷,它有一个初始方向,指向x轴的正方向。penup():起笔(可以想象成画画时蘸墨后拿起笔)旋转度数pendown():pendownpencolor(color):笔墨颜色为colorcircle(r):画一个半径为r的圆代码如下:defdraw_petal(turtle_obj,flower):#为i画飘落的花瓣inrange(int(flower/2)):#如果有positive或negative,画笔可以往两个方向走x=flower-2*flower*random()#花瓣的整体宽度(-10,10)y=10-20*Random()#rr,前进到90,走到x,走到turtle_obj.penup()turtle_obj.Forward(y)turtle_obj.left(90)turtle_obj.Forward(x)turtle_obj.pendown()#珊瑚色turtle_obj.pencolor("Lightcoral")#tTurtle_Obj.circle(1)#回到起点#,后退X,向右90,后退y,turtle_obj.penup()turtle_obj.backward(x)turtle_obj.right(90)turtle_obj.backward(y)turtle_obj.pendown()(3)绘制树枝和花瓣读者会发现在drwa_tree方法中,多了两个drwa_tree方法,分别是是一种递归的方法,可以简单理解为一棵树,最下面的树枝最少最粗,树枝越往上越多但越来越细。Axitrader代理申请http://www.kaifx.cn/broker/ax..,如果读者对以下代码不理解,可以查看《Turtle(python)画分形树理解递归》[3]一文。defdraw_tree(turtle_obj,branch,tree_color):#设置最小分支长度min_branch=4ifbranch>min_branch:ifbranch<8:#向左和向右分支的概率为0.50if,rint)(==r:#左边是白色turtle_obj.pencolor("snow")else:#右边是珊瑚turtle_obj.pencolor(""lightcoral")#Turtle_obj.pensize(Branch/2)Elif8<=16:#0.33的概率是分为左、中、右三个分支iFRANDINT(0,2)==0:#左边是白色turtle_obj.pencolor("snow")else:#0000turtle_obj.pencolor("Lightcoral")#"Turtle_Obj.pensize(Branch/4)else:#brownturtle_obj.pencolor(tree_color)#细枝turtle_obj.pensize(Branch/10)#开始时,树干长度为turtle_obj。forward(branch)#随机度因子a=1.5*random()#顺时针旋转一个随机角度(0-30度)turtle_obj.right(20*a)#随机长度因子b=1.5*random()#绘制到theright(),untilitcan'tdrawdraw_tree(turtle_obj,branch-10*b,tree_color)#随机角度向左转turtle_obj.left(40*a)#向左画到画不出来bdraw_tree(turtle_obj,0*branch-,Tree_Color)#某角度右转某角度turtle_Obj.Right(20*A)#,turtle_obj.penup()#回到起点turtle_obj.backward(Branch)turtle_obj.pendown()(4)绘制多棵树。前半段代码用于约束树根的位置。为了使图像中的树更完整,较大的树根应靠近屏幕底部,而不是太靠近两侧。其余代码很容易理解deftrees(tree_num):#colorcolor=['brown','tan','black']forjinrange(tree_num):#树干颜色tree_color=color[randint(0,len(color)-1)]#Pensizepensize=randint(2,5)#Forwardpixelforward=((-1)**pensize)*pensize*randint(20,50)#Backwardpixelifpensize<=3:backward=((-1)**Pensize)*(5-Pensize)*RANDINT(10,15)else:Backward=Pensize*RANDINT(45,50)#创建画笔turtle_obj=turtle.turtle()笔,向前forward,左转90,向后,落笔turtle_obj.penup()15#落花数flowers=branch#第j棵树draw_tree(turtle_obj,branch,tree_color)#petalsdraw_petal(turtle_obj,flowers)2.完整代码(一)完整代码给出完整代码:importturtlefromrandomimportrandomfromrandomimportrandintobtal_jdef,drawflower):#绘制飘落的花瓣foriinrange(int(flower)):#如果有positive或者negative,画笔可以往两个方向走x=flower-4*flower*random()#整体的宽度thepetals(-10,10)y=10-20*random()#拿起笔,向前y,向左转90,走x,向下笔turtle_obj.penup()turtle_obj.forward(y)objwardtuturtle_obj.left(90)(X)Turtle_Obj.pendown()#((Turtle_Obj.pencolor("LightCular")#画圆turtle_obj.circle(1)#回到起点#,向右90退,退到turtle_obj。penup()turtle_obj.backward(x)turtle_obj.right(90)turtle_obj.backward(y)turtle_obj.pendown()#绘制分支defdraw_tree(turtle_obj,branch,tree_color):#设置最小分支长度min_branch=4ifbranch>min_branch:ifbranch<8:#向左和向右分支的概率为0.5==1int(0,ifrand)#_Obj.pencolor("Snow")else:#Turtle_Obj.pencolor("Lightcoral")#branchturtle_obj.pensize(Branch/2)elif8<=16:#以0.333概率分为左、中、右branchesiFRANDINT(0,2)==0:#左边是白色turtle_obj.pencolor("snow")else:#中号,右边是珊瑚turtle_obj.pencolor("lightcoral"")#)Turtle_Obj.pensize(Branch/4)否则:#brownturtle_obj.pencolor(tree_color)#)turtle_obj.pensize(Branch/10)#nch)#随机度因子a=1.5*random()#随机顺时针旋转(0-30度)turtle_obj.right(20*a)#随机长度因子b=1.5*random()until#向右绘制Draw_tree(turtle_obj,branch-10*b,tree_color)#以随机角度向左转turtle_obj.left(40*a)#向左绘制直到无法绘制的位置draw_tree(turtle_obj,branch,tree-10)#向右a一定角度turtle_obj.right(20*a)#)turtle_Obj.penup()#回到起点turtle_obj.backward(Branch)turtle_obj.pendown()defget_screen(width)。:#创建屏幕screen_obj=turtle.Screen()#Canvassize:(width,height),color:colorscreen_obj.screensize(width,height,bg=color)screen_obj.setup(1.0,1.0)#speedobjscreen.tracer(speed)returnscreen_objdeftrees(tree_num):#颜色color=['brown','tan','black']forjinrange(tree_num):#树干颜色tree_color=color[randint(0,len(color)-1)]#画笔大小pensize=randint(2,5)#前向像素forward=((-1)**pensize)*pensize*randint(20,50)#Backwardpixelifpensize<=3:backward=((-1)**pensize)*(5-pensize)*randint(10,15)else:andbackwardandbackward=pensize(4*,50)#笔,turtle_obj=turtle.turtle()#,Turtle_Obj.pensize(Pensize),forwardforforward,left90,backward,turtle_obj.penup()turtle_obj.forward(forward)turta.左(90)turtle_obj.backward(向后)branch,tree_color)#花瓣draw_petal(turtle_obj,flowers)??if__name__=='__main__':????#创建画幕???my_screen_width=800???my_screen_height=600???my_screen_color='wheat'???my_screen_speed=5???my_screen_obj=get_screen(my_screen_width,my_screen_height,??????????????????????????????my_screen_color,my_screen_speed)????#樱花树???#棵数my_tree_num=5trees(my_tree_num)#点击关闭画布my_screen_obj.exitonclick()
