【python 的各种模块】(10) 在python3使用turtle 模块画图

目录

 1 在anaconda里用python3安装turtle

1.1 因为turtle 本来是适应python2的,所以直接安装报错

1.2 准备好手动下载,官网下载安装包

1.2.1 去官方手册看了下,其实是支持python3的

1.2.2 官网下载,手动安装

1.3 解决办法,参考如下的几个文章可解决

1.3.1 核心注意点

1.3.2 手动安装

2 turtle 运行时会遇到的各种问题

2.1 问题1:第1次可以运行,第2次运行报错的问题 (未解决)

2.2 问题2:第1次可以运行,第2次运行失败时窗口卡死问题 (未解决)

2.3  导入的问题

2.3.1 from turtle import *

2.3.2 import turtle()

2.4 窗口关闭和不关闭的问题

​2.4.1 解决窗口会自动关闭的问题

2.4.2 在jupyternotebook等IDE里,出现不仅不自动关闭,且无法关闭的情况( 未解决)

3 从这次改变学习思路

3.1 新的学习思路尝试(主要是做一个对比)

3.2 官方文档:学习首要参考

3.3 这里可以罗列 turtle的一些方法,属性,等等(缺内容补充)

4  画一个n边形 polygon

4.1 目标

4.2 对应试验代码

4.2.1 代码1:下面的代码设计内容

注意:python的range() 相关

4.2.2 代码2:下面的代码设计内容

4.2.3 代码3: 写入 polygon这个整体block

4.3 动画刷新问题

4.3.1 turtle 自动动画效果,但允许用户自定义修改

4.3.2  屏蔽动画

4.3.3 强制刷新

4.3.4  修改延时

4.4 关于位置

4.4.1 移动

4.4.2 角度(注意这里用的是角度)

4.4.3 查看状态

4.4.4 显示信息

4.5 清除和关闭

5  使用多个turtle 一起画

5.1 使用 turtle.Turtle() 返回一个turtle 对象

5.2 容易犯错的地方

5.3 如何创建多个turtle 小乌龟呢?

5.4 试验多个乌龟的测试代码

5.4.1 测试代码1

5.4.2 测试代码2

6  多角形的画法 

6.1 多角形和多角形形状,其实有着相同的数学原理

6.2 总结 关于多角形和多边形的 形成原理

6.3 关于多角形的起点(也适用于多边形)

6.4 坐标向量的模长公式

6.5 关于浮点数的回到原点判断

6.6 测试代码:这个其实是,多角星的画法

后面这些未完成(建设ing)

7 黄金螺线是弧线

8 绘制弧线相关

9  绘制多角星,前面是绘制多边形-圆,其他呢?还有那种变大的图形,鹦鹉螺  黄金螺线

10 总结多类图

11 其他函数


 1 在anaconda里用python3安装turtle

1.1 因为turtle 本来是适应python2的,所以直接安装报错

  1. turtle 最初是适应python2的,但是后面也适配了python3
  2. anaconda里python3安装turtle,或者直接在python3 安装turtle 都会有问题,出现安装失败,无法找到包之类的问题。
  3. 比如你输入 pip install turtle 就会一堆报错

axError: invalid syntax   ----------------------------------------Command "python setup.py egg_info" failed with error code 1 in /private/var/folders/nf/y2318q0x2dg78hz_nnrh4f5c0000gn/T/pip-install-fhotaoh3/turtle/

1.2 准备好手动下载,官网下载安装包

1.2.1 去官方手册看了下,其实是支持python3的

1.2.2 官网下载,手动安装

1.3 解决办法,参考如下的几个文章可解决

网上搜很多人遇到同样的问题

win10,Python3安装turtle报错_windows安装turtle-CSDN博客文章浏览阅读678次。win10,Python3安装turtle报错_windows安装turtlehttps://blog.csdn.net/zhuan_long/article/details/127713918

python3.7安装turtle,解决Command errored out with exit status 1: python setup.py egg_info Check the logs_command errored out with exit status 1: /usr/local-CSDN博客文章浏览阅读4.2k次,点赞3次,收藏6次。介绍Turtle package(海龟库)是python中使用较为广泛的绘制图像的函数库。导入海龟库之后,我们可以引用海归库中的函数绘制出各种各样的图案,比如哆啦A梦、皮卡丘等。Turtle package的核心思想就是把当前点想象成一个小海龟,然后给小海龟指令,让它沿着指令爬行,沿途留下轨迹就是我们绘制的图形,是不是很有意思呀,听到这估计很多朋友都想尝试一下了。Python3.7 Turtle安装问题要想使用Turtle,必须先在自己的计算机上安装Turtle package。由于当时Turtle _command errored out with exit status 1: /usr/local/python3.7.5/bin/python3.7https://blog.csdn.net/Just_do_myself/article/details/108144801

1.3.1 核心注意点

  • 下载文件是一个压缩包
  • 把setup.py文件里的一句py2语法的改成适合py3语法的语句(第40行)
  •  except (ValueError, ve):
  • 修改后保存下来,记住这个解压包地址

1.3.2 手动安装

  •  另外,一定要注意安装时路径改成自己电脑下载的安装包的的路径
  • 不要无脑写出 pip install turtle 这样的安装命令
  • 而要 “ pip install 安装包所在地址文件夹  ” 这样安装

2 turtle 运行时会遇到的各种问题

  • turtle号称很简单
  • 但是我没想到 turtle的包用起来问题很多

2.1 问题1:第1次可以运行,第2次运行报错的问题 (未解决)

  • 第1次可以运行,第2次运行失败的问题
  • 举例下面这个
  • 第1次运行正常,
  • 第2次运行报错

【完美解决】用python自带IDLE 进行turtle画图时,老是报错 AttributeError: module 'turtle' has no attribute 'fd'等问题-CSDN博客文章浏览阅读8.5k次,点赞33次,收藏13次。困扰我许久的一个问题,完美解决! 最近用python自带的IDLE,每当编写turtle画图的代码时,总是会报错,各种AttributeError: module ‘turtle’ has no attribute ‘fd’,连个直线都画不了……以下是问题样式:各种AttributeError: module ‘turtle’ has no attribute ‘fd’问题出现的原因相信..._attributeerror: module 'turtle' has no attribute 'percolorhttps://blog.csdn.net/SJM1996_fighting/article/details/103745286icon-default.png?t=N7T8https://blog.csdn.net/SJM1996_fighting/article/details/103745286

Python Turtle 窗口每第二次运行就会崩溃 - IT工具网icon-default.png?t=N7T8https://www.coder.work/article/4942823关于python:在jupyter笔记本中,Turtle不会运行超过一次 | 码农家园Turtle does not run more than once in jupyter notebook我正在尝试在jupyter笔记本中运行一些海龟代码。 当我运行一次代码时,代码运行良好。 但是,如果我...icon-default.png?t=N7T8https://www.codenong.com/56581957/

2.2 问题2:第1次可以运行,第2次运行失败时窗口卡死问题 (未解决)

  • 第一次运行正常
  • 经常遇到第2次运行时,turtle窗口卡死

2.3  导入的问题

2.3.1 from turtle import *

  • 官方文档里,明确写了,最好不要这样导入。
  • 导入内容多,且存在和其他包冲突的可能性。

如果是导入模式1

  • from turtle import *
  • 这是把turtle全部导入了,可以直接使用方法
  • 比如直接这样写:forward(100) 

2.3.2 import turtle()

如果是导入模式2

  • import turtle
  • 那就是需要这样 turtle.Turtle().forward(100)
  • 这里turtle.Turtle() 其实返回的就是一个海龟对象
  • 但是要注意 turtle 和 turtle.Turtle() 实际是2个不同的海龟对象!

也可以

  • import turtle as t
  • t.Turtle().forward(100)

或者也可以

  • import turtle
  • t=turtle.Turtle()
  • t.forward(100)
     

2.4 窗口关闭和不关闭的问题

​2.4.1 解决窗口会自动关闭的问题

这个问题很常见,用Python turtle画图时,画完图形窗口一下子退出消失,自动退出窗口的几个解决方法

  • 1.第一种方法:在程序的最后面加上:turtle.exitonclick()
  • 该语句让程序等待用户点击界面后才能够退出。
  • 2.第二种方法:在程序的最后面加上:turtle.mainloop()
  • 该语句必须放到最后一句,该句子后面的所有代码都无法执行,该语句的功能是事件循环。
  • 3.第三种方法:在程序的最后面加上:turtle.done()

2.4.2 在jupyternotebook等IDE里,出现不仅不自动关闭,且无法关闭的情况( 未解决)

  • 用turtle.bye()也不管用

3 从这次改变学习思路

3.1 新的学习思路尝试(主要是做一个对比)

  • 不想那么一步步学了
  • 我先看了一遍官方文档,然后自己根据印象,写一个综合其特点的各种例子,实际运用下

总结我之前的2种学习过程

  • 第1种:机器学习,线性代数等,先看书,然后根据书学了,再学笔记
  • 第2种:学用python的包,随便网上搜了,按网上搜到的看看了,直接跟着学一遍
  • 现在第3种是对第2种的改进,不想按部就班的这样学了,看重点文档官方文档,然后按自己的想法,写一些优点意思的代码。中间过程用到的新方法等顺便学下。

3.2 官方文档:学习首要参考

  • 先看了官方文档一遍
  • 这个turtle 文档我觉得写的一般,但是还是需要看的

turtle --- 海龟绘图 — Python 3.12.1 文档源码: Lib/turtle.py 概述: 海龟绘图是对 最早在 Logo 中引入的受欢迎的几何绘图工具 的实现,它由 Wally Feurzeig, Seymour Papert 和 Cynthia Solomon 在 1967 年开发。 Turtle star: 使用海龟绘图可以编写重复执行简单动作的程序画出精细复杂的形状。 在 Python 中,海龟绘图提供了一个实体“海龟”形象(带有...icon-default.png?t=N7T8https://docs.python.org/zh-cn/3/library/turtle.html#turtle.color

3.3 这里可以罗列 turtle的一些方法,属性,等等(缺内容补充)

但是要简单,主要在使用中感受,学习吧

turtle 这样的用法很多

begin_poly()   和 end_poly()

begin_fill()  和 end_fill()

pendown() 和  penup()

4  画一个n边形 polygon

4.1 目标

  • 1>带参数,可以画任意边形状.(实际上边数较多时,就接近圆形了)
  • 2>试验,延迟动画效果
  • 3>试验,无动画效果y
  • 4>试验 polygon

4.2 对应试验代码

4.2.1 代码1:下面的代码设计内容

  • 屏蔽动画过程,直接画出图形结果
  • 使用了 tracer(False) 和  tracer(True) 控制刷新
  • 接受用户输入,自动生成对应的多边形

注意:python的range() 相关
  • range( start,end,step)
  • 要注意每个数都必须是int,否则会报错,这里我用 range(1,int(n),1) 也是未了避免整个
  • 否则报错TypeError: 'float' object cannot be interpreted as an integer
from turtle import *

tracer(False)
home()
print(position())

n=numinput("请输入数字","只能是数字,且3~100以内",3,3,100)
for i in range(1,int(n)+1,1):
    forward(30)
    left(360/(int(n)))
tracer(True)
mainloop()

 

4.2.2 代码2:下面的代码设计内容

  • 和代码1的差别是
  • 没用屏蔽动画,反而是放慢的动画播放速度
  • 用delay(int) 来实现
from turtle import *

delay(60)
home()
print(position())

n=numinput("请输入数字","只能是数字,且3~100以内",3,3,100)
for i in range(1,int(n)+1,1):
    forward(30)
    left(360/(int(n)))

mainloop()

4.2.3 代码3: 写入 polygon这个整体block

  • 目的是什么呢?
  • 把这段代码 用 begin_poly()   和 end_poly() 这样包围起来,是为了让turtle.write(turtle.get_poly()) # 方便整体调用?
  • 暂时没发现有什么用处?
  • begin_poly() 
  • end_poly()
  • turtle.get_poly()
from turtle import *

pencolor('black')
pensize(1)
fillcolor('orange')

delay(60)
begin_poly()
begin_fill()

n=numinput("请输入数字","只能是数字,且3~100以内",3,3,100)
for i in range(1,int(n)+1,1):
    forward(30)
    left(360/(int(n)))

end_fill()
end_poly()

p = turtle.get_poly()
turtle.write(p)   #可以把polygon画画时,显示每次的点坐标pos,但是起点终点会写2次
print(p)          #返回信息,图片上不显示

mainloop()

((0.00,0.00), (30.00,0.00), (57.41,12.20), (77.48,34.50), (86.75,63.03), (83.61,92.86), (68.61,118.84), (44.34,136.48), (15.00,142.72), (-14.34,136.48), (-38.61,118.84), (-53.61,92.86), (-56.75,63.03), (-47.48,34.50), (-27.41,12.20), (0.00,0.00))

4.3 动画刷新问题

4.3.1 turtle 自动动画效果,但允许用户自定义修改

  • turtle默认就是自带动画效果的,这是一个很大的特点
  • 但是同时turtle也允许
  1. 用户取消动画过程
  2. 控制动画速度

4.3.2  屏蔽动画

使用 tracer(False) 和  tracer(True) 控制刷新

  • 一般成对使用,关闭刷新,打开刷新
  • tracer(False)
  • tracer(True)

4.3.3 强制刷新

  • update()
  • 在刷新被关闭时,强行刷新1次?

4.3.4  修改延时

  • delay( time毫秒数)
  • time : 一个正整数,以毫秒为单位表示延迟时间,是可选的。
  • 1秒=10分秒=100厘秒=1000毫秒
  • 1毫秒=1000微秒

4.4 关于位置

4.4.1 移动

  • turtle.forward()
  • turtle.backward()
  • setx()
  • sety()
  • goto
  • teleport  瞬间移动

4.4.2 角度(注意这里用的是角度)

turtle.left()

turtle.right()

角度和弧度换算

弧度公式

费360度角度公式

4.4.3 查看状态

  • home()                   #回到原点
  • position()   pos()    #移动/显示位置
  • heading()               #移动/显示方向

4.4.4 显示信息

  • 多边形polygon显示的是坐标信息
  • turtle.write(p)   #可以把polygon画画时,显示每次的点坐标pos,但是起点终点会写2次
  • print(p)          #返回信息,图片上不显示

4.5 清除和关闭

  • clear()
  • reset()        #关掉
  • turtle.bye()   #好像不生效


 

5  使用多个turtle 一起画

5.1 使用 turtle.Turtle() 返回一个turtle 对象

  • turtle.Turtle()     #产生一个新的turtle对象
  • turtle.Turtle()     #再产生一个新的turtle对象

5.2 容易犯错的地方

下面这种写法,实际伤定义了3个不同的turtle,默认的1个, turtle.Turtle()又新建了2个,并且,后面 turtle.Turtle()创建的2个完全是独立的。一定注意

        turtle.color(c)
        turtle.Turtle().forward(steps)

        turtle.Turtle().right(30)

        #上面这种写法,实际伤定义了3个不同的turtle

5.3 如何创建多个turtle 小乌龟呢?

t1=turtle.Turtle()
t2=turtle.Turtle()

5.4 试验多个乌龟的测试代码

5.4.1 测试代码1

import turtle

t1=turtle.Turtle()
t2=turtle.Turtle()

for step1 in range(100):
    t1.color("green")
    t1.forward(step1)
    t1.right(30)
    
    t2.color("red")
    t2.forward(step1*1.2)
    t2.right(30)

turtle.done()

5.4.2 测试代码2

import turtle

t1=turtle.Turtle()
t1.pencolor('black')
t1.pensize(1)
t1.fillcolor('green')

t2=turtle.Turtle()
t2.pencolor('black')
t2.pensize(1)
t2.fillcolor('red')

t1.setheading(0)
t2.setheading(180)


t1.begin_fill()
t2.begin_fill()
for step1 in range(50):
    #t1.goto(-step1-50,0)
    t1.color("green")
    t1.forward(step1*10)
    t1.left(170)

    t2.color("red")
    t2.forward(step1)
    t2.left(30)

t1.end_fill()
t2.end_fill()
    
turtle.done()

6  多角形的画法 

6.1 多角形和多角形形状,其实有着相同的数学原理

统一的算法原理

其实,如果是一个点这样持续转动

  • 转动180度那就直接到了对面
  • 转动360度那就直接到了自己这边
  • 转动540度那就直接到了对面

如果不是180呢

其实,如果是一个点这样持续转动

  • 如果         90 < 转动角度 <180
  • 转动170度那就直接到了对面,但是偏差10度,后面一直偏差下去,理论需要 360/10=36 才能刚好转一圈,那就会形成36个角
  • 转动150度那就直接到了对面,但是偏差30度,后面一直偏差下去,理论需要 360/30=12 才能刚好转一圈,那就会形成12个角

6.2 总结 关于多角形和多边形的 形成原理

  • 上面我说清楚了,
  • 多边形其实就是连续旋转多次而成了
  • 而如果连续选择相同的角度,就会形成正多边形
  • 如果旋转的角度     0<x<90,形成多边形,第2象限
  • 如果旋转的角度     90<x<180,就会形成多角星,至少都比四边形复杂
  • 如果,如果旋转的角度    180<x<270,就会形成多角星,
  • 如果,如果旋转的角度    270<x<360,形成多边形,第4象限

6.3 关于多角形的起点(也适用于多边形)

  • 用 stamp() 和dot() 是为了强调原点
  • 这样方便看清楚,运动的原点。
  • 是为了在图上显示原点,这样也能明白最后为什么会收敛于原点

6.4 坐标向量的模长公式

  • abs(pos())

6.5 关于浮点数的回到原点判断

  • 浮点数的判断条件无 ==
  • 只能用 <1足够小来判断

6.6 测试代码:这个其实是,多角星的画法

搞清楚这个的动画后,自己手动画的原理也了解了,直观的经验狠重要啊

from turtle import *
# 绘制多角星,前面是绘制多边形-圆,其他呢?还有那种变大的图形,鹦鹉螺

pencolor('black')
pensize(1)
fillcolor('red')
dot(10,"red")
stamp()


begin_fill()
delay(10)
while True:
    forward(200)
    left(150)
    print("pos()=",pos(),"abs(pos())=",abs(pos()))
    if abs(pos()) < 1:    #abs()取模长方法,float没用 ==0这种判断,只能<1像素
        break
end_fill()

done()

pos()= (200.00,0.00) abs(pos())= 200.0
pos()= (26.79,100.00) abs(pos())= 103.52761804100828
pos()= (126.79,-73.21) abs(pos())= 146.41016151377548
pos()= (126.79,126.79) abs(pos())= 179.31509443361068
pos()= (26.79,-46.41) abs(pos())= 53.58983848622458
pos()= (200.00,53.59) abs(pos())= 207.05523608201662
pos()= (0.00,53.59) abs(pos())= 53.58983848622448
pos()= (173.21,-46.41) abs(pos())= 179.31509443361074
pos()= (73.21,126.79) abs(pos())= 146.4101615137754
pos()= (73.21,-73.21) abs(pos())= 103.5276180410084
pos()= (173.21,100.00) abs(pos())= 199.99999999999997
pos()= (0.00,-0.00) abs(pos())= 1.0345658394727079e-13

后面这些未完成(建设ing)

7 黄金螺线是弧线

但原理和之前的线段逐渐变长的原理是想通的

8 绘制弧线相关

9  绘制多角星,前面是绘制多边形-圆,其他呢?还有那种变大的图形,鹦鹉螺  黄金螺线

10 总结多类图

11 其他函数

delay()

speed()

  • 27
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值