python123创意绘画_Turtle 创意绘画

article/2025/1/18 10:50:03

303210bb1074fe73de55b7ee74c4eeaa.png

前言最初来自于 Wally Feurzig 和 Seymour Papert 于 1966 年所创造的 Logo 编程语言

可以通过相关的指令, 轻松地绘制出精美的形状和图案

可以培养学习计算机的兴趣, 以一种娱乐的方式了解计算机的趣味

Python 海龟创意绘画, Turtle库创作精美图画

通过阅读本文, 你可以学习到LSystem的应用和掌握绘制一些图形 , 有关介绍: https://en.wikipedia.org/wiki/L-system

turtle库 基础教程

个人推荐看官方的文档, https://docs.python.org/zh-cn/3/library/turtle.html

turtle文字的应用

一个很简单的随机文字from turtle import *

import random

str_ = """

守一段情 念一个人。

时光不老 我们不散。

厮守终生 不离不弃。

天暗下来 你就是光。

亡魂溺海 止于终老。

生死挈阔 与子成说。

柔情似水 佳期如梦。

我中有你 你中有我。

青山不老 为雪白头。

心若向阳 无畏悲伤。

一人一心 白首不离。

心如荒岛 囚我终老。

我的世界 只有你懂。

你若安好 便是晴天。

心有灵犀 一点就通。

厮守海角 非你不娶。

执子的手 漫漫的走。

执子之手 与子偕老。

山河拱手 为君一笑。

红尘初妆 山河无疆。

千秋功名 一世葬你。

既不回头 何必不忘。

既然无缘 何须誓言。

今日种种 似水无痕。

明夕何夕 君已陌路。

才会相思 便害相思。

人来人往 繁华似锦。

回首万年 情衷伊人。

生能尽欢 死亦无憾。

执手若无 泪溅花上。

花开花落 人世无常。

入我心者 待以君王。

为醉而醉 似醉非醉。

伤心鸿影 爱已惘然。

只要你要 只要我有。

日久生情 日久情疏。

忧佳相随 风雨无悔。

有生之年 誓死娇宠

引喻山河 指日可诚。

水上鸳鸯 云中翡翠。

天荒地老 海誓山盟。

生则同襟 死则同穴。

生有此女 夫复何求""".split("。")

setup(1280,720)  # 设置窗口大小

colormode(255)  # 使用的颜色模式, 整数还是小数

up()

a, b = -500, 280

goto(a,b)

bgcolor("black")

down()

def w(str_,b):

bgcolor( random.randint(0,255),random.randint(0,255),random.randint(0,255))  # 随机生成RGB值, 每次调用函数改变背景颜色

for i in range(len(str_)):

up()

goto(a+100*i,b)

down()

size =  random.randint(12,68)  # 随机字体大小

color( random.randint(0,255),random.randint(0,255),random.randint(0,255))  # 随机字体颜色

write(str_[i], align="center",font=("楷体",size))

for k in range(4):

for i in range(7):

w(str_[i+7*k],b-100*i)

reset()  # 清屏

for i in range(7):

w(str_[i+7*4],b-100*i)

35e618f06d778c4e41706bdb6194eac5.png

简单的图形例子

主要是通过改变角度和位置偏移, 做出各种效果from turtle import *

speed(0)

bgcolor("white")

pencolor("MediumAquamarine")

h = 10

for j in range(360):

for i in range(4):

forward(h)

right(90)

right(3)

h = h*1.01

039b1b13acfb6cd2a67db89cec85e327.png

Lsystem 的应用

实质是通过不断变换规则, 绘制出各种发杂图形

以下符号字符的几何解释。#字符含义1F按行绘制一条线向前移动

2f按线条长度向前移动而不绘制线条

3+通过转动角度向左转动

4-通过转动角度向右转动

5/反向(即:转动180度)

6[将当前绘图状态推入堆栈

7]从堆栈弹出当前绘图状态

8#按线宽增量增加线宽

9!通过线宽增量减小线宽

10@绘制带有线宽半径的点

12}关闭多边形并用填充颜色填充

13

14>将线长除以线长比例因子

15&交换+和 - 的含义

16(通过转动角度增量减小转动角度

17)通过转动角度增量来增加转动角度

18{打开多边形函数介绍

draw_path(length, angle, path, expalnation)length ---->每次行走的距离

angle  ---->偏移的角度

path  ---->初始路径图案,即0阶的形状

expalnation  ---->用来记录打印每一步操作

主要用来绘制海龟行走路径

apply_rules(path, rules)path  ---->初始路径图案,即0阶的形状

rules ---->转换的规则

主要是转换每一阶段的path

getColor()提供一个随机rgb值

initialization()初始化各种参数

Introduction(x=-600, y=-350)默认海龟初始位置(-600,-350)

注解

run(n,angle,length,path,rules)

启动程序

实现如下:# -*- coding: utf-8 -*-

# Time    : 2019/4/5 22:20

# Author  : Mifen

# Email   : 2952277346@qq.com

# Github  : https://github.com/Amd794

import time

import turtle as t

from turtle import *

setup(1280,720)

t.speed(0)

t.pensize(1)

length = 5

path = 'FX'

angle = 25

up()

color("#262626;")

goto(-600, 300)

write('Author:Mifen', font=("微软雅黑", 18))

goto(-600, 250)

write('E-mail :2952277346@qq.com', font=("微软雅黑", 18))

goto(-600, 200)

write('Code :https://github.com/Amd794/Python123', font=("微软雅黑", 18))

goto(-600, -350)

down()

expalnation = {

'F': '画线',

'x': '-',

'+': '逆时针旋转',

'-': '顺时针旋转',

'[': '记录当前位置',

']': '恢复上一个位置',

'a': '上色',

'b': '上色',

'c': '上色'

}

rules = {

'F': 'aFF-[b-F+F]+[c+F-F]',

'X': 'aFF+[b+F]+[c-F]'

}

def draw_path(path, expalnation):

posList, angleList = [], []

t.up()

t.goto(0, -350)

t.down()

t.lt(90)

for symbol in path:

if symbol == 'F':

t.forward(length)

elif symbol == '+':

t.left(angle)

elif symbol == '-':

t.rt(angle)

elif symbol == '[':

posList.append(t.pos())

angleList.append(t.heading())

elif symbol == 'a':

t.pensize(3)

t.color("#8c503c")

elif symbol == 'b':

t.pensize(2)

t.color("#4ab441")

elif symbol == 'c':

t.pensize(2)

t.color("#18b418")

elif symbol == ']':

t.up()

t.home()

t.goto(posList.pop())

t.left(angleList.pop())

t.down()

def apply_rules(path, rules):

L = [_ for _ in path]

for i in range(len(L)):

symbol = L[i]

if symbol == 'F':

L[i] = rules[symbol]

if symbol == 'X':

L[i] = rules[symbol]

path = ''.join(L)

return path

for _ in range(5):

path = apply_rules(path, rules)

draw_path(path, expalnation)

综合:# -*- coding: utf-8 -*-

# Time    : 2019/4/6 22:45

# Author  : Mifen

# Email   : 2952277346@qq.com

# Github  : https://github.com/Amd794

from turtle import *

import time

import turtle as t

def gotopos(x, y):

up()

goto(x, y)

down()

ht()

def author():

pensize(2)

gotopos(610, -315)

lt(-90)

fd(80)

pensize(1)

lt(-270)

gotopos(525, -330)

color("#772a2b")

write("Mifen", font=("华文隶书", 24))

gotopos(409, -360)

write("2952277346@qq.com", font=("华文隶书", 18))

gotopos(250, -390)

write("https://github.com/Amd794/Python123", font=("华文隶书", 18))

def apply_rules(path, rules):

L = [_ for _ in path]

for i in range(len(L)):

symbol = L[i]

if symbol == 'F':

L[i] = rules[symbol]

if symbol == 'X':

L[i] = rules[symbol]

path = ''.join(L)

return path

def draw_path(path):

posList, angleList = [], []

for symbol in path:

if symbol == 'F':

t.forward(length)

elif symbol == '+':

t.left(angle)

elif symbol == '-':

t.rt(angle)

elif symbol == '[':

posList.append(t.pos())

angleList.append(t.heading())

elif symbol == 'a':

t.pensize(3)

t.color("#867b68")

elif symbol == 'b':

t.pensize(2)

t.color("#867b68")

elif symbol == 'c':

t.pensize(2)

t.color("#867b68")

elif symbol == ']':

t.up()

t.home()

t.goto(posList.pop())

t.left(angleList.pop())

t.down()

def writez(x, y, str_, size=56, font="华文行楷"):

gotopos(x, y)

write(str_, font=(font, size))

setup(1280, 800)

speed(5)

bgcolor("#9c917f")

color("#afa697")

begin_fill()

gotopos(0, -400)

circle(400)

end_fill()

author()

color("#7d776d")

s = "愿天化作比翼鸟"

s2 = "在地愿为连理枝"

for i in range(len(s)):

writez(560, 350 - i * 50, s[i], 36)

for i in range(len(s2)):

writez(460, 350 - i * 50, s2[i], 36)

color("#888475")

writez(-50, 100, "我")

writez(-50, 40, "的")

writez(-160, 0, "心", 96)

writez(-50, 0, "月", 176)

writez(33, -30, "代", 62)

writez(-18, -95, "表", 78)

writez(-213, -210, "亮", 196)

gotopos(249, -26)

color("#867b68")

speed(0)

gotopos(-650, -100)

length = 6

path = 'F'

angle = 27

rules = {

'F': 'aFF[b-F++F][c+F--F]c++F--F',

'X': 'aFF+[b+F]+[c-F]'

}

for _ in range(4):

path = apply_rules(path, rules)

draw_path(path)

gotopos(570, -330)

done()

1ee25c8f8e3f60793746ed130378dcce.png

5051b5cab49207eb16105732b9399bc6.png


http://chatgpt.dhexx.cn/article/BNZ1Gk9C.shtml

相关文章

Python之turtle库画各种有趣的图及源码(更新中)

Turtle库是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x、纵轴为y的坐标系原点,(0,0)位置开始,它根据一组函数指令的控制,在这个平面坐标系中移动,从而在它爬行的路径上绘制了图…

编写代码、打印图4-2所示的图形python_Python之turtle库画各种有趣的图及源码(更新中)_一个超会写Bug的程序猿的博客-CSDN博客...

原文作者:一个超会写Bug的安太狼 原文标题:Python之turtle库画各种有趣的图及源码(更新中) 发布时间:2021-02-09 03:35:11 Turtle库是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x、纵轴为…

【回血赠书第4期】9月新书不一般,你涨知识我买单

你的书架,由我承包 读书的baby,读书的baby 你想学的新技术,我都能接轨 本期书讯高能满满是干货的积累 让九月新书来做你最踏实的堡垒 1 《弹性计算:无处不在的算力(全彩)》 2 《阿里云天池大赛赛题解析…

【回血赠书第6期】拯救吃圭人,不剁手也能实现11月新书自由!

你的书架,由我承包 这次双11也太可怕了吧! 付两次尾款,收两波快递,吃两次土 好端端的“吃土人”今年也晋升成了“吃圭人” 不过别担心,就算是吃圭人 博文菌也能帮你实现读书自由! 回血赠书第六期联合11月书…

关于推荐算法未来的思考:推荐诗与远方

关于推荐算法未来的思考:推荐诗与远方 2021年8月27日,国家互联网信息办公室发布了关于《互联网信息服务算法推荐管理规定(征求意见稿)》公开征求意见的通知。 其中第十五条规定: 算法推荐服务提供者应当向用户提供不针对其个人特…

工作流引擎开发系列一基础知识

在现在的很多业务系统中都要用到工作流的,比如说办公软件,评审软件。最近公司需要开发一款工作流引擎,利用数据库做依托,到目前阶段基本上都已经完成了。呵呵,本人也不太喜欢说文字,接下来就简单介绍下基础…

用友T3自动备份不成功解决办法

环境描述: 操作系统:Windows Server 2008R2 SP1 / Windows Server 2012 R2 数据库:SQL 2008 R2 SP3 软件版本:T3-标准版10.8Plus2 with 最新增量补丁包 问题描述: 手工备份一切正常,设置自动备份计划任务&a…

WPF学习:4.类型转换和标记扩展

在上一章,主要介绍了Border和Brush,这一章主要介绍下类型转换和标记扩展。相关代码链接如下: http://files.cnblogs.com/keylei203/4.WPFSampleDemo.zip Type Converter 在XAML中,所有的对象都是字符串,XAML解析器通过…

排序--Bubble的优化和性能(算法时间、空间复杂度、稳定性)分析

一、算法基本思想 (1)基本思想 冒泡排序的基本思想就是:从无序序列头部开始,进行两两比较,根据大小交换位置,直到最后将最大(小)的数据元素交换到了无序队列的队尾,从而…

Git查看分支创建时间

实际应用中,可能需要准确知道指定分支的创建时间。 代码实例如下: git reflog show --dateiso mastergit reflog show --dateiso #######[Shell] 纯文本查看 复制代码 1 $ git reflog show --dateiso master 代码运行效果截图如下: 可以…

git怎样查看分支关系图

git log --oneline --graph --decorate --all

git中查看全部分支的命令

现在介绍一个超级实用、使用频率极高但几乎所有 Git 教程都不重视的命令 git branch -avv,它用来查看全部分支信息: 上图有三行信息,依次说明: 第一行,开头的星号表示当前所在分支,绿色的 master 是分支名&#xff0c…

git 命令查看分支的创建者是谁

在你的工程目录下 打开终端,输入一下命令即可 git log --oneline master | cut -d " " -f 1 | tail -1 | xargs git log 如上图所示, Author 就是创建者,Date 就是创建日期。“提交项目”这个描述是最初我创建分支的备注

git查看当前分支是基于哪个分支拉取

命令: git reflog show --datelocal | grep 当前分支名举例:比如当前分支为develop,那么命令如下: git reflog show --datelocal | grep develop查询结果如下: 在最后一条记录,可以看到信息为&#xff1…

git如何查看分支

如何查看分支 git branch -vvgit如何切换分支 git checkout branch_name查看远程分支 git branch -a查看本地分支 git branch创建分支 git branch test切换分支到test git checkout test删除本地分支 git branch -d xxxxx查看本地和远程分支 -a 前面带*号的代表你当前工…

git如何查看分支的创建人

背景: 项目初期建立了两个模块的分支,后续多模块开发结束,回看代码整理分支的时候发现以前的分支不记得是否为自己所创,为了不误删别人的分支,此时就需要知道这些分支到底是谁建立的.问题: git如何查看分支的创建人?解决: 我是使用sourceTree进行git管理, 解决这个问题核心的就…

Git查看分支从哪个分支创建的

使用命令 Git查看分支创建时间 git reflog show --dateiso <branch name> 如果是feature分支 git reflog show --dateiso feature/设备小程序 提交多的话&#xff0c;按回车滚动到最后一条 最后一条是创建时间 不过一般我们需要的是远程的&#xff0c;分支名加上or…

Git查看分支的创建人

开发小组人多的时候&#xff0c;仓库里会有跟多分支&#xff0c;需要看下某个分支具体是谁创建的。 命令&#xff1a; git for-each-ref --format%(committerdate) %09 %(authorname) %09 %(refname) | sort -k5n -k2M -k3n -k4n输出如下&#xff1a; 有个缺点是日期中的月份…

如何用git查看分支

1 首先从github&#xff0c;gitblit&#xff0c;gitee上下载的项目文件都有一个隐藏的.git文件&#xff0c;先让这个隐藏文件显示出来。在查看里将隐藏的项目勾上。 2 通过vscode打开 3 现在要查看本地仓库的分支用下面这个命令 git branch 4 现在查看远程仓库的分支是在哪个…

【Git】 常用命令速查

一、 Git 常用命令速查 git branch 查看本地所有分支 git status 查看当前状态 git commit 提交 git branch -a 查看所有的分支 git branch -r 查看远程所有分支 git commit -am "init" 提交并且加注释 git remote add origin git192.168.1.119:ndshow git push o…