呕心沥血解析用python画一个表白树(详解每一行代码),初学者也能看懂,授人以鱼不如授人以渔
发布日期:2021-06-29 14:38:13
浏览次数:2
分类:技术文章
本文共 2716 字,大约阅读时间需要 9 分钟。
详细解读表白树每一行代码
代码的话,在CSDN只要搜一下就可以看到一大堆的同样的代码,但是我没有看到有人讲解代码,所以我要讲解一下代码,授人以鱼不如授人以渔,就拿到代码让你跑一下什么都没学到。
认认真真读一下我的注释,你会有收获的,就代码而言,满网到处都是,跑着这些没啥意思,主要是要学会用海龟绘图,计算机二级考试也要考(我考过),好好学一下,白嫖代码并不能有任何收获。
看下效果图():
import turtle#导入海龟图模块(个人喜欢这么叫)import random#导入随机模块def love(x,y):#定义函数画爱心,在(x,y)处画爱心# turtle模块的的Turtle函数,就是把绘图模块传递给lv,后面写代码就不用一直写turtle.Turtle(),直接用lv代替了。 lv=turtle.Turtle() lv.hideturtle()#隐藏画笔的turtle形状 lv.up()#拿起笔 lv.goto(x,y)#把笔定位放到坐标(x,y)处 def curvemove():#定义个函数,画圆弧 for i in range(20): #遍历0到19,理解为20次循环 lv.right(10)#右转移动10度 lv.forward(2)#向当前画笔方向移动2个像素长度 lv.color('red','pink')#这个函数是用画笔为红色,粉色两种(红色写字,粉丝填充爱心) lv.speed(10)#画笔的速度(范围为1到10) lv.pensize(1)#画笔的宽度大小,就是我们理解的笔芯粗细为1 #开始画爱心 lv.down()#移动时绘制图形(就是拿着笔移动,移动的时候把东西要画上去) lv.begin_fill()#英文很明确,就是开始填充图形 lv.left(140)#逆时针移动140度 lv.forward(22)#向前移动22个像素长度 curvemove()#调用定义的函数 lv.left(120)#逆时针旋转120度 curvemove()#再次调用函数 lv.forward(22)#向前移动22个像素长度 lv.write("思思",font=("Arial",12,"normal"),align="center")#这我就定义的女朋友的小名,楷体,字体大小12,正常,居中 lv.left(140)#逆时针旋转140度 lv.end_fill()#画完,结束填充def tree(branchLen,t): #上面我们画了爱心,现在我们要画树,于是定于树这个函数,对应内部为树枝 if branchLen > 5:#剩余树枝太少要结束递归 if branchLen<20:#如果树枝剩余长度较短则变绿 t.color("green")#画笔颜色为绿色 # 画笔大小随机控制在这两个参数范围内,random.uniform(x, y) 方法将随机生成一个实数,它在 [x,y] 范围内 t.pensize(random.uniform((branchLen + 5) / 4 - 2, (branchLen + 6) / 4 + 5)) t.down()#画笔移动时绘制图形 t.forward(branchLen)#画笔向前移动branchlen(树枝长度)个像素长度 love(t.xcor(),t.ycor())#返回(x,y)现在坐标是多少 t.up()#拿起笔 t.backward(branchLen)#画笔后移动branchlen个像素长度 t.color("brown")#后退时,颜色为棕色 return #返回结果 t.pensize(random.uniform((branchLen+5)/4-2,(branchLen+6)/4+5))#跟上面一样,画笔大小控制在一个范围,保证树枝不是一样大的 t.down()#移动时绘制图形(就是拿着笔移动,移动的时候把东西要画上去) t.forward(branchLen)#向前移动branchlen个像素长度 # 以下递归 ang=random.uniform(15,45)#递归传递参数到定义的函数里去,这样branchlen就有具体大小了 t.right(ang)#顺时针偏转ang度,ang大小在15到45范围 tree(branchLen-random.uniform(12,16),t)#随机决定减小长度 t.left(2*ang)#逆时针转动2*ang,ang范围为12到16 tree(branchLen-random.uniform(12,16),t)#随机决定减小长度 t.right(ang)#顺时针转动ang长度 t.up()#拿起笔 t.backward(branchLen)#后退移动branchlen(15)像素长度myWin = turtle.Screen()#定义一个tuetle屏幕t = turtle.Turtle()#把绘图模块传给tt.hideturtle()#把画笔藏起来t.speed(10)#画笔速递为10t.left(90)#画笔逆时针转动90度t.up()#提起笔t.backward(200)#画笔后退移动200个像素单位t.down()#移动时绘制图形(就是拿着笔移动,移动的时候把东西要画上去)t.color("brown")#后退移动时颜色为棕色t.pensize(32)#后退画笔大小为32t.forward(60)#再向前移动60tree(100,t)#传递参数100给branchlenmyWin.exitonclick()#点击结束
你有没有发现,这些很多命令都是英文对应的。比如说pensize翻译不就是笔的大小吗。所以要理解性记忆哦!
我是川川,大二计算机的我,正在努力学习编程,可以跟我一起交流学习,有问题留言,我会一一回答你的问题。
转载地址:https://chuanchuan.blog.csdn.net/article/details/110250045 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
表示我来过!
[***.240.166.169]2024年04月05日 20时16分36秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
力扣的组合总和解法 (Python)
2019-04-29
力扣的两数相加解法 (Python)
2019-04-29
力扣的删除链表的倒数第N个节点解法(Python)
2019-04-29
力扣的串联所有单词的子串解法(Python)
2019-04-29
力扣的接雨水解法(Python3)
2019-04-29
HTML5 五种密码框
2019-04-29
Node.js npm uuid
2019-04-29
JavaScript 滑动验证
2019-04-29
CSS3 二级菜单
2019-04-29
CSS3 帧动画(Sprite,直译叫雪碧图)
2019-04-29
JavaScript 帧动画
2019-04-29
Java NIO —— 用 Path 取代 File
2019-04-29
毕业后的五年拉开大家差距的原因在哪里?
2019-04-29
Java Callable、Future、FutureTask
2019-04-29
Java 父线程与子线程相互通信的方法
2019-04-29
Java 逃逸分析
2019-04-29
Java 装饰模式
2019-04-29
Java 观察者模式
2019-04-29
Java ReentrantLock源码解读
2019-04-29