呕心沥血解析用python画一个表白树(详解每一行代码),初学者也能看懂,授人以鱼不如授人以渔

python 专栏收录该内容
71 篇文章 0 订阅

详细解读表白树每一行代码

代码的话,在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()#把绘图模块传给t
t.hideturtle()#把画笔藏起来
t.speed(10)#画笔速递为10
t.left(90)#画笔逆时针转动90度
t.up()#提起笔
t.backward(200)#画笔后退移动200个像素单位
t.down()#移动时绘制图形(就是拿着笔移动,移动的时候把东西要画上去)
t.color("brown")#后退移动时颜色为棕色
t.pensize(32)#后退画笔大小为32
t.forward(60)#再向前移动60
tree(100,t)#传递参数100给branchlen
myWin.exitonclick()#点击结束


你有没有发现,这些很多命令都是英文对应的。比如说pensize翻译不就是笔的大小吗。所以要理解性记忆哦!

我是川川,大二计算机的我,正在努力学习编程,可以跟我一起交流学习,有问题留言,我会一一回答你的问题。

  • 0
    点赞
  • 1
    评论
  • 7
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: 护眼 设计师:闪电赇 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值