【学习路线】Python自动化运维 详细知识点学习路径(附学习资源)

thbcm阅读(520)

学习本路线内容之前,请先学习Python的基础知识

其他路线:

Python基础 >>

Python进阶 >>

Python爬虫 >>

Python数据分析(数据科学) >>

Python 算法(人工智能) >>

Python Web开发 >>

Python自动化运维 >>

符号表解释:

可根据知识点前的符号按需选学,并获取知识点描述和学习资源。

 必学:核⼼知识点,经常⽤到。

建议学:重要知识点,专业⼈⼠的基⽯。

⾯试重点:经常出现的⾯试知识点。

可有可⽆:边缘区域,不是必须探索的地⽅。

知识描绘:知识点描述,快速理解。

学习资源:关联的学习资源。

学习⽬标:阶段性⽬标。

学习路线:自动化运维


描述: Python自动化运维是使用Python编程语言来简化和自动化系统管理和运维任务的过程。这包括服务器管理、配置管理、应用程序部署、监控和报警、日志分析、数据备份等各种运维活动。

目标: 自动化备份系统,开发一个自动化备份系统,能够定期备份关键数据和配置,并支持自动化恢复。


学习资源:


1、常见的自动化运维

  • 服务器管理:管理服务器的基本任务,如远程登录、文件传输、系统配置和维护,都可以通过Python自动化来实现。例如,使用Paramiko库可以进行SSH连接和执行远程命令。
  • 配置管理:使用工具如Ansible、SaltStack或自编写Python脚本,可以自动化配置管理,确保服务器和应用程序的配置与期望一致。
  • 应用程序部署:利用Python脚本,可以自动部署应用程序、更新代码、重启服务等,以实现持续集成和持续部署(CI/CD)。
  • 监控和报警:使用Python库,如Prometheus、Grafana、Nagios等,可以监控服务器和应用程序的性能和健康状况,并设置报警规则,以便在问题发生时及时采取措施。
  • 日志分析:使用Python编写脚本分析服务器和应用程序的日志,以便检测问题、识别趋势和改进性能。
  • 自动化任务调度:使用工具如Celery或APScheduler,可以自动化任务的调度和执行,例如定期备份数据库、清理日志文件等。
  • 容器编排和管理:使用Python脚本或库,可以与容器编排工具(如Docker、Kubernetes)集成,以管理容器化应用程序的部署和维护。
  • 云服务管理:利用云服务提供商的API和Python SDK,可以自动化管理云资源,例如创建虚拟机、配置存储、设置负载均衡等。
  • 数据备份和恢复:编写Python脚本来自动化数据备份和恢复任务,确保数据的安全性和可用性。
  • 安全性和合规性:使用Python编写脚本执行安全性扫描、合规性检查和漏洞管理,以确保系统的安全性。

2、Python 常用运维库

  • Paramiko:Paramiko是一个Python库,用于SSH协议的实现,它允许您在远程服务器上执行命令、上传和下载文件,以及进行远程操作。这对于远程服务器管理非常有用。
  • Fabric:Fabric是一个简化SSH连接和远程命令执行的库。它允许您轻松编写Python脚本来执行批量操作,例如在多个服务器上部署代码或执行任务。
  • Ansible:Ansible是一个功能强大的自动化和配置管理工具,它使用Python编写,但不需要在目标主机上安装任何额外的软件代理。Ansible使用YAML语法来描述任务和配置。
  • Boto3:Boto3是Amazon Web Services(AWS)的Python SDK,它允许您通过Python编写脚本管理AWS资源,包括EC2实例、S3存储桶、RDS数据库等。
  • Psutil:Psutil是一个跨平台的Python库,用于监控系统资源和进程。它可以帮助您获取关于CPU、内存、磁盘和网络的信息,以及管理进程。
  • Requests:Requests是一个流行的Python库,用于HTTP请求。它可以帮助您与Web服务进行通信,例如从API获取数据或发送POST请求。
  • Docker SDK for Python(docker-py):如果您使用Docker容器,docker-py是一个用于管理Docker容器和镜像的Python SDK。
  • Loguru:Loguru是一个易于使用的日志记录库,它提供强大的日志记录和日志旋转功能,对于分析和故障排除非常有帮助。
  • Schedule:Schedule是一个Python库,用于执行定时任务。它可以帮助您自动执行周期性任务,例如备份、日常清理等。
  • Pytest:Pytest是一个流行的Python测试框架,用于编写和运行自动化测试。在运维中,它可以用于编写和运行各种测试来验证系统和应用程序的正确性

3、常用运维工具

3.1 配置管理工具:

  • Ansible:自动化配置管理工具,用于自动化应用程序部署和配置管理。
  • Puppet:用于配置自动化和集中化管理的工具。
  • Chef:用于基础设施自动化和应用程序配置管理的工具。
  • SaltStack:配置管理、远程执行和事件驱动自动化的工具。

3.2 

容器编排工具:

  • Docker Swarm:Docker的原生容器编排工具,用于管理Docker容器集群。
  • Kubernetes:用于自动化容器部署、扩展和管理的开源容器编排平台。

3.3 监控和性能管理工具:

  • Prometheus:用于监控和警报的开源系统。
  • Nagios:用于监控网络和系统的开源工具。
  • Grafana:用于可视化监控数据和创建仪表板的工具。

3.4 日志管理工具:

  • ELK Stack(Elasticsearch、Logstash、Kibana):用于日志收集、处理和可视化的组合工具。
  • Splunk:用于实时日志分析、监控和安全分析的商业工具。

3.5 自动化部署工具:

  • Jenkins:用于持续集成和持续交付(CI/CD)的开源自动化工具。
  • Travis CI:托管的CI/CD服务,适用于GitHub项目。
  • CircleCI:托管的CI/CD服务,支持多种代码托管平台。

3.6 版本控制工具:

  • Git:用于版本控制和代码管理的分布式版本控制系统。

3.7 安全性和合规性工具:

  • Nessus:用于漏洞扫描和安全性分析的漏洞扫描工具。
  • OSSEC:开源主机入侵检测系统,用于监视和检测安全事件。
  • Chef InSpec:用于自动化合规性测试的工具。

3.8 云管理和自动化工具

  • Terraform:基础设施即代码(IaC)工具,用于自动化云资源的创建和管理。
  • AWS CloudFormation:Amazon Web Services(AWS)的基础设施即代码工具。
  • Azure Resource Manager:Microsoft Azure的基础设施即代码工具。

3.9 

备份和恢复工具

  • Veeam:用于虚拟化和云环境备份和恢复的工具。
  • Bacula:用于备份、恢复和数据管理的开源工具。

【学习路线】Python数据分析(数据科学) 详细知识点学习路径(附学习资源)

thbcm阅读(323)

学习本路线内容之前,请先学习Python的基础知识

其他路线:

Python基础 >>

Python进阶 >>

Python爬虫 >>

Python数据分析(数据科学) >>

Python 算法(人工智能) >>

Python Web开发 >>

Python自动化运维 >>

符号表解释:

可根据知识点前的符号按需选学,并获取知识点描述和学习资源。

⭐️必学:核心知识点,经常用到。

建议学:重要知识点,专业人士的基⽯。

面试重点:经常出现的面试知识点。

可有可无:边缘区域,不是必须探索的地方。

知识描绘:知识点描述,快速理解。

学习资源:关联的学习资源。

学习目标:阶段性目标。


学习路线:自动化运维


描述: Python 数据分析是使用 Python 编程语言进行数据收集、处理、分析和可视化的过程,通常用于从大型数据集中提取有价值的信息和见解。它包括使用库和工具如 pandas、NumPy、Matplotlib 和 Seaborn 来执行数据操作和可视化,以支持数据驱动的决策和问题解决。这是数据科学领域中的关键技能,广泛应用于各种行业,包括商业、医疗保健、金融和科学研究。

目标: 销售数据分析,分析公司的销售数据,包括销售额、销售趋势、最畅销产品等,并生成可视化报告。


学习资源:


一、环境搭建

  • ⭐️Anaconda

描述: Anaconda 是一个开源的数据科学和机器学习平台,旨在简化数据分析和科学计算的工作流程。它包括一个强大的集成开发环境(IDE),称为 Anaconda Navigator,以及一个包管理器 Conda。Anaconda 提供了许多常用的数据科学工具和库的预安装,如 NumPy、pandas、Matplotlib、Jupyter Notebook 和 scikit-learn,使用户能够轻松地开始数据分析和机器学习项目。

软件资源>>>

  • Jupyter Notebook

描述: Jupyter Notebook 是一个交互式计算环境,广泛用于数据科学和编程教育。它允许用户创建和共享文档,其中可以包含实时运行的代码、文本、图像和可视化结果。

资源:

二、常用类库

1、⭐️NumPy

1.1 数组: 

  • NumPy 最重要的数据结构是 ndarray,它是一个多维数组对象。这些数组可以包含相同类型的元素,通常是数值。
  • 数组的维度称为轴(axes),数组的维度数量称为秩(rank)。
  • 通过 numpy.array() 函数或直接使用列表创建 NumPy 数组。

1.2 索引: 

  • NumPy 数组可以使用整数索引来访问元素,索引从 0 开始。
  • 可以使用负数索引从数组的末尾开始访问元素。

1.3 切片: 

  • 切片是一种从数组中提取子数组的方法,可以用于选择数组的一部分。
  • 切片的语法是 array[start:stop:step],其中 start 表示起始索引,stop 表示结束索引(不包括),step 表示步长。

1.4 多维数组: 

  • NumPy 支持多维数组,可以是一维、二维或更高维度。
  • 多维数组的元素可以通过逗号分隔的索引访问,例如 array[0, 1] 表示访问第一行第二列的元素。

1.5 函数: 

  • NumPy 提供了大量用于数值计算的函数,包括数学、统计、线性代数等。
  • 一些常用的 NumPy 函数包括 numpy.sum()、numpy.mean()、numpy.std()、numpy.dot() 等。
  • NumPy 还支持广播(broadcasting),使得对不同形状的数组进行运算更加灵活。

2、⭐️Pandas


2.1 Series:

  • Series 是 pandas 中的一维标记数组,类似于 NumPy 数组或 Python 列表,但具有数据标签(索引)。
  • Series 由两部分组成,数据部分和索引部分,可以将它看作是一列数据与该列数据的标签。
  • 创建 Series 可以使用 pandas.Series() 函数,传入数据列表或 NumPy 数组。

2.2 DataFrame:

  • DataFrame 是 pandas 中的二维数据结构,类似于电子表格或 SQL 表格,它由多个 Series 对象组成,每个 Series 代表一列数据。
  • DataFrame 是一个表格,每列可以包含不同类型的数据,但是每列的数据类型必须相同。
  • 可以使用 pandas.DataFrame() 函数来创建 DataFrame,传入数据和列标签。

2.3 索引:

  • 索引是 pandas 中非常重要的概念,它用于标识和访问 Series 和 DataFrame 中的数据。
  • 可以自定义索引,也可以使用默认整数索引。
  • 索引在数据对齐和数据检索中起着关键作用。

2.4 对齐:

  • 对齐是 pandas 的一个强大功能,它确保在进行操作时,两个对象的索引正确对齐,从而避免数据混乱或错误。
  • 当对两个具有不同索引的 Series 或 DataFrame 执行操作时,pandas 会自动对齐它们的数据。

2.5 函数:

  • pandas 提供了丰富的函数和方法,用于数据操作和变换,包括数据的筛选、排序、合并、分组等。
  • 一些常用的 pandas 函数包括 head()、tail()、info()、describe()、groupby() 等。

2.6 统计:

  • pandas 支持对数据进行统计分析,包括计算均值、中位数、标准差、最大值、最小值等。
  • 可以使用 mean()、median()、std()、max()、min() 等函数来执行这些统计操作。

3、数据处理


3.1 数据清洗:

  • 数据清洗是数据预处理的重要步骤,用于处理数据中的错误、缺失值、重复项和不一致性。
  • 常见的数据清洗任务包括删除重复行、填充缺失值、修复数据类型、处理异常值等,以确保数据质量。

3.2 层次化索引:

  • 层次化索引是 pandas 中的一项高级功能,允许在一个轴上拥有多个索引级别。
  • 这使得数据可以以更复杂的方式进行组织和检索,特别适用于处理多维数据,如多维时间序列数据。

3.3 数据连接:

  • 数据连接是将多个数据集合并为一个数据集的过程,通常根据某些共享的列(键)进行连接。
  • 常见的数据连接操作包括内连接、左连接、右连接和外连接,可以使用 pandas 的 merge() 函数执行这些操作。

3.4 数据合并:

  • 数据合并通常指的是将多个数据集水平合并,即在列方向上合并数据。
  • pandas 提供了 concat() 函数用于在不同数据集之间执行数据合并。

3.5 分组聚合:

  • 分组聚合是将数据分成不同的组,并对每个组应用聚合函数(如求和、平均值、计数等)的过程。
  • 可以使用 groupby() 函数将数据按照某个列或多个列进行分组,并应用聚合函数来生成汇总信息。

3.6 轴向旋转:

  • 轴向旋转是重新组织数据的操作,通常涉及将数据从长格式(长表)转换为宽格式(宽表)或反之。
  • 可以使用 pivot()、melt()、stack()、unstack() 等函数来执行轴向旋转操作。

4、数据可视化


4.1 ⭐️Matplotlib 

  • Matplotlib 是 Python 中最流行和最基础的数据可视化库之一,用于创建各种静态、交互式和动态的图表和图形。
  • 它提供了广泛的绘图功能,包括散点图、折线图、柱状图、饼图、热力图等。
  • Matplotlib 的绘图方式相对底层,需要用户手动设置图形的各个属性,因此有一定的学习曲线。
  • 通常与 Jupyter Notebook 等环境结合使用,用于数据探索和可视化。
  • 资源>>>

4.2 Seaborn 

  • Seaborn 是建立在 Matplotlib 之上的高级数据可视化库,旨在简化创建漂亮和信息丰富的统计图表。
  • 它提供了高级别的 API,可以轻松绘制各种统计图,包括分布图、箱线图、热力图、回归图等。
  • Seaborn 的样式和颜色调色板使得创建吸引人的可视化更加容易,而不需要大量的自定义设置。
  • 适用于数据分析、探索性数据分析(EDA)和报告生成。

4.3 Pyecharts 

  • Pyecharts 是一个基于 Echarts 的 Python 可视化库,它提供了一种简单的方式来创建交互式数据可视化。
  • Echarts 是一种流行的 JavaScript 图表库,Pyecharts 允许 Python 用户轻松利用 Echarts 的功能。
  • Pyecharts 支持多种图表类型,包括折线图、柱状图、散点图、地图等,以及自定义主题和样式。
  • 它适用于需要在 Web 应用程序中嵌入交互式图表的场景。

79关闯关:轻松掌握HTML+CSS,打造你的第一个网页

thbcm阅读(286)

想要踏入网页设计的奇妙世界,却不知从何下手?别担心!这个精心设计的HTML+CSS基础实战课程将带你开启一段激动人心的学习之旅。通过79个精心设计的关卡,你将逐步掌握创建精美网页的核心技能。

从零开始的网页设计之旅

无论你是完全的编程新手,还是想要进一步提升技能的爱好者,这个课程都能满足你的需求。我们将从最基础的概念开始,一步步引导你进入网页设计的精彩世界。

HTML:构建网页的骨架

HTML就像是建筑的框架,它为你的网页提供了基本的结构。在这个部分,你将学习如何:

  1. 创建你的第一个HTML文档
  2. 使用各种标签组织内容
  3. 插入图片、链接和表格等元素 通过这些知识,你将能够搭建起网页的基本框架,为后续的设计工作打下坚实基础。

CSS:为网页穿上漂亮外衣

如果说HTML是网页的骨架,那么CSS就是让它变得美丽动人的魔法。在这个环节,你将学习:

  1. 改变文本的颜色、大小和字体
  2. 设计网页的布局和背景
  3. 创建动画效果,让网页栩栩如生 掌握了CSS,你就能将简单的HTML文档变成视觉上令人惊叹的网页作品。

通过这79个精心设计的关卡,你将从一个对HTML和CSS一无所知的新手,成长为能够独立创建漂亮网页的开发者。这不仅仅是学习一项技能,更是打开一扇通向无限可能的大门。 准备好开始你的网页设计之旅了吗?让我们一起,通过HTML和CSS的魔力,将你的创意变为现实!

课程地址:

HTML+CSS基础实战课程https://www.w3cschool.cn/codecamp/newList/basehtml

轻松掌握网页设计神器:CSS圆角生成器让你的网站瞬间高大上

thbcm阅读(320)

在这个视觉至上的互联网时代,一个网站的美感可能决定了用户是驻足还是离开。而在众多设计元素中,圆角设计犹如画龙点睛之笔,能瞬间提升网页的质感和亲和力。今天,我们就来聊聊这个小小的设计神器——CSS圆角生成器,看看它如何让你的网站从平平无奇变身高大上。

圆角设计:小细节成就大美感

为什么圆角设计如此重要?

想象一下,你走进一间房子,所有的家具棱角都是尖锐的直角,你会觉得怎么样?没错,可能会感觉冷冰冰的,甚至有点不安全。同理,网页设计中的圆角就像是为界面添加了一层柔和的滤镜,让用户感觉更加舒适和友好。

  • 视觉舒适:圆角能减少视觉疲劳,让界面看起来更加柔和。
  • 引导注意:恰当的圆角设计可以巧妙地引导用户视线,突出重要元素。
  • 现代感:圆角设计是当前流行的设计趋势,能让你的网站看起来更加时尚现代。

圆角生成器:设计师的得力助手

虽然圆角设计很重要,但如果每次都要手动调整CSS代码,那可真是个苦差事。这就是圆角生成器大显身手的时候了!它就像是设计师的魔法棒,只需点点鼠标,就能变出完美的圆角效果。

玩转圆角生成器:从新手到专家

基础设置:边框样式和颜色

使用圆角生成器,你首先要做的就是设置边框的基本属性:

  1. 边框宽度:决定边框的粗细,常用1px2px
  2. 边框样式:可以选择实线、虚线、点状等多种风格。
  3. 边框颜色:选择一个与你的网站配色方案相符的颜色。比如,你可以这样设置:
    border-width: 1px;
    border-style: solid;
    border-color: rgb(120, 195, 0);

    这样就得到了一个1像素宽的绿色实线边框。

进阶技巧:自定义圆角半径

圆角的精髓就在于它的弧度。圆角生成器通常提供两种设置方式:

  1. 固定半径:所有角都使用相同的圆角半径,例如56px
    border-radius: 56px;

  2. 自定义半径:可以为每个角设置不同的半径,创造出独特的形状。
    border-top-left-radius: 56px;
    border-top-right-radius: 8px;
    border-bottom-left-radius: 8px;
    border-bottom-right-radius: 56px;

圆角设计的未来趋势

随着设计理念的不断演进,圆角设计也在不断发展。未来,我们可能会看到更多有趣的趋势:

  1. 动态圆角:随用户交互改变形状的圆角设计。
  2. 不规则圆角:打破传统,创造出更加有机的形状。
  3. 智能圆角:根据内容自动调整最佳圆角效果的AI辅助设计。

圆角设计看似简单,实则蕴含无限可能。通过圆角生成器,你可以轻松实现专业级的设计效果,让你的网站在视觉上脱颖而出。记住,在设计中,细节决定成败。一个恰到好处的圆角,可能就是你网站成功的关键一笔。所以,别再犹豫了,打开CSS圆角生成器,开始你的设计之旅吧。相信我,当你熟练运用这个工具后,你会发现网页设计变得如此简单而有趣。让我们一起,用圆润的线条,勾勒出网络世界的美好未来!

CodeGeeX:开发者的全能AI助手,让编程效率倍增

thbcm阅读(349)

在当今快节奏的软件开发世界中,效率就是生命。想象一下,有一位24小时待命的助手,能帮你生成代码、添加注释、编写测试、甚至进行代码审查,这将会如何改变你的工作方式?这不是科幻,而是CodeGeeX带来的现实。CodeGeeX,这位基于大模型的智能编程助手,正在悄然改变着开发者的日常工作。它就像一个全能的编程伙伴,随时准备帮你解决各种编程难题,大大提升你的工作效率。

智能编程的革命:CodeGeeX全方位提升开发体验

CodeGeeX不仅仅是一个简单的代码补全工具,它的功能之广泛,堪称开发者的瑞士军刀。让我们一起来看看这把”军刀”都有哪些锋利的”刀刃”。

代码生成与补全:告别重复劳动

还在为重复编写相似代码而烦恼吗?CodeGeeX可以根据你的需求智能生成代码片段,甚至是完整的函数。它就像是你的私人助理,总能准确理解你的意图,迅速提供你需要的代码。

自动注释与解释:代码一目了然

代码没有注释就像没有路标的迷宫。CodeGeeX可以自动为你的代码添加清晰的注释,同时还能解释复杂的代码逻辑。这不仅让你的代码更易于维护,也大大提高了团队协作的效率。

单元测试与代码审查:质量把关更轻松

编写单元测试常常被视为一项繁琐的工作,但CodeGeeX可以自动生成全面的单元测试,确保你的代码质量。此外,它还能进行代码审查,就像有一个经验丰富的同事随时为你指出代码中的潜在问题。

多语言互译与智能问答:突破语言障碍

在全球化的开发环境中,CodeGeeX的多语言互译功能可谓是一大亮点。它能够在300多种编程语言之间进行转换,让你轻松应对不同的技术栈。遇到棘手的技术问题?CodeGeeX还能充当你的智能问答助手,为你解答各种疑惑。

CodeGeeX:300+种编程语言的最佳搭档

CodeGeeX的强大之处不仅在于其功能的多样性,更在于其广泛的适用性。无论你是使用Python进行数据分析,还是用Java开发企业级应用,CodeGeeX都能成为你得力的助手。

全面覆盖主流IDE:开发环境随心选

CodeGeeX深知开发者对工具的挑剔。因此,它支持多种主流集成开发环境(IDE),包括Visual Studio Code、JetBrains系列IDE以及Visual Studio。无论你习惯哪种开发环境,CodeGeeX都能无缝集成,为你的编码之旅保驾护航。

实际应用案例:CodeGeeX如何改变开发流程

  • 快速原型开发:利用CodeGeeX的代码生成功能,开发者可以在短时间内完成基础框架的搭建,大大缩短项目的启动时间。
  • 代码质量提升:通过自动化的代码审查和单元测试生成,CodeGeeX帮助开发团队维持较高的代码标准,减少潜在的bug。
  • 跨语言项目协作:在需要将某个功能从一种语言移植到另一种语言的场景中,CodeGeeX的多语言互译功能可以显著提高效率。
  • 新人培训加速:对于刚加入团队的新成员,CodeGeeX可以通过代码解释功能帮助他们快速理解项目代码,加速融入团队。

CodeGeeX不仅是一个工具,更是开发者的得力助手。它通过智能化的功能全面提升开发效率,让编程变得更加轻松和愉快。无论你是经验丰富的老手,还是刚入行的新人,CodeGeeX都能为你的编程之路添砖加瓦。在这个AI迅速发展的时代,拥抱像CodeGeeX这样的智能工具,将会是每个开发者提升竞争力的关键所在。

用豆包MarsCode IDE打造精美数据大屏:从零开始的指南

thbcm阅读(360)

原标题:用豆包MarsCode IDE,从0到1画出精美数据大屏!

豆包MarsCode IDE 是一个云端 AI IDE 平台,通过内置的 AI 编程助手,开箱即用的开发环境,可以帮助开发者更专注于各类项目的开发。

作为一名前端开发工程师,今天想尝试利用豆包MarsCode IDE,选择 Vue + Echarts 创建一个大屏项目:数智化线上车展数据分析平台

前置知识

在学习本教程前你需要具备以下编程基础和技能:

前端开发基础

开发工具和环境

  • IDE 使用:熟悉使用集成开发环境(IDE),如豆包MarsCode IDE 或其他常用的前端开发 IDE(如 VSCode)。了解如何创建项目、运行项目、安装依赖等。
  • 包管理工具:了解 npm 或 cnpm 等包管理工具的基本使用方法,能够安装和管理项目依赖。

其他相关知识

  • 响应式设计:理解响应式设计的基本概念,知道如何使网页在不同分辨率的设备上适配显示,例如使用 CSS 的 transform 属性进行缩放。 推荐课程:《HTML+CSS响应式网页设计 (基础版)
  • 网络请求和数据处理:虽然教程中没有直接提到网络请求,但通常数据大屏会涉及到从后端获取数据,因此了解基本的网络请求和数据处理方法是有帮助的。

软件工程知识

具备以上基础和技能,将有助于你更好地理解和应用教程中的内容,从而成功地创建一个数据大屏项目。

项目准备

进入 IDE 之后,注册登录进入主页。

当你选择创建一个 Vue 项目后,会初始化一个项目,点击 RUN 即可运行。

浏览 package.json 文件,发现默认创建的是 Vue3+Vite 构建的项目。虽然官方提供的模板是 Vue3 的,但如果你希望使用 Vue2 也可以通过 Github 导入项目。

画大屏必不可少的就是 ECharts,通过 npm 安装速度较慢,所以使用镜像及其命令 cnpm。因为豆包MarsCode IDE 内置了 AI 助手,提供代码自动补全与生成、问题修复、代码优化等能力,安装了 cnpm 后,IDE 猜到了我是在查看版本,在控制台输入 cnpm 之后就会自动补全 cnpm -v 来查看版本。

通过命令 cnpm install echarts --save 安装 ECharts,cnpm 的安装速度就很快了,差不多一分钟就可以搞定,在项目的 package.json 文件中也可以看到安装的版本5.5.1.

画大屏需要静态图片来装饰整个大屏,可以通过 upload 批量上传。

将模板默认生成的代码,简单删一下就变为一个空的项目,我们就可以正式开始大屏的制作了。

数据大屏的制作

可视化数据大屏首先要解决的问题就是适配性,这是一个比较专业性的问题。豆包MarsCode 集成了 AI 功能,所以我们可以直接向 AI 助手提问:想要可视化大屏适配任何多种分辨率的屏幕,前端该如何实现。我们看一下它是怎么回答的。

我选择的解决方案是:通过 CSS 的 scale 属性,根据屏幕大小,对图表进行整体的等比缩放,从而达到自适应效果。

CSS 的 scale 属性用于指定元素的缩放比例。它是 transform 属性的一个值,可以使用 CSS 中的 transform 属性来设置元素的缩放比例。

scale 属性可以接受一个或两个参数。如果只提供一个参数,它将同时应用于元素的宽度和高度,导致元素在两个维度上按比例缩放。如果提供两个参数,第一个参数表示宽度的缩放比例,第二个参数表示高度的缩放比例。

/* 元素整体缩放为原来的 50% */transform: scale(0.5);
/* 元素宽度缩放为原来的 75%,高度缩放为原来的 120% */transform: scale(0.75, 1.2);

scale 属性可以与其他 transform 属性值结合使用,比如 translaterotate 等,以实现更复杂的变形效果。同时,scale 属性也可以用在 CSS 动画中,通过改变缩放比例来实现元素的动态缩放效果。 具体代码如下:

let screen = ref();


// 挂载时首先去获取视口的宽高
onMounted(() => {
  // 使用ref获取到的dom对象调用时都需要带.value
  screen.value.style.transform = `scale(${getScale()}) translate(-50%,-50%)`;
  console.log(`scale(${getScale()}) translate(-50%,-50%)`, '666');
});


// 创建函数
function getScale(w = 1920, h = 1080) {
  let ww = window.innerWidth / w;
  let wh = window.innerHeight / h;
  // 按照变化较小者的比例去进行缩放
  return ww < wh ? ww : wh;
}


// 视口发生变化时
window.onresize = () => {
  screen.value.style.transform = `scale(${getScale()}) translate(-50%,-50%)`;
}

getScale() 函数通常用于根据浏览器视口大小计算一个缩放因子。这个因子通常被用作 scale 属性的值,以确保 screen 元素可以根据屏幕大小自动调整大小。translate(-50%,-50%) 部分是用于将缩放后的元素居中显示的样式, transform-origin: left top 表示 transform 属性的原点位于元素的左上角。 这段代码提供了一种响应式的方式来调整页面元素的大小和位置,使得页面在不同大小的屏幕上都能够友好地显示。

先给大家展示下最终效果,我再来一步步演示大屏数据图表的生成。

整个可视化大屏分为六部分:

两个横向柱状图、一个中国地图、一个折线图、一个饼状图和一个热力图‍

横向柱状图 & 折线图

x轴配置:

  • 类型为value,表示x轴为数值轴;
  • 轴标签的颜色为白色;
  • 边界间隙为[0, 0.01],表示x轴的起始和结束位置会留有一定的空白。

y轴配置:

  • 类型为category,表示y轴为类目轴;
  • 轴标签的颜色为白色;
  • y轴的类目数据包括了多个汽车品牌名称。

Echarts-category 类目轴,适用于离散的类目数据。为该类型时类目数据可自动从 series.datadataset.source 中取,或者可通过 yAxis.data 设置类目数据。

seriestype:'category' 柱状图(或称条形图)是一种通过柱形的高度(横向的情况下则是宽度)来表现数据大小的一种常用图表类型。

type:'line' 折线图是用折线将各个数据点标志连接起来的图表,用于展现数据的变化趋势。

xAxis: {
  type: 'value',
  axisLabel: {
    color: 'white',
  },
  boundaryGap: [0, 0.01],
},
yAxis: {
  type: 'category',
  axisLabel: {
    color: 'white',
  },
  data: [],
},
series: [
  {
    name: '',
    type: 'bar',
    label: {
      show: true,
    },
    data: [],
  },
],

热力图

ECharts 热力图是一种数据可视化的图表类型,它通过颜色的深浅来表示数据的大小或密集程度。在热力图中,数据通常以矩形网格的形式呈现,每个小矩形格子的颜色深浅代表该位置上的数据大小,一般使用渐变色来表达数据的强弱。

  • min:表示热力图数据值中的最小值。在热力图中,所有小于或等于 min 的数据值都将被视为该范围的下限,通常用于确定颜色映射的起始点。
  • max:表示热力图数据值中的最大值。相应地,所有大于或等于 max 的数据值都将被视为该范围的上限,用于确定颜色映射的终点。

可以从实现的效果图中看出,热力图数据基本都是0.xx,所以我将最大值设置为1.0,如果设置的数值过大,会出现所有颜色基本一致的情况,看不出具体差异。

visualMap: {
  min: -0.75,
  max: 1.0,
  calculable: true,
  orient: 'horizontal',
  left: 'center',
  bottom: '15%',
},
series: [
  {
    name: 'Punch Card',
    type: 'heatmap',
    data: data,
    label: {
      show: true,
    },
    emphasis: {
      itemStyle: {
        shadowBlur: 10,
        shadowColor: 'rgba(0, 0, 0, 0.5)',
      },
    },
  },
],

中国地图

注册地图

在 ECharts 中,需要先注册地图类型才能使用。对于中国地图,可以使用 echarts.registerMap 方法注册地图数据。注册时,需要指定地图的名称(如china)和地图数据(即之前准备的 JSON 数据文件)。

配置地图选项

通过配置 ECharts 实例的 option 属性,可以定义地图的显示样式、数据系列、提示框、视觉映射组件(visualMap)等。对于该地图,通常需要设置地图的标题、数据系列类型为map、地图类型为china等。同时,还可以通过 series 属性中的 data 数组来设置各个省份或城市的数据,这些数据将用于控制地图上的颜色深浅或图标大小等。

渲染地图

配置完 option 属性后,调用 ECharts 实例的 setOption 方法,将配置对象传入,即可渲染出中国地图。

此时,地图将按照配置显示数据,并支持交互操作,如缩放、拖动等。

myEcharts.setOption({
  geo: {
    map: 'china', // 中国地图
    roam: true, // 是否开启放大缩小/拖拽功能
    // 地图的位置调试
    left: 150,
    top: 120,
    right: 150,
    bottom: 0,
    // 缩放比列
    zoom: 1.12,
    // 地图中心点位置
    layoutCenter: ['50%', '50%'],
    // 地图上的文字的设置
    label: {
      show: true,
      color: 'white',
      fontSize: 14,
    },
    // itemStyle地图区域的多边形图形样式
    itemStyle: {
      areaColor: '#12235c', // 地图区域的颜色
      // borderColor: '#2ab8ff', // 图形的描边颜色
      borderColor: 'rgba(147, 235, 248, 1)',
      borderWidth: 0.8,
      shadowColor: 'rgba(128, 217, 248, .8)',
      shadowOffsetX: -2,
      shadowOffsetY: 2,
      shadowBlur: 10,
      opacity: 0.9,
    },
    // 地图高亮的效果
    emphasis: {
      label: {
        color: 'white',
        fontSize: 32,
        // fontWeight: 'bold',
      },
      itemStyle: {
        // areaColor: '#5470c6',
        borderWidth: 2,
        borderType: 'dashed', // 高亮时虚线边框
      },
      // focus: 'self', // 鼠标移入地区,其余地区淡出
    },
  },
  // 布局位置
  grid: {
    left: 0,
    top: 0,
    right: 0,
    bottom: 0,
  },
  // 航线的设置
  series: [
    {
      type: 'lines', // 航线的系列
      data: [
        {
          // 北京->河南
          coords: [
            [116.405285, 39.904989], // 起点
            [113.665412, 34.757975], // 终点
          ],
        },
        {
          // 河南->北京
          coords: [
            [113.665412, 34.757975],
            [116.405285, 39.904989],
          ],
        },
        {
          // 北京->黑龙江
          coords: [
            [116.405285, 39.904989],
            [126.642464, 45.756967],
          ],
        },
        {
          // 黑龙江->北京
          coords: [
            [126.642464, 45.756967],
            [116.405285, 39.904989],
          ],
        },
        {
          // 河南->浙江
          coords: [
            [113.665412, 34.757975],
            [120.153576, 30.287459],
          ],
        },
        {
          // 浙江->河南
          coords: [
            [120.153576, 30.287459],
            [113.665412, 34.757975],
          ],
        },
        {
          // 浙江->台湾
          coords: [
            [120.153576, 30.287459],
            [121.509062, 25.044332],
          ],
        },
      ],
      // 开启动画特效
      effect: {
        show: true,
        period: 5, // 箭头指向速度,值越小速度越快
        trailLength: 0, // 特效尾迹长度[0,1]值越大,尾迹越长
        // symbol: 'arrow', // 箭头图标
        symbol: planePath, // 箭头图标使用引入的箭头
        symbolSize: 18,
      },
      // 线路统一的样式设置
      lineStyle: {
        color: '#00eaff',
        width: 1.5, // 尾迹线条宽度
        opacity: 0.7, // 尾迹线条透明度
        curveness: 0.3, // 尾迹线条曲直度
      },
    },
  ],
});

到此为止,整个大屏基本上就开发完成了!

AI 能力体验

在整个项目的开发过程中,真切体会到豆包MarsCode 内置 AI 的强大,于是单独列个模块再来介绍一下。

AI 对话视图

侧边聊天:侧边对话框(Side AI Chat)位于工作区右侧。你可以通过快捷键(macOS:+U;Windows:Ctrl+U)唤起对话框,或直接点击侧边栏中的 AI 按钮唤起。

内嵌聊天:当我们选中一段代码之后会自动弹出 AI 功能导航,可以进行代码解释、注释、生成单元测试。

代码注释:自己不想写的时候可以直接通过 AI 来生成,通过选择 YN 即可决定是否使用自动生成的注释。

使用 AI 能力

AI 问答:唤起对话框后,你可以在输入框中输入你的问题,然后点击「发送」按钮或敲击回车键,AI 助手就会对你的问题进行回答。你可以进行多轮问答,不断补充细节,从而使 AI 助手的回答更加准确。

补全代码: AI 助手支持自动补全当前代码。

总结

豆包MarsCode 编程助手是一款功能强大的开发工具,它通过集成先进的 AI 技术,为开发者提供了从代码编写到测试、维护的全流程支持。在整个开发流程中,我都真切感受到了在线开发工具的便捷、高效、流畅。对于希望提高开发效率、降低维护成本并提升软件质量的团队来说,是一个值得考虑的选择!

欢迎感兴趣的各位进一步查阅其官方文档和社区资源,更深入地了解其功能和实践。

点击「豆包MarsCode AI编程助手」即可体验豆包MarsCode~‍‍‍

打造“程序员毒舌伴侣”:用豆包MarsCode激发编程动力

thbcm阅读(350)

原标题:起猛了,编程时听到有人阴阳我

我想,我大抵是病了,

每天一想到要上班,

我的身体就像中了魔咒似的,

沉重得动弹不得。

拖延、倦怠、提不起劲,

似乎所有负面状态都在向我袭来,

内心深处仿佛在呐喊:

“要不今天就划水摸鱼算了?”

可偏偏,这种自我放纵却让我更焦虑。既然现实中没人推我一把,那我就自己搞一个 VSCode “程序员毒舌伴侣”!在我浑身班味,只想躺平时,它能用自嘲式的黑色幽默帮我满血复活。

当我想放弃时,它会适时地提醒:“你看着空白屏幕发呆的样子,还挺有艺术感的。

当我 p 人属性大爆发时,它会忍不住嘲讽:“打算拖到明年再写完这段代码吗?

当我终于完成一个艰难的任务时,它也会阴阳怪气道:“恭喜你,离下一个 bug 又近了一步!

如果你也像我一样时常需要一点推力,那就继续看下去吧,尝试用豆包MarsCode 来 DIY 一个能随时“骂醒”你的“程序员毒舌伴侣”!

前置知识

要学习和理解这个关于创建“程序员毒舌伴侣”VSCode插件的教程,你需要具备以下编程基础和技能:

编程语言和框架

VSCode 插件开发

  • VSCode API:熟悉 VSCode 扩展 API,了解如何使用 VSCode 提供的各种 API 来访问编辑器的功能,例如获取诊断信息、监听文件事件、注册命令等。
  • Yeoman 和 VSCode Extension Generator:了解如何使用 Yeoman 和 VSCode Extension Generator 来快速生成 VSCode 插件的模板项目,包括项目的结构和基本配置。

开发工具和环境

  • VSCode :熟练使用 VSCode 编辑器,了解其基本功能和插件机制。
  • 命令行工具:能够使用命令行工具(如 npm、Yeoman)来执行项目生成、依赖安装、调试等操作。推荐课程:《Linux命令行与Shell从入门到精通

其他相关知识

  • 事件监听和处理:了解如何在插件中监听和处理各种事件,例如文件创建、删除事件,窗口焦点变化事件等。
  • 音频播放库:了解如何使用第三方库(如 play-sound)来播放音频文件,并能够处理相关的错误和回调。
  • TypeScript 类型声明:了解如何为第三方库编写 TypeScript 类型声明文件(.d.ts),以便在 TypeScript 项目中正确使用这些库。

软件工程知识

  • 代码组织和注释:能够合理组织代码结构,并编写清晰的注释,以便于代码的可读性和维护性。
  • 调试技能:掌握基本的调试技能,能够使用 VSCode 的调试工具来调试插件代码,查找和修复问题。

具备以上基础和技能,将有助于你更好地理解和应用教程中的内容,从而成功地创建一个“程序员毒舌伴侣”VSCode插件。

“程序员毒舌伴侣”开发

1. 安装环境

在开发“程序员毒舌伴侣”前,完成 Node.js 和 Yeoman 及 VSCode Extension Generator 的安装:

npm install -g yo generator-code

2. 生成插件模板

使用 Yeoman 生成一个 VSCode 插件模板,按照提示完成配置。建议类型选择 TypeScript

yo code

3. 安装 play-sound

在插件中安装 play-sound 库用于播放声音。

npm install play-sound

4. 创建 sounds 文件夹

在项目根目录下创建 sounds 文件夹,用于存放需要播放的声音。

5. 编写代码

打开 src/extension.ts 文件,我们需要在这里添加、修改代码。需要注意的是,代码中播放声音的文件名需要和第 4 步存放的声音文件一致。

import * as vscode from 'vscode';
import * as path from 'path';
import play from 'play-sound';


// 创建音频播放器
const player = play({});


// 设置时间限制
const TIME_LIMIT = 30 * 1000;


// 记录窗口是否聚焦
let isWindowFocused = true;


// 记录累计活动时间的变量
let accumulatedActiveTime = 0;


export function activate(context: vscode.ExtensionContext) {
  // 注册命令
  let disposable = vscode.commands.registerCommand('extension.checkProblems', () => {
    // 获取所有诊断信息
    const allDiagnostics = vscode.languages.getDiagnostics();


    // 统计问题数量
    let problemCount = 0;
    allDiagnostics.forEach(([_, diagnostics]) => {
      problemCount += diagnostics.length;
    });


    // 如果问题数量大于 0,播放警告声音
    if (problemCount > 0) {
      playSound('a.mp3');
    } else {
      playSound('b.mp3');
    }
  });


  context.subscriptions.push(disposable);


  // 监听文件创建事件
  vscode.workspace.onDidCreateFiles(() => {
    playSound('c.mp3');
  });


  vscode.workspace.onWillDeleteFiles(() => {
    playSound('d.mp3');
  });


  // 监听窗口焦点变化事件
  vscode.window.onDidChangeWindowState((event) => {
    isWindowFocused = event.focused;
  });


  setInterval(() => {
    if (isWindowFocused) {
      accumulatedActiveTime += 5000; // 累加活动时间
      console.log('累计活动时间:', accumulatedActiveTime / 1000, '秒');
    }


    if (accumulatedActiveTime >= TIME_LIMIT) {
      playSound('e.mp3');
      accumulatedActiveTime = 0; // 重置累计活动时间
    }
  }, 5000);
}


function getProblemCount(): number {
  const allDiagnostics = vscode.languages.getDiagnostics();
  let problemCount = 0;
  allDiagnostics.forEach(([_, diagnostics]) => {
    problemCount += diagnostics.length;
  });
  return problemCount;
}


function playSound(fileName: string) {
  const soundPath = path.join(__dirname, '..', 'sounds', fileName);
  player.play(soundPath, (err) => {
    if (err) {
      console.error(`无法播放声音: ${err}`);
    }
  });
}


export function deactivate() { }

当你遇到看不懂的代码时,可以询问豆包MarsCode AI 助手

例如:

vscode.languages.getDiagnostics()的目的是什么」,AI 会告诉你,是为了获取文件的诊断信息,如警告、错误等。

如果想修改代码,也可以在编写注释后等待自动补全代码。

6. 创建 TypeScript 类型声明文件

在项目根目录下创建 typings 文件夹,并在里面创建 play-sound.d.ts 文件,编写以下代码:

declare module 'play-sound' {
  interface PlayOptions {
    player?: string;
  }


  interface Player {
    play(fileName: string, callback?: (err?: Error) => void): void;
  }


  function play(options?: PlayOptions): Player;
  export = play;
}

如果你不知道 play-sound.d.ts 文件的作用,同样可以询问豆包MarsCode AI 助手:

7. 修改配置文件

修改 package.jsontsconfig.json 文件:

// package.json 文件
{
  "name": "extension-demo",
  "displayName": "extension_demo",
  "description": "",
  "version": "0.0.1",
  "engines": {
    "vscode": "^1.92.0"
  },
  "categories": [
    "Other"
  ],
  "activationEvents": [
    "onCommand:extension.checkProblems",
    "*"
  ],
  "main": "./out/extension.js",
  "contributes": {
    "commands": [
      {
        "command": "extension-demo.helloWorld",
        "title": "Hello World"
      },
      {
        "command": "extension.checkProblems",
        "title": "Check Problems"
      }
    ]
  },
  "scripts": {
    "vscode:prepublish": "npm run compile",
    "compile": "tsc -p ./",
    "watch": "tsc -watch -p ./",
    "pretest": "npm run compile && npm run lint",
    "lint": "eslint src --ext ts",
    "test": "vscode-test"
        },
  "devDependencies": {
    "@types/mocha": "^10.0.7",
    "@types/node": "20.x",
    "@types/vscode": "^1.92.0",
    "@typescript-eslint/eslint-plugin": "^7.14.1",
    "@typescript-eslint/parser": "^7.11.0",
    "@vscode/test-cli": "^0.0.9",
    "@vscode/test-electron": "^2.4.0",
    "eslint": "^8.57.0",
    "typescript": "^5.4.5"
  },
  "dependencies": {
    "play-sound": "^1.1.6"
  }
}
// tsconfig.json 文件
{
  "compilerOptions": {
    "module": "Node16",
    "target": "ES2022",
    "outDir": "out",
    "lib": [
      "ES2022"
    ],
    "sourceMap": true,
    "rootDir": "src",
    "strict": true,
    "typeRoots": [
      "node_modules/@types",
      "typings"
    ]
  }
}

8. 调试“毒舌伴侣”

完成之后就可以开始调试我们的“毒舌伴侣”:

点击上方的运行,选择「启动调试」,启动调试后,会自动打开一个 VSCode 窗口,我们随便选择一个本地项目打开。

9. 体验“毒舌伴侣”

打开项目后,可以随意尝试创建文件、删除文件以及持续编码30秒等工作,过程中就可以感受专属“程序员毒舌伴侣”对你的“冷嘲热讽”咯,它不仅能让你告别拖延,还会让你在与自己的对话中,找到一丝久违的动力。

开发至此“毒舌伴侣” 第一版就完成了,称它为第一版,是因为它现在只支持在连续编码一段时间,以及创建文件、删除文件时鼓励你。

点击「豆包MarsCode AI编程助手」即可体验豆包MarsCode~‍‍‍

Python海龟绘图库:从入门到精通 – Python官方文档

thbcm阅读(363)

turtle — 海龟绘图

源码: Lib/turtle.py

概述

海龟绘图是对 最早在 Logo 中引入的受欢迎的几何绘图工具 的实现,它由 Wally Feurzeig, Seymour Papert 和 Cynthia Solomon 在 1967 年开发。

入门

请想象绘图区有一只机器海龟,起始位置在 x-y 平面的 (0, 0) 点。先执行 import turtle,再执行 turtle.forward(15),它将(在屏幕上)朝所面对的 x 轴正方向前进 15 像素,随着它的移动画出一条线段。再执行 turtle.right(25),它将原地右转 25 度。

Turtle star

使用海龟绘图可以编写重复执行简单动作的程序画出精细复杂的形状。

在 Python 中,海龟绘图提供了一个实体“海龟”形象(带有画笔的小机器动物),假定它在地板上平铺的纸张上画线。

对于学习者来说这是一种接触编程概念和与软件交互的高效且久经验证的方式,因为它能提供即时、可见的反馈。 它还能提供方便直观的图形输出。

海龟绘图最初是作为一种教学工具被创建的,供教师在课堂上使用。 对于需要生成一些图形输出的程序员来说这是一种无需在工作中引入更高复杂度或外部库的方式。

教程

新用户应当从这里开始。 在本教程中我们将探索海龟绘图的一些基本知识。

启动海龟环境

在 Python shell 中,导入 turtle 模块的所有对象:

from turtle import *

如果你遇到了 No module named '_tkinter' 错误,则需要在你的系统中安装 Tk 接口包

基本绘图

让海龟前进 100 步:

forward(100)

你应该会看到(最可能的情况,是在你的显示器的一个新窗口中)海龟画出一条线段,方向朝东。 改变海龟的方向,让它向左转 120 度(逆时针):

left(120)

让我们继续画一个三角形:

forward(100)
left(120)
forward(100)

注意以一个箭头表示的海龟是如何随着你的操纵指向不同方向的。

请继续尝试这些命令,还可以使用 backward()right()

画笔控制

试着改变颜色 —— 例如,color('blue') 和线宽 —— 例如,width(3) 然后再次绘制。

您也可以在不绘制线条的情况下移动海龟,即在移动前抬起画笔: up()。 要重新开始绘制,请使用 down()

海龟的位置

将海龟送回起点(这适用于海龟消失在屏幕之外的情况):

home()

初始位置在海龟屏幕的中心。 如果你需要知道具体数值,可以这样获取海龟的 x-y 坐标:

pos()

初始点在 (0, 0)

过一段时间后,也许可以考虑清空窗口这样我们就可以重新开始:

clearscreen()

使用算法绘制图案

使用循环,可以构建出各种几何图案:

for steps in range(100):
    for c in ('blue', 'red', 'green'):
        color(c)
        forward(steps)
        right(30)

– 当然,这仅受限于你的想象力!

让我们绘制本页面顶部的星形。 我们想要用红色线条,黄色填充:

color('red')
fillcolor('yellow')

就像用 up()down() 决定是否画线一样,填充也可以打开或关闭:

begin_fill()

接下来我们将创建一个循环:

while True:
    forward(200)
    left(170)
    if abs(pos()) < 1:
        break

abs(pos()) < 1 是确定海龟何时回到初始点的好办法。

最后,完成填充:

end_fill()

(请注意只有在你给出 end_fill() 命令时才会实际进行填充。)

如何…

本节介绍一些典型的海龟使用案例和操作方式。

尽快地开始

海龟绘图形的乐趣之一在于通过简单的命令就能获得即时的视觉反馈 —— 这是一种向儿童介绍编程理念的绝佳方式,而且开销最小(当然,不仅适用于儿童)。

海龟模块将其所有基本功能作为函数公开,并通过 from turtle import * 提供使这一切成为可能。 海龟绘图教程 介绍了相关的步骤。

值得注意的是许多海乌命令还有更简洁的等价形式,例如 fd() 对应 forward()。 对于不擅长打字的学习者来说这尤其有用。

你需要在系统中安装 Tk 接口软件包,才能使用海龟绘图。 请注意这并不总是很容易做到的,所以如果你打算让学习者使用海龟绘图请事先检查这一点。

使用 turtle 模块命名空间

使用 from turtle import * 是很方便 —— 但要注意它导入的对象集相当大,如果你还在做海龟绘图以外的事情就有发生名称冲突的风险(如果你在可能导入了其他模块的脚本中使用海龟绘图则可能会遇到更大的问题)。

解决办法是使用 import turtle —— fd() 将变成 turtle.fd()width() 将变成 turtle.width() 等等。 (如果反复输入“turtle”太过烦琐,还可改成 import turtle as t 等。)

在脚本中使用海龟绘图

建议使用上文所述的 turtle 模块命名空间,例如:

import turtle as t
from random import random

for i in range(100):
    steps = int(random() * 100)
    angle = int(random() * 360)
    t.right(angle)
    t.fd(steps)

但还需要另一个步骤 —— 因为一旦脚本结束,Python 将会同时关闭海龟的窗口。 请添加:

t.mainloop()

到脚本的末尾。 现在脚本将等待被关闭而不会自动退出直到被主动终止,例如海龟绘图窗口被关闭。

使用面向对象的海龟绘图

参见

面向对象接口说明

除了非常基本的入门目的,或是尽快尝试操作之外,使用面向对象的方式进行海龟绘图更为常见也更为强大。 例如,这将允许屏幕上同时存在多只海龟。

在这种方式下,各种海龟命令都是对象(主要是 Turtle 对象)的方法。 你 可以 在 shell 中使用面向对象的方法,但在 Python 脚本中使用是更为典型的做法。

这样上面的例子就将变成:

from turtle import Turtle
from random import random

t = Turtle()
for i in range(100):
    steps = int(random() * 100)
    angle = int(random() * 360)
    t.right(angle)
    t.fd(steps)

t.screen.mainloop()

请注意最后一行。 t.screen 是 Turtle 实例所在的 Screen 的实例;它是与海龟一起自动创建的。

海龟的屏幕可以被自定义,例如:

t.screen.title('Object-oriented turtle demo')
t.screen.bgcolor("orange")

海龟绘图参考

备注

以下文档给出了函数的参数列表。对于方法来说当然还有额外的第一个参数 self,这里省略了。

Turtle 方法

海龟动作
移动和绘制
forward() |
fd() 前进
backward() |
bk() |
back() 后退
right() |
rt() 右转
left() |
lt() 左转
goto() |
setpos() |
setposition() 前往/定位
teleport()
setx() 设置x坐标
sety() 设置y坐标
setheading() |
seth() 设置朝向
home() 返回原点
circle() 画圆
dot() 画点
stamp() 印章
clearstamp() 清除印章
clearstamps() 清除多个印章
undo() 撤消
speed() 速度
获取海龟的状态
position() |
pos() 位置
towards() 目标方向
xcor() x坐标
ycor() y坐标
heading() 朝向
distance() 距离
设置与度量单位
degrees() 角度
radians() 弧度
画笔控制
绘图状态
pendown() |
pd() |
down() 画笔落下
penup() |
pu() |
up() 画笔抬起
pensize() |
width() 画笔粗细
pen() 画笔
isdown() 画笔是否落下
颜色控制
color() 颜色
pencolor() 画笔颜色
fillcolor() 填充颜色
填充
filling() 是否填充
begin_fill() 开始填充
end_fill() 结束填充
更多绘图控制
reset() 重置
clear() 清空
write() 书写
海龟状态
可见性
showturtle() |
st() 显示海龟
hideturtle() |
ht() 隐藏海龟
isvisible() 是否可见
外观
shape() 形状
resizemode() 大小调整模式
shapesize() |
turtlesize() 形状大小
shearfactor() 剪切因子
tiltangle() 倾角
tilt() 倾斜
shapetransform() 变形
get_shapepoly() 获取形状多边形
使用事件
onclick() 当鼠标点击
onrelease() 当鼠标释放
ondrag() 当鼠标拖动
特殊海龟方法
begin_poly() 开始记录多边形
end_poly() 结束记录多边形
get_poly() 获取多边形
clone() 克隆
getturtle() |
getpen() 获取海龟画笔
getscreen() 获取屏幕
setundobuffer() 设置撤消缓冲区
undobufferentries() 撤消缓冲区条目数

TurtleScreen/Screen 方法

窗口控制
bgcolor() 背景颜色
bgpic() 背景图片
clearscreen()
resetscreen()
screensize() 屏幕大小
setworldcoordinates() 设置世界坐标系
动画控制
delay() 延迟
tracer() 追踪
update() 更新
使用屏幕事件
listen() 监听
onkey() |
onkeyrelease() 当键盘按下并释放
onkeypress() 当键盘按下
onclick() |
onscreenclick() 当点击屏幕
ontimer() 当达到定时
mainloop() |
done() 主循环
设置与特殊方法
mode()
colormode() 颜色模式
getcanvas() 获取画布
getshapes() 获取形状
register_shape() |
addshape() 添加形状
turtles() 所有海龟
window_height() 窗口高度
window_width() 窗口宽度
输入方法
textinput() 文本输入
numinput() 数字输入
Screen 专有方法
bye() 退出
exitonclick() 当点击时退出
setup() 设置
title() 标题

RawTurtle/Turtle 方法和对应函数

本节中的大部分示例都使用 Turtle 类的一个实例,命名为 turtle

海龟动作

turtle.
forward
(
distance
)
turtle.
fd
(
distance
)
参数
:

distance — 一个数值 (整型或浮点型)

海龟前进 distance 指定的距离,方向为海龟的朝向。

>>>

>>> turtle.position()
(0.00,0.00)
>>> turtle.forward(25)
>>> turtle.position()
(25.00,0.00)
>>> turtle.forward(-75)
>>> turtle.position()
(-50.00,0.00)
turtle.
back
(
distance
)
turtle.
bk
(
distance
)
turtle.
backward
(
distance
)
参数
:

distance — 一个数值

海龟后退 distance 指定的距离,方向与海龟的朝向相反。不改变海龟的朝向。

>>>

>>> turtle.position()
(0.00,0.00)
>>> turtle.backward(30)
>>> turtle.position()
(-30.00,0.00)
turtle.
right
(
angle
)
turtle.
rt
(
angle
)
参数
:

angle — 一个数值 (整型或浮点型)

海龟右转 angle 个单位。(单位默认为角度,但可通过 degrees()radians() 函数改变设置。) 角度的正负由海龟模式确定,参见 mode()

>>>

>>> turtle.heading()
22.0
>>> turtle.right(45)
>>> turtle.heading()
337.0
turtle.
left
(
angle
)
turtle.
lt
(
angle
)
参数
:

angle — 一个数值 (整型或浮点型)

海龟左转 angle 个单位。(单位默认为角度,但可通过 degrees()radians() 函数改变设置。) 角度的正负由海龟模式确定,参见 mode()

>>>

>>> turtle.heading()
22.0
>>> turtle.left(45)
>>> turtle.heading()
67.0
turtle.
goto
(
x,
y=None
)
turtle.
setpos
(
x,
y=None
)
turtle.
setposition
(
x,
y=None
)
参数
:
  • x — 一个数值或数值对/向量

  • y — 一个数值或 None

如果 yNonex 应为一个表示坐标的数值对或 Vec2D 类对象 (例如 pos() 返回的对象).

海龟移动到一个绝对坐标。如果画笔已落下将会画线。不改变海龟的朝向。

>>>

>>> tp = turtle.pos()
>>> tp
(0.00,0.00)
>>> turtle.setpos(60,30)
>>> turtle.pos()
(60.00,30.00)
>>> turtle.setpos((20,80))
>>> turtle.pos()
(20.00,80.00)
>>> turtle.setpos(tp)
>>> turtle.pos()
(0.00,0.00)
turtle.
teleport
(
x,
y=None,
*,
fill_gap=False
)
参数
:
  • x — 一个数值或 None

  • y — 一个数值或 None

  • fill_gap — 布尔

将海龟移到某个绝对位置。 不同于 goto(x, y),这将不会画一条线段。 海龟的方向不变。 如果当前正在填充,离开后原位置上的多边形将被填充,在移位后将再次开始填充。 这可以通过 fill_gap=True 来禁用,此设置将使在移位期间海龟的移动轨迹线像在 goto(x, y) 中一样被当作填充边缘。

>>>

>>> tp = turtle.pos()
>>> tp
(0.00,0.00)
>>> turtle.teleport(60)
>>> turtle.pos()
(60.00,0.00)
>>> turtle.teleport(y=10)
>>> turtle.pos()
(60.00,10.00)
>>> turtle.teleport(20, 30)
>>> turtle.pos()
(20.00,30.00)

Added in version 3.12.

turtle.
setx
(
x
)
参数
:

x — 一个数值 (整型或浮点型)

设置海龟的横坐标为 x,纵坐标保持不变。

>>>

>>> turtle.position()
(0.00,240.00)
>>> turtle.setx(10)
>>> turtle.position()
(10.00,240.00)
turtle.
sety
(
y
)
参数
:

y — 一个数值 (整型或浮点型)

设置海龟的纵坐标为 y,横坐标保持不变。

>>>

>>> turtle.position()
(0.00,40.00)
>>> turtle.sety(-10)
>>> turtle.position()
(0.00,-10.00)
turtle.
setheading
(
to_angle
)
turtle.
seth
(
to_angle
)
参数
:

to_angle — 一个数值 (整型或浮点型)

设置海龟的朝向为 to_angle。以下是以角度表示的几个常用方向:

标准模式

logo 模式

0 – 东

0 – 北

90 – 北

90 – 东

180 – 西

180 – 南

270 – 南

270 – 西

>>>

>>> turtle.setheading(90)
>>> turtle.heading()
90.0
turtle.
home
(
)

海龟移至初始坐标 (0,0),并设置朝向为初始方向 (由海龟模式确定,参见 mode())。

>>>

>>> turtle.heading()
90.0
>>> turtle.position()
(0.00,-10.00)
>>> turtle.home()
>>> turtle.position()
(0.00,0.00)
>>> turtle.heading()
0.0
turtle.
circle
(
radius,
extent=None,
steps=None
)
参数
:
  • radius — 一个数值

  • extent — 一个数值 (或 None)

  • steps — 一个整型数 (或 None)

绘制一个 radius 指定半径的圆。圆心在海龟左边 radius 个单位;extent 为一个夹角,用来决定绘制圆的一部分。如未指定 extent*则绘制整个圆。如果 *extent 不是完整圆周,则以当前画笔位置为一个端点绘制圆弧。如果 radius 为正值则朝逆时针方向绘制圆弧,否则朝顺时针方向。最终海龟的朝向会依据 extent 的值而改变。

圆实际是以其内切正多边形来近似表示的,其边的数量由 steps 指定。如果未指定边数则会自动确定。此方法也可用来绘制正多边形。

>>>

>>> turtle.home()
>>> turtle.position()
(0.00,0.00)
>>> turtle.heading()
0.0
>>> turtle.circle(50)
>>> turtle.position()
(-0.00,0.00)
>>> turtle.heading()
0.0
>>> turtle.circle(120, 180)  # 画一个半圆
>>> turtle.position()
(0.00,240.00)
>>> turtle.heading()
180.0
turtle.
dot
(
size=None,
*color
)
参数
:
  • size — 一个整型数 >= 1 (如果指定)

  • color — 一个颜色字符串或颜色数值元组

绘制一个直径为 size,颜色为 color 的圆点。如果 size 未指定,则直径取 pensize+4 和 2*pensize 中的较大值。

>>>

>>> turtle.home()
>>> turtle.dot()
>>> turtle.fd(50); turtle.dot(20, "blue"); turtle.fd(50)
>>> turtle.position()
(100.00,-0.00)
>>> turtle.heading()
0.0
turtle.
stamp
(
)

在海龟当前位置印制一个海龟形状。返回该印章的 stamp_id,印章可以通过调用 clearstamp(stamp_id) 来删除。

>>>

>>> turtle.color("blue")
>>> stamp_id = turtle.stamp()
>>> turtle.fd(50)
turtle.
clearstamp
(
stampid
)
参数
:

stampid — 一个整型数,必须是之前 stamp() 调用的返回值

删除 stampid 指定的印章。

>>>

>>> turtle.position()
(150.00,-0.00)
>>> turtle.color("blue")
>>> astamp = turtle.stamp()
>>> turtle.fd(50)
>>> turtle.position()
(200.00,-0.00)
>>> turtle.clearstamp(astamp)
>>> turtle.position()
(200.00,-0.00)
turtle.
clearstamps
(
n=None
)
参数
:

n — 一个整型数 (或 None)

删除全部或前/后 n 个海龟印章。如果 nNone 则删除全部印章,如果 n > 0 则删除前 n 个印章,否则如果 n < 0 则删除后 n 个印章。

>>>

>>> for i in range(8):
...     unused_stamp_id = turtle.stamp()
...     turtle.fd(30)
>>> turtle.clearstamps(2)
>>> turtle.clearstamps(-2)
>>> turtle.clearstamps()
turtle.
undo
(
)

撤消 (或连续撤消) 最近的一个 (或多个) 海龟动作。可撤消的次数由撤消缓冲区的大小决定。

>>>

>>> for i in range(4):
...     turtle.fd(50); turtle.lt(80)
...
>>> for i in range(8):
...     turtle.undo()
turtle.
speed
(
speed=None
)
参数
:

speed — 一个 0..10 范围内的整型数或速度字符串 (见下)

设置海龟移动的速度为 0..10 表示的整型数值。如未指定参数则返回当前速度。

如果输入数值大于 10 或小于 0.5 则速度设为 0。速度字符串与速度值的对应关系如下:

  • “fastest”: 0 最快

  • “fast”: 10 快

  • “normal”: 6 正常

  • “slow”: 3 慢

  • “slowest”: 1 最慢

速度值从 1 到 10,画线和海龟转向的动画效果逐级加快。

注意: speed = 0 表示 没有 动画效果。forward/back 将使海龟向前/向后跳跃,同样的 left/right 将使海龟立即改变朝向。

>>>

>>> turtle.speed()
3
>>> turtle.speed('normal')
>>> turtle.speed()
6
>>> turtle.speed(9)
>>> turtle.speed()
9

获取海龟的状态

turtle.
position
(
)
turtle.
pos
(
)

返回海龟当前的坐标 (x,y) (为 Vec2D 矢量类对象)。

>>>

>>> turtle.pos()
(440.00,-0.00)
turtle.
towards
(
x,
y=None
)
参数
:
  • x — 一个数值或数值对/矢量,或一个海龟实例

  • y — 一个数值——如果 x 是一个数值,否则为 None

返回从海龟位置到由 (x,y)、矢量或另一海龟所确定位置的连线的夹角。 此数值依赖于海龟的初始朝向,这又取决于 “standard”/”world” 或 “logo” 模式设置。

>>>

>>> turtle.goto(10, 10)
>>> turtle.towards(0,0)
225.0
turtle.
xcor
(
)

返回海龟的 x 坐标。

>>>

>>> turtle.home()
>>> turtle.left(50)
>>> turtle.forward(100)
>>> turtle.pos()
(64.28,76.60)
>>> print(round(turtle.xcor(), 5))
64.27876
turtle.
ycor
(
)

返回海龟的 y 坐标。

>>>

>>> turtle.home()
>>> turtle.left(60)
>>> turtle.forward(100)
>>> print(turtle.pos())
(50.00,86.60)
>>> print(round(turtle.ycor(), 5))
86.60254
turtle.
heading
(
)

返回海龟当前的朝向 (数值依赖于海龟模式参见 mode())。

>>>

>>> turtle.home()
>>> turtle.left(67)
>>> turtle.heading()
67.0
turtle.
distance
(
x,
y=None
)
参数
:
  • x — 一个数值或数值对/矢量,或一个海龟实例

  • y — 一个数值——如果 x 是一个数值,否则为 None

返回从海龟位置到由 (x,y),适量或另一海龟对应位置的单位距离。

>>>

>>> turtle.home()
>>> turtle.distance(30,40)
50.0
>>> turtle.distance((30,40))
50.0
>>> joe = Turtle()
>>> joe.forward(77)
>>> turtle.distance(joe)
77.0

度量单位设置

turtle.
degrees
(
fullcircle=360.0
)
参数
:

fullcircle — 一个数值

设置角度的度量单位,即设置一个圆周为多少 “度”。默认值为 360 度。

>>>

>>> turtle.home()
>>> turtle.left(90)
>>> turtle.heading()
90.0

将角度的度量单位改为梯度(grad 或称 gon,
grade 或 gradian,等于直角的 1/100。)
>>> turtle.degrees(400.0)
>>> turtle.heading()
100.0
>>> turtle.degrees(360)
>>> turtle.heading()
90.0
turtle.
radians
(
)

设置角度的度量单位为弧度。其值等于 degrees(2*math.pi)

>>>

>>> turtle.home()
>>> turtle.left(90)
>>> turtle.heading()
90.0
>>> turtle.radians()
>>> turtle.heading()
1.5707963267948966

画笔控制

绘图状态

turtle.
pendown
(
)
turtle.
pd
(
)
turtle.
down
(
)

画笔落下 — 移动时将画线。

turtle.
penup
(
)
turtle.
pu
(
)
turtle.
up
(
)

画笔抬起 — 移动时不画线。

turtle.
pensize
(
width=None
)
turtle.
width
(
width=None
)
参数
:

width — 一个正数值

设置线条的粗细为 width 或返回该值。如果 resizemode 设为 “auto” 并且 turtleshape 为多边形,该多边形也以同样组细的线条绘制。如未指定参数,则返回当前的 pensize。

>>>

>>> turtle.pensize()
1
>>> turtle.pensize(10)   # 从这里开始,画出宽度为10的线
turtle.
pen
(
pen=None,
**pendict
)
参数
:
  • pen — 一个包含部分或全部下列键的字典

  • pendict — 一个或多个以下列键为关键字的关键字参数

返回或设置画笔的属性,以一个包含以下键值对的 “画笔字典” 表示:

  • “shown”: True/False

  • “pendown”: True/False

  • “pencolor”: 颜色字符串或颜色元组

  • “fillcolor”: 颜色字符串或颜色元组

  • “pensize”: 正数值

  • “speed”: 0..10 范围内的数值

  • “resizemode”: “auto” 或 “user” 或 “noresize”

  • “stretchfactor”: (正数值, 正数值)

  • “outline”: 正数值

  • “tilt”: 数值

此字典可作为后续调用 pen() 时的参数,以恢复之前的画笔状态。另外还可将这些属性作为关键词参数提交。使用此方式可以用一条语句设置画笔的多个属性。

>>>

>>> turtle.pen(fillcolor="black", pencolor="red", pensize=10)
>>> sorted(turtle.pen().items())
[('fillcolor', 'black'), ('outline', 1), ('pencolor', 'red'),
 ('pendown', True), ('pensize', 10), ('resizemode', 'noresize'),
 ('shearfactor', 0.0), ('shown', True), ('speed', 9),
 ('stretchfactor', (1.0, 1.0)), ('tilt', 0.0)]
>>> penstate=turtle.pen()
>>> turtle.color("yellow", "")
>>> turtle.penup()
>>> sorted(turtle.pen().items())[:3]
[('fillcolor', ''), ('outline', 1), ('pencolor', 'yellow')]
>>> turtle.pen(penstate, fillcolor="green")
>>> sorted(turtle.pen().items())[:3]
[('fillcolor', 'green'), ('outline', 1), ('pencolor', 'red')]
turtle.
isdown
(
)

如果画笔落下返回 True,如果画笔抬起返回 False

>>>

>>> turtle.penup()
>>> turtle.isdown()
False
>>> turtle.pendown()
>>> turtle.isdown()
True

颜色控制

turtle.
pencolor
(
*args
)

返回或设置画笔颜色。

允许以下四种输入格式:

pencolor()

返回以颜色描述字符串或元组 (见示例) 表示的当前画笔颜色。可用作其他 color/pencolor/fillcolor 调用的输入。

pencolor(colorstring)

设置画笔颜色为 colorstring 指定的 Tk 颜色描述字符串,例如 "red""yellow""#33cc8c"

pencolor((r, g, b))

设置画笔颜色为以 r, g, b 元组表示的 RGB 颜色。r, g, b 的取值范围应为 0..colormode,colormode 的值为 1.0 或 255 (参见 colormode())。

pencolor(r, g, b)

设置画笔颜色为以 r, g, b 表示的 RGB 颜色。r, g, b 的取值范围应为 0..colormode。

如果 turtleshape 为多边形,该多边形轮廓也以新设置的画笔颜色绘制。

>>>

>>> colormode()
1.0
>>> turtle.pencolor()
'red'
>>> turtle.pencolor("brown")
>>> turtle.pencolor()
'brown'
>>> tup = (0.2, 0.8, 0.55)
>>> turtle.pencolor(tup)
>>> turtle.pencolor()
(0.2, 0.8, 0.5490196078431373)
>>> colormode(255)
>>> turtle.pencolor()
(51.0, 204.0, 140.0)
>>> turtle.pencolor('#32c18f')
>>> turtle.pencolor()
(50.0, 193.0, 143.0)
turtle.
fillcolor
(
*args
)

返回或设置填充颜色。

允许以下四种输入格式:

fillcolor()

返回以颜色描述字符串或元组 (见示例) 表示的当前填充颜色。可用作其他 color/pencolor/fillcolor 调用的输入。

fillcolor(colorstring)

设置填充颜色为 colorstring 指定的 Tk 颜色描述字符串,例如 "red""yellow""#33cc8c"

fillcolor((r, g, b))

设置填充颜色为以 r, g, b 元组表示的 RGB 颜色。r, g, b 的取值范围应为 0..colormode,colormode 的值为 1.0 或 255 (参见 colormode())。

fillcolor(r, g, b)

设置填充颜色为 r, g, b 表示的 RGB 颜色。r, g, b 的取值范围应为 0..colormode。

如果 turtleshape 为多边形,该多边形内部也以新设置的填充颜色填充。

>>>

>>> turtle.fillcolor("violet")
>>> turtle.fillcolor()
'violet'
>>> turtle.pencolor()
(50.0, 193.0, 143.0)
>>> turtle.fillcolor((50, 193, 143))  # 整数,而非浮点数
>>> turtle.fillcolor()
(50.0, 193.0, 143.0)
>>> turtle.fillcolor('#ffffff')
>>> turtle.fillcolor()
(255.0, 255.0, 255.0)
turtle.
color
(
*args
)

返回或设置画笔颜色和填充颜色。

允许多种输入格式。使用如下 0 至 3 个参数:

color()

返回以一对颜色描述字符串或元组表示的当前画笔颜色和填充颜色,两者可分别由 pencolor()fillcolor() 返回。

color(colorstring),
color((r,g,b)),
color(r,g,b)

输入格式与 pencolor() 相同,同时设置填充颜色和画笔颜色为指定的值。

color(colorstring1, colorstring2),
color((r1,g1,b1), (r2,g2,b2))

相当于 pencolor(colorstring1)fillcolor(colorstring2),使用其他输入格式的方法也与之类似。

如果 turtleshape 为多边形,该多边形轮廓与填充也使用新设置的颜色。

>>>

>>> turtle.color("red", "green")
>>> turtle.color()
('red', 'green')
>>> color("#285078", "#a0c8f0")
>>> color()
((40.0, 80.0, 120.0), (160.0, 200.0, 240.0))

另参见: Screen 方法 colormode()

填充

turtle.
filling
(
)

返回填充状态 (填充为 True,否则为 False)。

>>>

>>> turtle.begin_fill()
>>> if turtle.filling():
...    turtle.pensize(5)
... else:
...    turtle.pensize(3)
turtle.
begin_fill
(
)

在绘制要填充的形状之前调用。

turtle.
end_fill
(
)

填充上次调用 begin_fill() 之后绘制的形状。

自相交多边形或多个形状间的重叠区域是否填充取决于操作系统的图形引擎、重叠的类型以及重叠的层数。 例如上面的 Turtle 多芒星可能会全部填充为黄色,也可能会有一些白色区域。

>>>

>>> turtle.color("black", "red")
>>> turtle.begin_fill()
>>> turtle.circle(80)
>>> turtle.end_fill()

更多绘图控制

turtle.
reset
(
)

从屏幕中删除海龟的绘图,海龟回到原点并设置所有变量为默认值。

>>>

>>> turtle.goto(0,-22)
>>> turtle.left(100)
>>> turtle.position()
(0.00,-22.00)
>>> turtle.heading()
100.0
>>> turtle.reset()
>>> turtle.position()
(0.00,0.00)
>>> turtle.heading()
0.0
turtle.
clear
(
)

从屏幕中删除指定海龟的绘图。不移动海龟。海龟的状态和位置以及其他海龟的绘图不受影响。

turtle.
write
(
arg,
move=False,
align=‘left’,
font=(‘Arial’, 8, ‘normal’)
)
参数
:
  • arg — 要书写到 TurtleScreen 的对象

  • move — True/False

  • align — 字符串 “left”, “center” 或 “right”

  • font — 一个三元组 (fontname, fontsize, fonttype)

基于 align (“left”, “center” 或 “right”) 并使用给定的字体将文本 —— arg 的字符串表示形式 —— 写到当前海龟位置。 如果 move 为真值,画笔会移至文本的右下角。 默认情况下 moveFalse

>>>

>>> turtle.write("Home = ", True, align="center")
>>> turtle.write((0,0), True)

海龟状态

可见性

turtle.
hideturtle
(
)
turtle.
ht
(
)

使海龟不可见。当你绘制复杂图形时这是个好主意,因为隐藏海龟可显著加快绘制速度。

>>>

>>> turtle.hideturtle()
turtle.
showturtle
(
)
turtle.
st
(
)

使海龟可见。

>>>

>>> turtle.showturtle()
turtle.
isvisible
(
)

如果海龟显示返回 True,如果海龟隐藏返回 False

>>>

>>> turtle.hideturtle()
>>> turtle.isvisible()
False
>>> turtle.showturtle()
>>> turtle.isvisible()
True

外观

turtle.
shape
(
name=None
)
参数
:

name — 一个有效的形状名字符串

设置海龟形状为 name 指定的形状名,如未指定形状名则返回当前的形状名。name 指定的形状名应存在于 TurtleScreen 的 shape 字典中。多边形的形状初始时有以下几种: “arrow”, “turtle”, “circle”, “square”, “triangle”, “classic”。要了解如何处理形状请参看 Screen 方法 register_shape()

>>>

>>> turtle.shape()
'classic'
>>> turtle.shape("turtle")
>>> turtle.shape()
'turtle'
turtle.
resizemode
(
rmode=None
)
参数
:

rmode — 字符串 “auto”, “user”, “noresize” 其中之一

设置大小调整模式为以下值之一: “auto”, “user”, “noresize”。如未指定 rmode 则返回当前的大小调整模式。不同的大小调整模式的效果如下:

  • “auto”: 根据画笔粗细值调整海龟的外观。

  • “user”: 根据拉伸因子和轮廓宽度 (outline) 值调整海龟的外观,两者是由 shapesize() 设置的。

  • “noresize”: 不调整海龟的外观大小。

resizemode("user") 会由 shapesize() 带参数使用时被调用。

>>>

>>> turtle.resizemode()
'noresize'
>>> turtle.resizemode("auto")
>>> turtle.resizemode()
'auto'
turtle.
shapesize
(
stretch_wid=None,
stretch_len=None,
outline=None
)
turtle.
turtlesize
(
stretch_wid=None,
stretch_len=None ,
outline=None
)
参数
:
  • stretch_wid — 正数值

  • stretch_len — 正数值

  • outline — 正数值

返回或设置画笔的属性 x/y 拉伸因子和/或轮廓。 设置大小调整模式为 “user”。 当且仅当大小调整模式为 “user” 时,海龟会基于其拉伸因子调整外观: stretch_wid 为垂直于其朝向的宽度拉伸因子,stretch_len 为平行于其朝向的长度拉伸因子,outline 决定形状轮廓线的宽度。

>>>

>>> turtle.shapesize()
(1.0, 1.0, 1)
>>> turtle.resizemode("user")
>>> turtle.shapesize(5, 5, 12)
>>> turtle.shapesize()
(5, 5, 12)
>>> turtle.shapesize(outline=8)
>>> turtle.shapesize()
(5, 5, 8)
turtle.
shearfactor
(
shear=None
)
参数
:

shear — 数值 (可选)

设置或返回当前的剪切因子。根据 share 指定的剪切因子即剪切角度的切线来剪切海龟形状。 改变海龟的朝向 (移动方向)。如未指定 shear 参数: 返回当前的剪切因子即剪切角度的切线,与海龟朝向平行的线条将被剪切。

>>>

>>> turtle.shape("circle")
>>> turtle.shapesize(5,2)
>>> turtle.shearfactor(0.5)
>>> turtle.shearfactor()
0.5
turtle.
tilt
(
angle
)
参数
:

angle — 一个数值

海龟形状自其当前的倾角转动 angle 指定的角度,但 改变海龟的朝向 (移动方向)。

>>>

>>> turtle.reset()
>>> turtle.shape("circle")
>>> turtle.shapesize(5,2)
>>> turtle.tilt(30)
>>> turtle.fd(50)
>>> turtle.tilt(30)
>>> turtle.fd(50)
turtle.
tiltangle
(
angle=None
)
参数
:

angle — 一个数值 (可选)

设置或返回当前的倾角。如果指定 angle 则旋转海龟形状使其指向 angle 指定的方向,忽略其当前的倾角。 改变海龟的朝向 (移动方向)。如果未指定 angle: 返回当前的倾角,即海龟形状的方向和海龟朝向 (移动方向) 之间的夹角。

>>>

>>> turtle.reset()
>>> turtle.shape("circle")
>>> turtle.shapesize(5,2)
>>> turtle.tilt(45)
>>> turtle.tiltangle()
45.0
turtle.
shapetransform
(
t11=None,
t12=None,
t21=None,
t22=None
)
参数
:
  • t11 — 一个数值 (可选)

  • t12 — 一个数值 (可选)

  • t21 — 一个数值 (可选)

  • t12 — 一个数值 (可选)

设置或返回海龟形状的当前变形矩阵。

如未指定任何矩阵元素,则返回以 4 元素元组表示的变形矩阵。 否则就根据设置指定元素的矩阵来改变海龟形状,矩阵第一排的值为 t11, t12 而第二排的值为 t21, t22。 行列式 t11 * t22 – t12 * t21 必须不为零,否则会引发错误。 根据指定矩阵修改拉伸因子 stretchfactor, 剪切因子 shearfactor 和倾角 tiltangle。

>>>

>>> turtle = Turtle()
>>> turtle.shape("square")
>>> turtle.shapesize(4,2)
>>> turtle.shearfactor(-0.5)
>>> turtle.shapetransform()
(4.0, -1.0, -0.0, 2.0)
turtle.
get_shapepoly
(
)

返回以坐标值对元组表示的当前形状多边形。这可以用于定义一个新形状或一个复合形状的多个组成部分。

>>>

>>> turtle.shape("square")
>>> turtle.shapetransform(4, -1, 0, 2)
>>> turtle.get_shapepoly()
((50, -20), (30, 20), (-50, 20), (-30, -20))

使用事件

turtle.
onclick
(
fun,
btn=1,
add=None
)
参数
:
  • fun — 一个函数,调用时将传入两个参数表示在画布上点击的坐标。

  • btn — 鼠标按钮编号,默认值为 1 (鼠标左键)

  • addTrueFalse — 如为 True 则将添加一个新绑定,否则将取代先前的绑定

fun 指定的函数绑定到鼠标点击此海龟事件。如果 fun 值为 None,则移除现有的绑定。以下为使用匿名海龟即过程式的示例:

>>>

>>> def turn(x, y):
...     left(180)
...
>>> onclick(turn)  # 现在点击海龟将使其转向。
>>> onclick(None)  # 事件绑定将被移除
turtle.
onrelease
(
fun,
btn=1,
add=None
)
参数
:
  • fun — 一个函数,调用时将传入两个参数表示在画布上点击的坐标。

  • btn — 鼠标按钮编号,默认值为 1 (鼠标左键)

  • addTrueFalse — 如为 True 则将添加一个新绑定,否则将取代先前的绑定

fun 指定的函数绑定到在此海龟上释放鼠标按键事件。如果 fun 值为 None,则移除现有的绑定。

>>>

>>> class MyTurtle(Turtle):
...     def glow(self,x,y):
...         self.fillcolor("red")
...     def unglow(self,x,y):
...         self.fillcolor("")
...
>>> turtle = MyTurtle()
>>> turtle.onclick(turtle.glow)     # 点击turtle会将填充颜色设置为红色。
>>> turtle.onrelease(turtle.unglow) # 释放会使它变得透明
turtle.
ondrag
(
fun,
btn=1,
add=None
)
参数
:
  • fun — 一个函数,调用时将传入两个参数表示在画布上点击的坐标。

  • btn — 鼠标按钮编号,默认值为 1 (鼠标左键)

  • addTrueFalse — 如为 True 则将添加一个新绑定,否则将取代先前的绑定

fun 指定的函数绑定到在此海龟上移动鼠标事件。如果 fun 值为 None,则移除现有的绑定。

注: 在海龟上移动鼠标事件之前应先发生在此海龟上点击鼠标事件。

>>>

>>> turtle.ondrag(turtle.goto)

在此之后点击并拖动海龟可在屏幕上手绘线条 (如果画笔为落下)。

特殊海龟方法

turtle.
begin_poly
(
)

开始记录多边形的顶点。当前海龟位置为多边形的第一个顶点。

turtle.
end_poly
(
)

停止记录多边形的顶点。当前海龟位置为多边形的最后一个顶点。它将连线到第一个顶点。

turtle.
get_poly
(
)

返回最新记录的多边形。

>>>

>>> turtle.home()
>>> turtle.begin_poly()
>>> turtle.fd(100)
>>> turtle.left(20)
>>> turtle.fd(30)
>>> turtle.left(60)
>>> turtle.fd(50)
>>> turtle.end_poly()
>>> p = turtle.get_poly()
>>> register_shape("myFavouriteShape", p)
turtle.
clone
(
)

创建并返回海龟的克隆体,具有相同的位置、朝向和海龟属性。

>>>

>>> mick = Turtle()
>>> joe = mick.clone()
turtle.
getturtle
(
)
turtle.
getpen
(
)

返回海龟对象自身。唯一合理的用法: 作为一个函数来返回 “匿名海龟”:

>>>

>>> pet = getturtle()
>>> pet.fd(50)
>>> pet
<turtle.Turtle object at 0x...>
turtle.
getscreen
(
)

返回作为海龟绘图场所的 TurtleScreen 类对象。该对象将可调用 TurtleScreen 方法。

>>>

>>> ts = turtle.getscreen()
>>> ts
<turtle._Screen object at 0x...>
>>> ts.bgcolor("pink")
turtle.
setundobuffer
(
size
)
参数
:

size — 一个整型数值或 None

设置或禁用撤销缓冲区。 如果 size 为整数,则开辟一个给定大小的空撤销缓冲区。 size 给出了可以通过 undo() 方法/函数撤销海龟动作的最大次数。 如果 sizeNone,则禁用撤销缓冲区。

>>>

>>> turtle.setundobuffer(42)
turtle.
undobufferentries
(
)

返回撤销缓冲区里的条目数。

>>>

>>> while undobufferentries():
...     undo()

复合形状

要使用由多个不同颜色多边形构成的复合海龟形状,你必须明确地使用辅助类 Shape,具体步骤如下:

  1. 创建一个空 Shape 对象,类型为 “compound”。

  2. 可根据需要使用 addcomponent() 方法向此对象添加多个组件。

    例如:

    >>>

    >>> s = Shape("compound")
    >>> poly1 = ((0,0),(10,-5),(0,10),(-10,-5))
    >>> s.addcomponent(poly1, "red", "blue")
    >>> poly2 = ((0,0),(10,-5),(-10,-5))
    >>> s.addcomponent(poly2, "blue", "red")
    
  3. 接下来将 Shape 对象添加到 Screen 对象的形状列表并使用它:

    >>>

    >>> register_shape("myshape", s)
    >>> shape("myshape")
    

备注

Shape 类在 register_shape() 方法的内部以多种方式使用。应用程序编写者 只有 在使用上述的复合形状时才需要处理 Shape 类。

TurtleScreen/Screen 方法及对应函数

本节中的大部分示例都使用 TurtleScreen 类的一个实例,命名为 screen

窗口控制

turtle.
bgcolor
(
*args
)
参数
:

args — 一个颜色字符串或三个取值范围 0..colormode 内的数值或一个取值范围相同的数值3元组

设置或返回 TurtleScreen 的背景颜色。

>>>

>>> screen.bgcolor("orange")
>>> screen.bgcolor()
'orange'
>>> screen.bgcolor("#800080")
>>> screen.bgcolor()
(128.0, 0.0, 128.0)
turtle.
bgpic
(
picname=None
)
参数
:

picname — 一个字符串, gif-文件名, "nopic", 或 None

设置背景图片或返回当前背景图片名称。如果 picname 为一个文件名,则将相应图片设为背景。如果 picname"nopic",则删除当前背景图片。如果 picnameNone,则返回当前背景图片文件名。:

>>>

>>> screen.bgpic()
'nopic'
>>> screen.bgpic("landscape.gif")
>>> screen.bgpic()
"landscape.gif"
turtle.
clear
(
)

备注

此 TurtleScreen 方法作为全局函数时只有一个名字 clearscreen。全局函数 clear 所对应的是 Turtle 方法 clear

turtle.
clearscreen
(
)

从中删除所有海龟的全部绘图。将已清空的 TurtleScreen 重置为初始状态: 白色背景,无背景片,无事件绑定并启用追踪。

turtle.
reset
(
)

备注

此 TurtleScreen 方法作为全局函数时只有一个名字 resetscreen。全局函数 reset 所对应的是 Turtle 方法 reset

turtle.
resetscreen
(
)

重置屏幕上的所有海龟为其初始状态。

turtle.
screensize
(
canvwidth=None,
canvheight=None,
bg=None
)
参数
:
  • canvwidth — 正整型数,以像素表示画布的新宽度值

  • canvheight — 正整型数,以像素表示画面的新高度值

  • bg — 颜色字符串或颜色元组,新的背景颜色

如未指定任何参数,则返回当前的 (canvaswidth, canvasheight)。否则改变作为海龟绘图场所的画布大小。不改变绘图窗口。要观察画布的隐藏区域,可以使用滚动条。通过此方法可以令之前绘制于画布之外的图形变为可见。

>>>

>>> screen.screensize()
(400, 300)
>>> screen.screensize(2000,1500)
>>> screen.screensize()
(2000, 1500)

也可以用来寻找意外逃走的海龟 ;-)

turtle.
setworldcoordinates
(
llx,
lly,
urx,
ury
)
参数
:
  • llx — 一个数值, 画布左下角的 x-坐标

  • lly — 一个数值, 画布左下角的 y-坐标

  • urx — 一个数值, 画面右上角的 x-坐标

  • ury — 一个数值, 画布右上角的 y-坐标

设置用户自定义坐标系并在必要时切换模式为 “world”。这会执行一次 screen.reset()。如果 “world” 模式已激活,则所有图形将根据新的坐标系重绘。

注意: 在用户自定义坐标系中,角度可能显得扭曲。

>>>

>>> screen.reset()
>>> screen.setworldcoordinates(-50,-7.5,50,7.5)
>>> for _ in range(72):
...     left(10)
...
>>> for _ in range(8):
...     left(45); fd(2)   # 一个正八边形

动画控制

turtle.
delay
(
delay=None
)
参数
:

delay — 正整型数

设置或返回以毫秒数表示的延迟值 delay。(这约等于连续两次画布刷新的间隔时间。) 绘图延迟越长,动画速度越慢。

可选参数:

>>>

>>> screen.delay()
10
>>> screen.delay(5)
>>> screen.delay()
5
turtle.
tracer
(
n=None,
delay=None
)
参数
:
  • n — 非负整型数

  • delay — 非负整型数

启用/禁用海龟动画并设置刷新图形的延迟时间。如果指定 n 值,则只有每第 n 次屏幕刷新会实际执行。(可被用来加速复杂图形的绘制。) 如果调用时不带参数,则返回当前保存的 n 值。第二个参数设置延迟值 (参见 delay())。

>>>

>>> screen.tracer(8, 25)
>>> dist = 2
>>> for i in range(200):
...     fd(dist)
...     rt(90)
...     dist += 2
turtle.
update
(
)

执行一次 TurtleScreen 刷新。在禁用追踪时使用。

另参见 RawTurtle/Turtle 方法 speed()

使用屏幕事件

turtle.
listen
(
xdummy=None,
ydummy=None
)

设置焦点到 TurtleScreen (以便接收按键事件)。使用两个 Dummy 参数以便能够传递 listen() 给 onclick 方法。

turtle.
onkey
(
fun,
key
)
turtle.
onkeyrelease
(
fun,
key
)
参数
:
  • fun — 一个无参数的函数或 None

  • key — 一个字符串: 键 (例如 “a”) 或键标 (例如 “space”)

绑定 fun 指定的函数到按键释放事件。如果 fun 值为 None,则移除事件绑定。注: 为了能够注册按键事件,TurtleScreen 必须得到焦点。(参见 method listen() 方法。)

>>>

>>> def f():
...     fd(50)
...     lt(60)
...
>>> screen.onkey(f, "Up")
>>> screen.listen()
turtle.
onkeypress
(
fun,
key=None
)
参数
:
  • fun — 一个无参数的函数或 None

  • key — 一个字符串: 键 (例如 “a”) 或键标 (例如 “space”)

绑定 fun 指定的函数到指定键的按下事件。如未指定键则绑定到任意键的按下事件。注: 为了能够注册按键事件,必须得到焦点。(参见 listen() 方法。)

>>>

>>> def f():
...     fd(50)
...
>>> screen.onkey(f, "Up")
>>> screen.listen()
turtle.
onclick
(
fun,
btn=1,
add=None
)
turtle.
onscreenclick
(
fun,
btn=1 ,
add=None
)
参数
:
  • fun — 一个函数,调用时将传入两个参数表示在画布上点击的坐标。

  • btn — 鼠标按钮编号,默认值为 1 (鼠标左键)

  • addTrueFalse — 如为 True 则将添加一个新绑定,否则将取代先前的绑定

绑定 fun 指定的函数到鼠标点击屏幕事件。如果 fun 值为 None,则移除现有的绑定。

以下示例使用一个 TurtleScreen 实例 screen 和一个 Turtle 实例 turtle:

>>>

>>> screen.onclick(turtle.goto) # 后续对 TurtleScreen 的点击
>>>                             # 将使海龟移至被点击的位置。
>>> screen.onclick(None)        # 再次移除事件绑定

备注

此 TurtleScreen 方法作为全局函数时只有一个名字 onscreenclick。全局函数 onclick 所对应的是 Turtle 方法 onclick

turtle.
ontimer
(
fun,
t=0
)
参数
:
  • fun — 一个无参数的函数

  • t — 一个数值 >= 0

安装一个计时器,在 t 毫秒后调用 fun 函数。

>>>

>>> running = True
>>> def f():
...     if running:
...         fd(50)
...         lt(60)
...         screen.ontimer(f, 250)
>>> f()   ### 让海龟随意前进
>>> running = False
turtle.
mainloop
(
)
turtle.
done
(
)

开始事件循环 – 调用 Tkinter 的 mainloop 函数。必须作为一个海龟绘图程序的结束语句。如果一个脚本是在以 -n 模式 (无子进程) 启动的 IDLE 中运行时 不可 使用 – 用于实现海龟绘图的交互功能。:

>>>

>>> screen.mainloop()

输入方法

turtle.
textinput
(
title,
prompt
)
参数
:
  • title — string

  • prompt — string

弹出一个对话框窗口用来输入一个字符串。形参 title 为对话框窗口的标题,prompt 为一条文本,通常用来提示要输入什么信息。返回输入的字符串。如果对话框被取消则返回 None。:

>>>

>>> screen.textinput("NIM", "Name of first player:")
turtle.
numinput
(
title,
prompt,
default=None,
minval=None,
maxval=None
)
参数
:
  • title — string

  • prompt — string

  • default — 数值 (可选)

  • minval — 数值 (可选)

  • maxval — 数值 (可选)

弹出一个用于输入数值的对话框窗口。 title 是对话框窗口的标题,prompt 是通常用来描述要输入的数字信息的文本。 default: 默认值, minval: 可输入的最小值, maxval: 可输入的最大值。 如果给出 minval .. maxval 则输入的数值必须在此范围以内。 如未给出,则将发出提示并且让话框保持打开以便修正。 返回输入的数值。 如果对话框被取消,则返回 None

>>>

>>> screen.numinput("Poker", "Your stakes:", 1000, minval=10, maxval=10000)

设置与特殊方法

turtle.
mode
(
mode=None
)
参数
:

mode — 字符串 “standard”, “logo” 或 “world” 其中之一

设置海龟模式 (“standard”, “logo” 或 “world”) 并执行重置。如未指定模式则返回当前的模式。

“standard” 模式与旧的 turtle 兼容。”logo” 模式与大部分 Logo 海龟绘图兼容。”world” 模式使用用户自定义的 “世界坐标系”。注意: 在此模式下,如果 x/y 单位比率不等于 1 则角度会显得扭曲。

模式

初始海龟朝向

正数角度

“standard”

朝右 (东)

逆时针

“logo”

朝上 (北)

顺时针

>>>

>>> mode("logo")   # 将海龟重置为朝向北方
>>> mode()
'logo'
turtle.
colormode
(
cmode=None
)
参数
:

cmode — 数值 1.0 或 255 其中之一

返回 colormode 或将其设为 1.0 或 255。 后续表示三原色的 r, g, b 值必须在 0..*cmode* 范围之内。

>>>

>>> screen.colormode(1)
>>> turtle.pencolor(240, 160, 80)
Traceback (most recent call last):
     ...
TurtleGraphicsError: bad color sequence: (240, 160, 80)
>>> screen.colormode()
1.0
>>> screen.colormode(255)
>>> screen.colormode()
255
>>> turtle.pencolor(240,160,80)
turtle.
getcanvas
(
)

返回此 TurtleScreen 的 Canvas 对象。供了解 Tkinter 的 Canvas 对象内部机理的人士使用。

>>>

>>> cv = screen.getcanvas()
>>> cv
<turtle.ScrolledCanvas object ...>
turtle.
getshapes
(
)

返回所有当前可用海龟形状的列表。

>>>

>>> screen.getshapes()
['arrow', 'blank', 'circle', ..., 'turtle']
turtle.
register_shape
(
name,
shape=None
)
turtle.
addshape
(
name,
shape=None
)

调用此函数有三种不同方式:

  1. name 为一个 gif 文件的文件名, shapeNone: 安装相应的图像形状。:

    >>>

    >>> screen.register_shape("turtle.gif")
    

    备注

    当海龟转向时图像形状 不会 转动,因此无法显示海龟的朝向!

  2. name 为指定的字符串,shape 为由坐标值对构成的元组: 安装相应的多边形形状。

    >>>

    >>> screen.register_shape("triangle", ((5,-3), (0,5), (-5,-3)))
    
  3. name 为任意字符串而 shape 为 (复合) Shape 对象:安装相应的复合形状。Install the corresponding compound shape.

将一个海龟形状加入 TurtleScreen 的形状列表。只有这样注册过的形状才能通过执行 shape(shapename) 命令来使用。

turtle.
turtles
(
)

返回屏幕上的海龟列表。

>>>

>>> for turtle in screen.turtles():
...     turtle.color("red")
turtle.
window_height
(
)

返回海龟窗口的高度。:

>>>

>>> screen.window_height()
480
turtle.
window_width
(
)

返回海龟窗口的宽度。:

>>>

>>> screen.window_width()
640

Screen 专有方法, 而非继承自 TurtleScreen

turtle.
bye
(
)

关闭海龟绘图窗口。

turtle.
exitonclick
(
)

bye() 方法绑定到 Screen 上的鼠标点击事件。

如果配置字典中 “using_IDLE” 的值为 False (默认值) 则同时进入主事件循环。注: 如果启动 IDLE 时使用了 -n 开关 (无子进程),turtle.cfg 中此数值应设为 True 。在此情况下 IDLE 本身的主事件循环同样会作用于客户脚本。

turtle.
setup
(
width=_CFG[‘width’],
height=_CFG[‘height’],
startx=_CFG[‘leftright’],
starty=_CFG[‘topbottom’]
)

设置主窗口的大小和位置。默认参数值保存在配置字典中,可通过 turtle.cfg 文件进行修改。

参数
:
  • width — 如为一个整型数值,表示大小为多少像素,如为一个浮点数值,则表示屏幕的占比;默认为屏幕的 50%

  • height — 如为一个整型数值,表示高度为多少像素,如为一个浮点数值,则表示屏幕的占比;默认为屏幕的 75%

  • startx — 如为正值,表示初始位置距离屏幕左边缘多少像素,负值表示距离右边缘,None 表示窗口水平居中

  • starty — 如为正值,表示初始位置距离屏幕上边缘多少像素,负值表示距离下边缘,None 表示窗口垂直居中

>>>

>>> screen.setup (width=200, height=200, startx=0, starty=0)
>>>              # 设置窗口为 200x200 像素,位于屏幕左上角
>>> screen.setup(width=.75, height=0.5, startx=None, starty=None)
>>>              # 设置窗口宽度为屏幕的 75% 高度为屏幕的 50% 并居中
turtle.
title
(
titlestring
)
参数
:

titlestring — 一个字符串,显示为海龟绘图窗口的标题栏文本

设置海龟窗口标题为 titlestring 指定的文本。

>>>

>>> screen.title("Welcome to the turtle zoo!")

公共类

class
turtle.
RawTurtle
(
canvas
)
class
turtle.
RawPen
(
canvas
)
参数
:

canvas — 一个 tkinter.Canvas, ScrolledCanvasTurtleScreen

创建一个海龟。海龟对象具有 “Turtle/RawTurtle 方法” 一节所述的全部方法。

class
turtle.
Turtle

RawTurtle 的子类,具有相同的接口,但其绘图场所为默认的 Screen 类对象,在首次使用时自动创建。

class
turtle.
TurtleScreen
(
cv
)
参数
:

cv — 一个 tkinter.Canvas

提供面向屏幕的方法如 bgcolor() 等。 说明见上文。

class
turtle.
Screen

TurtleScreen 的子类,增加了四个方法.

class
turtle.
ScrolledCanvas
(
master
)
参数
:

master — 可容纳 ScrolledCanvas 的 Tkinter 部件,即添加了滚动条的 Tkinter-canvas

由 Screen 类使用,使其能够自动提供一个 ScrolledCanvas 作为海龟的绘图场所。

class
turtle.
Shape
(
type_,
data
)
参数
:

type_ — 字符串 “polygon”, “image”, “compound” 其中之一

实现形状的数据结构。(type_, data) 必须遵循以下定义:

type_

data

“polygon”

一个多边形元组,即由坐标值对构成的元组

“image”

一个图片 (此形式仅限内部使用!)

“compound”

None (复合形状必须使用 addcomponent() 方法来构建)

addcomponent
(
poly,
fill,
outline=None
)
参数
:
  • poly — 一个多边形,即由数值对构成的元组

  • fill — 一种颜色,将用来填充 poly 指定的多边形

  • outline — 一种颜色,用于多边形的轮廓 (如有指定)

示例:

>>>

>>> poly = ((0,0),(10,-5),(0,10),(-10,-5))
>>> s = Shape("compound")
>>> s.addcomponent(poly, "red", "blue")
>>> # ... 添加更多组件,然后使用 register_shape()

参见 复合形状

class
turtle.
Vec2D
(
x,
y
)

一个二维矢量类,用来作为实现海龟绘图的辅助类。也可能在海龟绘图程序中使用。派生自元组,因此矢量也属于元组!

提供的运算 (a, b 为矢量, k 为数值):

  • a + b 矢量加法

  • a - b 矢量减法

  • a * b 内积

  • k * aa * k 与标量相乘

  • abs(a) a 的绝对值

  • a.rotate(angle) 旋转

说明

海龟对象在屏幕对象上绘图,在 turtle 的面向对象接口中有许多关键的类可被用于创建它们并将它们相互关联。

Turtle 实例将自动创建一个 Screen 实例,如果它还未创建的话。

TurtleRawTurtle 的子类,它 不会 自动创建绘图区域 —— 需要为其提供或创建一个 canvascanvas 可以是一个 tkinter.Canvas, ScrolledCanvas TurtleScreen

TurtleScreen 是基本的海龟绘图区域。 ScreenTurtleScreen 的子类,并包括 一些额外方法 用来管理其外观(包括大小和标题)及行为。 TurtleScreen 的构造器需要一个 tkinter.CanvasScrolledCanvas 作为参数。

海龟绘图形的函数式接口使用 TurtleTurtleScreen/Screen 的各种方法。 在下层,每当从 Screen 方法派生的函数被调用时就会自动创建一个屏幕对象。 同样地,每当从 Turtle 方法派生的函数被调用时也都会自动创建一个 Turtle 对象。

要在一个屏幕中使用多个海龟,就必须使用面向对象的接口。

帮助与配置

如何使用帮助

Screen 和 Turtle 类的公用方法以文档字符串提供了详细的文档。因此可以利用 Python 帮助工具获取这些在线帮助信息:

  • 当使用 IDLE 时,输入函数/方法调用将弹出工具提示显示其签名和文档字符串的头几行。

  • 对文法或函数调用 help() 将显示其文档字符串:

    >>>

    >>> help(Screen.bgcolor)
    Help on method bgcolor in module turtle:
    
    bgcolor(self, *args) unbound turtle.Screen method
        Set or return backgroundcolor of the TurtleScreen.
    
        Arguments (if given): a color string or three numbers
        in the range 0..colormode or a 3-tuple of such numbers.
    
    
        >>> screen.bgcolor("orange")
        >>> screen.bgcolor()
        "orange"
        >>> screen.bgcolor(0.5,0,0.5)
        >>> screen.bgcolor()
        "#800080"
    
    >>> help(Turtle.penup)
    Help on method penup in module turtle:
    
    penup(self) unbound turtle.Turtle method
        Pull the pen up -- no drawing when moving.
    
        Aliases: penup | pu | up
    
        No argument
    
        >>> turtle.penup()
    
  • 方法对应函数的文档字符串的形式会有一些修改:

    >>>

    >>> help(bgcolor)
    Help on function bgcolor in module turtle:
    
    bgcolor(*args)
        Set or return backgroundcolor of the TurtleScreen.
    
        Arguments (if given): a color string or three numbers
        in the range 0..colormode or a 3-tuple of such numbers.
    
        Example::
    
          >>> bgcolor("orange")
          >>> bgcolor()
          "orange"
          >>> bgcolor(0.5,0,0.5)
          >>> bgcolor()
          "#800080"
    
    >>> help(penup)
    Help on function penup in module turtle:
    
    penup()
        Pull the pen up -- no drawing when moving.
    
        Aliases: penup | pu | up
    
        No argument
    
        Example:
        >>> penup()
    

这些修改版文档字符串是在导入时与方法对应函数的定义一起自动生成的。

文档字符串翻译为不同的语言

可使用工具创建一个字典,键为方法名,值为 Screen 和 Turtle 类公共方法的文档字符串。

turtle.
write_docstringdict
(
filename=‘turtle_docstringdict’
)
参数
:

filename — 一个字符串,表示文件名

创建文档字符串字典并将其写入 filename 指定的 Python 脚本文件。此函数必须显示地调用 (海龟绘图类并不使用此函数)。文档字符串字典将被写入到 Python 脚本文件 filename.py。该文件可作为模板用来将文档字符串翻译为不同语言。

如果你 (或你的学生) 想使用本国语言版本的 turtle 在线帮助,你必须翻译文档字符串并保存结果文件,例如 turtle_docstringdict_german.py .

如果你在 turtle.cfg 文件中加入了相应的条目,此字典将在导入模块时被读取并替代原有的英文版文档字符串。

在撰写本文档时已经有了德语和意大利语版的文档字符串字典。(更多需求请联系 glingl@aon.at)

如何配置 Screen 和 Turtle

内置的默认配置是模仿旧 turtle 模块的外观和行为,以便尽可能地与其保持兼容。

如果你想使用不同的配置,以便更好地反映此模块的特性或是更适合你的需求,例如在课堂中使用,你可以准备一个配置文件 turtle.cfg,该文件将在导入模块时被读取并根据其中的设定修改模块配置。

内置的配置对应了下面的 turtle.cfg:

width = 0.5
height = 0.75
leftright = None
topbottom = None
canvwidth = 400
canvheight = 300
mode = standard
colormode = 1.0
delay = 10
undobuffersize = 1000
shape = classic
pencolor = black
fillcolor = black
resizemode = noresize
visible = True
language = english
exampleturtle = turtle
examplescreen = screen
title = Python Turtle Graphics
using_IDLE = False

选定条目的简短说明:

  • 开头的四行对应了 Screen.setup 方法的参数。

  • 第 5 和第 6 行对应于 Screen.screensize 方法的参数。

  • shape 可以是任何内置形状,即: arrow, turtle 等。更多信息可用 help(shape) 查看。

  • 如果你想使用无填充色(即让海龟变透明),则你必须写 fillcolor = "" (但在but all nonempty strings must not have quotes in the cfg 文件中所有非空字符串都不可加引号)。

  • 如果你想令海龟反映其状态,你必须使用 resizemode = auto

  • 例如当你设置了 language = italian 则文档字符串字典 turtle_docstringdict_italian.py 将在导入时被加载(如果它存在于导入路径,即与 turtle 相同的目录中)。

  • exampleturtleexamplescreen 条目定义了相应对象在文档字符串中显示的名称。方法文档字符串转换为函数文档字符串时将从文档字符串中删去这些名称。

  • using_IDLE: 如果你经常使用 IDLE 及其 -n 开关选项(”无子进程”)则将此项设为 True。 这将阻止 exitonclick() 进入主事件循环。

turtle.cfg 文件可以保存于 turtle 所在目录,当前工作目录也可以有一个同名文件。后者会重载覆盖前者的设置。

Lib/turtledemo 目录中也有一个 turtle.cfg 文件。你可以将其作为示例进行研究,并在运行演示时查看其作用效果 (但最好不要在演示查看器中运行)。

turtledemo — 演示脚本集

turtledemo 包汇集了一组演示脚本。这些脚本可以通过以下命令打开所提供的演示查看器运行和查看:

python -m turtledemo

此外,你也可以单独运行其中的演示脚本。例如,:

python -m turtledemo.bytedesign

turtledemo 包目录中的内容:

  • 一个演示查看器 __main__.py,可用来查看脚本的源码并即时运行。

  • 多个脚本文件,演示 turtle 模块的不同特性。所有示例可通过 Examples 菜单打开。也可以单独运行每个脚本。

  • 一个 turtle.cfg 文件,作为说明如何编写并使用模块配置文件的示例模板。

演示脚本清单如下:

名称

描述

相关特性

bytedesign

复杂的传统海龟绘图模式

tracer(), delay, update()

chaos

绘制 Verhulst 动态模型,演示通过计算机的运算可能会生成令人惊叹的结果

世界坐标系

clock

绘制模拟时钟显示本机的当前时间

海龟作为表针, ontimer

colormixer

试验 r, g, b 颜色模式

ondrag() 当鼠标拖动

forest

绘制 3 棵广度优先树

随机化

fractalcurves

绘制 Hilbert & Koch 曲线

递归

lindenmayer

文化数学 (印度装饰艺术)

L-系统

minimal_hanoi

汉诺塔

矩形海龟作为汉诺盘 (shape, shapesize)

nim

玩经典的“尼姆”游戏,开始时有三堆小棒,与电脑对战。

海龟作为小棒,事件驱动 (鼠标, 键盘)

paint

超极简主义绘画程序

onclick() 当鼠标点击

peace

初级技巧

海龟: 外观与动画

penrose

非周期性地使用风筝和飞镖形状铺满平面

stamp() 印章

planet_and_moon

模拟引力系统

复合开关, Vec2D

rosette

一个来自介绍海龟绘图的维基百科文章的图案

clone(), undo()

round_dance

两两相对并不断旋转舞蹈的海龟

复合形状, clone shapesize, tilt, get_shapepoly, update

sorting_animate

动态演示不同的排序方法

简单对齐, 随机化

tree

一棵 (图形化的) 广度优先树 (使用生成器)

clone() 克隆

two_canvases

简单设计

两块画布上的海龟

yinyang

另一个初级示例

circle() 画圆

祝你玩得开心!

Python 2.6 之后的变化

  • Turtle.tracer, Turtle.window_width Turtle.window_height 等方法已被去除。 具有这些名称和功能的方法现在只限于作为 Screen 的方法。 自这些方法派生的函数仍保持可用。 (实际上在 Python 2.6 中这些方法就已经只是对应 TurtleScreen/Screen 方法的副本了。)

  • Turtle.fill() 方法已被去除。 begin_fill()end_fill() 的行为则有细微改变:现在每个填充过程必须以一个 end_fill() 调用来结束。

  • 增加了一个 Turtle.filling 方法。 该方法返回一个布尔值:如果填充过程正在运行则为 True,否则为 False 。 此行为对应于 Python 2.6 中一个不带参数的 fill() 调用。

Python 3.0 之后的变化

  • 增加了 Turtle 方法 shearfactor() , shapetransform()get_shapepoly()。 这样就可以使用所有的常规线性变换来改变海龟形状。 tiltangle() 的功能已得到加强:现在它可以被用来获取或设置倾斜角度。

  • 增加了 Screen 方法 onkeypress() 作为 onkey() 的补充。 当后者将动作绑定到松开按键事件时,还将为它添加一个别名: onkeyrelease()

  • 增加了 Screen.mainloop 方法,这样在操作 ScreenTurtle 对象时就无需再使用单独的 mainloop() 函数。

  • 增加了两个输入方法: Screen.textinputScreen.numinput。 这两个方法会弹出输入对话框接受输入并分别返回字符串和数字。 These pop up input dialogs and return strings and numbers respectively.

  • 两个新的示例脚本 tdemo_nim.pytdemo_round_dance.py 被加入到 Lib/turtledemo 目录中。

Cursor AI:革命性的AI编程助手,重塑传统开发模式

thbcm阅读(329)

在当今科技飞速发展的时代,一款名为Cursor AI的智能编程助手正在悄然改变软件开发的面貌。这款融合了人工智能技术的代码编辑器,不仅继承了Visual Studio Code的强大功能,还加入了尖端的AI技术,成为程序员的得力助手。让我们一起深入了解这个正在重塑编程体验的革命性工具。

智能编程新纪元:全面解析Cursor AI

从VS Code到AI助手:Cursor AI的进化之路

Cursor AI的诞生,标志着编程工具迈入了全新的智能时代。它在保留VS Code优秀界面和功能的基础上,巧妙地融入了先进的AI技术。这种结合不仅让Cursor AI保持了熟悉的操作体验,还为开发者带来了前所未有的智能辅助。想象一下,你拥有一个既懂编程又精通多种编程语言的AI助手,它不仅能帮你写代码,还能理解你的需求,甚至预测你的下一步操作。这就是Cursor AI带来的革命性体验。

核心功能大揭秘:智能编码背后的AI魔力

Cursor AI的核心魔力源自其强大的AI引擎。它利用GPT-4、Claude 3.5等大型语言模型,提供了一系列令人惊叹的功能:

  1. 智能代码生成与补全:仿佛有了一个懂你心意的编程搭档,Cursor AI能根据上下文自动补全代码,甚至可以根据你的自然语言描述生成完整的代码片段。
  2. 自然语言交互:你可以用日常对话的方式与Cursor AI沟通,描述你的需求,它就能理解并转化为相应的代码。这个功能特别适合编程新手,大大降低了入门门槛。
  3. 实时反馈与调试:Cursor AI就像一个尽职尽责的代码审查员,实时分析你的代码,指出潜在问题,并给出改进建议。它不仅能发现语法错误,还能提供性能优化的建议.
  4. 多语言支持与项目整合:无论你是Python爱好者、JavaScript大神还是Java专家,Cursor AI都能成为你的得力助手。它支持多种主流编程语言,并能深入理解整个项目结构,提供全局性的支持.

多语言支持与团队协作:Cursor AI的全能表现

在当今复杂的软件开发环境中,Cursor AI展现出了惊人的适应能力。它不仅精通多种编程语言,还能深度理解整个代码库,提供上下文感知的智能建议。这意味着,无论你是在编写前端JavaScript,还是在调试后端Python代码,Cursor AI都能给出恰到好处的帮助。更令人惊喜的是,Cursor AI在团队协作方面也表现出色。它支持多文件处理和实时协作功能,让团队成员可以无缝地在同一个项目中工作。想象一下,当你在编写一个复杂的函数时,Cursor AI不仅能提供代码建议,还能智能地引用团队其他成员编写的相关模块,这无疑大大提高了团队的整体效率.

Cursor AI实战应用:从入门到精通

新手福音:自然语言编程让coding不再难

对于编程新手来说,Cursor AI无疑是一个福音。它的自然语言编程功能,让编码变得像日常对话一样简单。例如,你可以告诉Cursor AI:”我需要一个函数来计算圆的面积“,它就能立即生成相应的代码。这种方式不仅降低了学习门槛,也加快了学习进度。一位刚接触编程的大学生分享道:”使用Cursor AI后,我感觉自己的编程技能突飞猛进。它就像一个随时待命的编程导师,帮我解决各种疑难杂症.

提升开发效率:Cursor AI助力复杂项目管理

对于经验丰富的开发者来说,Cursor AI则是提升效率的利器。在处理大型复杂项目时,Cursor AI的智能代码补全和上下文感知功能尤其有用。它能快速理解项目结构,提供准确的代码建议,甚至预测你的下一步操作。一位资深后端工程师表示:”Cursor AI极大地提高了我的工作效率。特别是在处理legacy code时,它能快速理解代码逻辑,帮我定位问题,这节省了大量时间.

安全与隐私:Cursor AI如何保护你的代码资产

在享受便利的同时,安全和隐私问题自然是开发者最关心的。Cursor AI在这方面做出了令人满意的表现。它提供了隐私模式,确保用户的代码不会被存储或泄露。此外,Cursor AI还通过了SOC 2认证,这意味着它在数据安全和隐私保护方面达到了行业标准。”作为一家处理敏感数据的金融科技公司,我们对工具的安全性要求很高。Cursor AI的隐私保护措施让我们可以放心使用它的强大功能,而不必担心数据泄露风险。“一位金融科技公司的CTO如是说.

点击《Cursor AI中文教程》免费学习。

未来已来:Cursor AI引领编程新趋势

AI编程助手的市场格局:Cursor AI的独特优势

在AI编程助手市场中,Cursor AI凭借其独特的功能组合和用户友好的界面,正迅速崭露头角。与其他同类产品相比,Cursor AI的优势在于:

  1. 深度整合VS Code生态系统,降低用户学习成本
  2. 强大的自然语言处理能力,支持更自然的人机交互
  3. 灵活的AI模型选择,满足不同用户的需求
  4. 完善的团队协作功能,适应现代软件开发流程

这些特点使Cursor AI在竞争激烈的市场中脱颖而出,赢得了越来越多开发者的青睐.

技术与人性的平衡:Cursor AI的持续进化

Cursor AI的发展理念是在提供强大功能的同时,始终保持对用户需求的敏感。它不断优化自然语言理解能力,使人机交互更加流畅自然。同时,Cursor AI也在不断完善其个性化推荐系统,让每个用户都能获得量身定制的编程体验。一位经常使用Cursor AI的全栈开发者评价道:”我最欣赏Cursor AI的是,它在变得越来越智能的同时,始终保持了对人性化需求的关注。它不是要取代程序员,而是成为我们的得力助手.”

展望未来:Cursor AI对软件开发行业的深远影响

随着AI技术的不断进步,Cursor AI等智能编程工具必将对软件开发行业产生深远影响。我们可以预见:

  1. 编程效率的大幅提升,加速软件开发周期
  2. 编程门槛的降低,吸引更多人进入这个行业
  3. 代码质量的整体提高,减少bug和安全漏洞
  4. 开发者角色的转变,从繁琐的编码工作中解放出来,更多地关注创新和问题解决

Cursor AI的出现,标志着我们正在进入一个AI辅助编程的新时代。它不仅改变了我们编写代码的方式,更在重塑整个软件开发行业。面对这样一个充满机遇和挑战的未来,开发者们需要保持开放和学习的心态,与AI工具共同成长,共创编程的美好未来.

Git:程序员必备的版本控制利器

thbcm阅读(328)

在软件开发的世界里,有一个工具几乎无人不知、无人不晓,它就是Git——一个强大而优雅的分布式版本控制系统。无论你是刚入门的编程新手,还是经验丰富的老兵,Git都是你不可或缺的得力助手。今天,让我们一起揭开Git的神秘面纱,了解这个改变了整个软件开发生态的重要工具。

Git的诞生:从Linux内核到全球开发者的选择

Linus Torvalds的天才创意

2005年,Linux之父Linus Torvalds面临着一个棘手的问题:如何更好地管理Linux内核的开发?当时使用的BitKeeper因为许可证问题不再适用,Linus决定亲自操刀,打造一个全新的版本控制系统。就这样,Git诞生了。 Linus对Git的设计目标很明确:快速、简单、多分支、完全分布式、能够管理类似Linux内核一样的超大规模项目。短短几周内,Git的第一个版本就诞生了,并很快被用于Linux内核的开发中。

为什么Git迅速成为主流?

Git之所以能够迅速崛起,主要有以下几个原因:

  1. 分布式架构:每个开发者都拥有完整的代码仓库,不依赖中央服务器。
  2. 高效性能:即使对于大型项目,Git也能保持极快的速度。
  3. 数据完整性:Git使用SHA-1哈希算法确保数据的完整性。
  4. 强大的分支管理:创建和合并分支的操作非常快速和简单。 正是这些优秀的特性,使得Git很快超越了SVN等传统版本控制系统,成为了开源社区和众多企业的首选。

Git的核心优势:分布式版本控制的魔力

高效的本地操作

使用Git,你可以在没有网络连接的情况下进行绝大多数操作。提交更改、创建分支、查看历史记录——这些都可以在本地完成,快速而高效。

强大的分支管理

Git的分支管理是其最强大的特性之一。创建一个新分支就像创建一个指向某个提交的轻量级可移动指针。这意味着你可以轻松地进行实验性开发,而不会影响主分支的稳定性。

完整的版本历史

Git保存的是文件的完整历史记录,而不仅仅是文件的变化。这意味着你可以轻松地回到项目的任何一个时间点,查看当时的完整代码状态。

开启你的Git学习之旅

基础知识快速入门

学习Git,最好的方式是边学边练。以下是一些基本概念和操作,可以帮助你快速入门:

  1. 仓库(Repository):你的整个项目文件夹。
  2. 提交(Commit):保存你的文件变化。
  3. 分支(Branch):独立的开发线。
  4. 合并(Merge):把不同分支的修改合并到一起。

点击《Git 基础课程》立即开始学习~

进阶技巧和最佳实践

掌握了基础知识后,你可以进一步学习一些进阶技巧:

  1. 使用Git Flow工作流管理复杂项目。
  2. 学习如何处理合并冲突。
  3. 利用Git Hook自动化你的工作流程。

点击《后端技能树【Linux+Docker+Git】》立即开始学习~

学习Git是一个循序渐进的过程,需要不断的实践和总结。好消息是,我们为你准备了一个完整的Git基础课程——《Git 基础课程》,帮助你系统地掌握这个强大工具。 《Git 基础课程》课程包含7个单元的知识点,涵盖了Git的核心概念和常用操作。无论你是想提高工作效率,还是为了更好地参与开源项目,这门课程都将是你的得力助手。 如果在学习过程中遇到任何问题,欢迎联系我们的客服(微信号:w3cschool66)。加入我们的学习交流群,你还可以和其他学习者一起讨论问题,分享经验。 现在,就让我们一起开启Git学习之旅,成为版本控制的高手吧!

点击下载编程狮App,随时随地学习Git >>

联系我们