中秋节之Python绘制许愿树和月饼(打开程序员世界的大门)

本文涉及的产品
函数计算FC,每月15万CU 3个月
简介: 中秋节之Python绘制许愿树和月饼(打开程序员世界的大门)

一、利用Python编写的中秋许愿树

https://blog.csdn.net/lzhcoder/article/details/126629828?spm=1001.2014.3001.5502

中秋许愿树

import turtle
import random
def love(x, y):  # 在(x,y)处画爱⼼
    lv = turtle.Turtle()
    lv.hideturtle()
    lv.up()
    lv.goto(x, y)  # 定位到(x,y)
    def curvemove():
        for i in range(20):
            lv.right(10)
            lv.forward(2)
    lv.color('red', 'pink')
    lv.speed(10000000)
    lv.pensize(1)
    lv.down()
    lv.begin_fill()
    lv.left(160)
    lv.forward(22)
    curvemove()
    lv.left(120)
    curvemove()
    lv.forward(22)
    lv.write("中秋节快乐", font=("Arial", 12, "normal"), align="center")  # 写上表⽩的⼈的名字
    lv.left(140)  # 画完复位
    lv.end_fill()
def tree(branchLen, t):
    if branchLen > 5:
        if branchLen < 20:
            t.color("green")
            t.pensize(random.uniform((branchLen + 5) / 4 - 2, (branchLen + 6) / 4 + 5))
            t.down()
            t.down()
            t.forward(branchLen)
            love(t.xcor(), t.ycor())  # 传输现在turtle的坐标
            t.up()
            t.backward(branchLen)
            t.color("brown")
            return
        t.pensize(random.uniform((branchLen + 5) / 4 - 2, (branchLen + 6) / 4 + 5))
        t.down()
        t.forward(branchLen)
        # 以下递归
        ang = random.uniform(15, 45)
        t.right(ang)
        tree(branchLen - random.uniform(12, 16), t)  # 随机决定减⼩长度
        t.left(2 * ang)
        tree(branchLen - random.uniform(12, 16), t)  # 随机决定减⼩长度
        t.right(ang)
        t.up()
        t.backward(branchLen)
myWin = turtle.Screen()
t = turtle.Turtle()
t.hideturtle()
t.speed(1000)
t.left(90)
t.up()
t.backward(200)
t.down()
t.color("brown")
t.pensize(32)
t.forward(60)
tree(100, t)
myWin.exitonclick()

二、自定义中秋月饼绘制

from numpy import sin, cos, pi
import matplotlib.pyplot as plt
from matplotlib.patches import Arc, Circle, Wedge
from matplotlib.font_manager import FontProperties
num=5
list={'红色':'red','黄色':'yellow','淡蓝':'lightcyan','粉红':'pink','绿色':'greenyellow','橘子色':'orange','天空蓝':'aqua',
      '土黄色':'wheat','紫色':'deeppink','灰色':'lightgrey','深黄色':'orangered','深紫色':'orchid'}                    #颜色的样式
class MoonCake():                           #定义一个类
    def __init__(self,pattern,center,roundt,edge,sector,largefan,largefan_0,blessing,blessing_0,number):      #对数据进行封装
        self.pattern = pattern             #月饼边缘花纹的颜色
        self.center = center               #月饼主体圆,边的颜色
        self.roundt = roundt               #月饼主体圆实部的颜色
        self.edge =edge                    #请输入4个大的扇形花纹的颜色
        self.sector = sector               #请输入4个大的扇形花纹实部的颜色
        self.largefan = largefan           #请输入4个小的扇形花纹的颜色
        self.largefan_0 = largefan_0       #请输入4个小的扇形花纹实部的颜色
        self.blessing = blessing           #请输入祝福语
        self.blessing_0 = blessing_0       #请输入祝福语的颜色
        self.number = number               #请输入保存图片的序号
    def lucky(self):
        length = 20
        R = 3**0.5*length/(3**0.5*cos(pi/12)-sin(pi/12))
        r = 2*sin(pi/12)*R/3**0.5
        arc1 = Arc([0, length], width=2*r, height=2*r,
                   angle=0, theta1=30, theta2=150, ec=str(self.pattern),linewidth=4)                #ec为线条颜色,fc为填充颜色,可以自由替换
        arc2 = Arc([-length/2, length/2*3**0.5], width=2*r, height=2*r,
                   angle=0, theta1=60, theta2=180, ec=str(self.pattern), linewidth=4)
        arc3 = Arc([-length/2*3**0.5, length/2], width=2*r, height=2*r,
                   angle=0, theta1=90, theta2=210, ec=str(pattern), linewidth=4)
        arc4 = Arc([-length, 0], width=2*r, height=2*r, angle=0, theta1=120, theta2=240, ec=str(self.pattern),linewidth=4)     #ec为线条颜色,fc为填充颜色,可以自由替换
        arc5 = Arc([-length/2*3**0.5, -length/2], width=2*r, height=2*r,
                   angle=0, theta1=150, theta2=270, ec=str(self.pattern), linewidth=4)
        arc6 = Arc([-length/2, -length/2*3**0.5], width=2*r, height=2*r,
                   angle=0, theta1=180, theta2=300, ec=str(self.pattern), linewidth=4)
        arc7 = Arc([0, -length], width=2*r, height=2*r, angle=0, theta1=210, theta2=330, ec=str(self.pattern),linewidth=4)
        arc8 = Arc([length/2, -length/2*3**0.5], width=2*r, height=2*r,
                   angle=0, theta1=240, theta2=360, ec=str(self.pattern), linewidth=4)
        arc9 = Arc([length/2*3**0.5, -length/2], width=2*r, height=2*r,
                   angle=0, theta1=270, theta2=390, ec=str(self.pattern), linewidth=4)
        arc10 = Arc([length, 0], width=2*r, height=2*r, angle=0, theta1=300, theta2=420, ec=str(self.pattern), linewidth=4)
        arc11 = Arc([length/2*3**0.5, length/2], width=2*r, height=2*r,
                    angle=0, theta1=330, theta2=450, ec=str(self.pattern), linewidth=4)
        arc12 = Arc([length/2, length/2*3**0.5], width=2*r, height=2*r,
                    angle=0, theta1=0, theta2=120, ec=str(self.pattern), linewidth=4)
        circle = Circle((0,0), R, ec=str(self.center), fc=str(self.roundt), linewidth=4)
        wedge1 = Wedge([-2, 2], R-5, 90, 180,
                       ec=str(self.edge), fc=str(self.sector), linewidth=4)
        wedge2 = Wedge([-5, 5], R-12, 90, 180, ec=str(self.largefan),
                       fc=str(self.largefan_0), linewidth=4)                             #ec为线条颜色,fc为填充颜色,可以自由替换
        wedge3 = Wedge([-2, -2], R-5, 180, 270, ec=str(self.edge),
                       fc=str(self.sector), linewidth=4)
        wedge4 = Wedge([-5, -5], R-12, 180, 270, ec=str(self.largefan),
                       fc=str(self.largefan_0), linewidth=4)
        wedge5 = Wedge([2, -2], R-5, 270, 360, ec=str(self.edge),
                       fc=str(self.sector), linewidth=4)
        wedge6 = Wedge([5, -5], R-12, 270, 360, ec=str(self.largefan),
                       fc=str(self.largefan_0), linewidth=4)
        wedge7 = Wedge([2, 2], R-5, 0, 90, ec=str(self.edge),                            #ec为线条颜色,fc为填充颜色,可以自由替换
                       fc=str(self.sector), linewidth=4)
        wedge8 = Wedge([5, 5], R-12, 0, 90, ec=str(self.largefan),
                       fc=str(self.largefan_0), linewidth=4)
        art_list = [arc1, arc2, arc3, arc4, arc5, arc6, arc7, arc8, arc9, arc10, arc11, arc12]
        art_list.extend([circle, wedge1, wedge2, wedge3, wedge4, wedge5, wedge6, wedge7, wedge8])
        fig, ax = plt.subplots(figsize=(8,8))
        ax.set_aspect('equal')
        for a in art_list:
            ax.add_patch(a)
        plt.axis('off')
        font_set = FontProperties(fname=r"Alibaba-PuHuiTi-Medium.ttf", size=15)
        plt.text(-8.4, -7,'中秋\n快乐', bbox=dict(boxstyle='circle', fc="skyblue", ec='red', linewidth=4), fontproperties=font_set,   fontsize=50, color='yellow') ##ec为线条颜色,color为字体颜色,可以自由替换
        plt.text(-43, -33, str(self.blessing),fontproperties=font_set, fontsize=30, color=str(self.blessing_0))
        plt.ylim([-35, 35])
        plt.xlim([-35, 35])
        name='tset'+str(number)+'.png'      #生成图片序号
        plt.savefig(name)                   #保存图片
        plt.show()
while num:                                                     #根据需要自己可以决定制作几个月饼
    print('选择颜色,选择颜色输入一定要正确{}'.format(list))
    print('不选择我给出的颜色也可以,你自定义选择的颜色输入一定要准确\n')              #输入的格式一定要正确,不然会错
    print('')
    pattern = input('请输入月饼边缘花纹的颜色:')                  #制作月饼,并输入参数
    center = input('请输入月饼主体圆,边的颜色:')
    roundt = input('请输入月饼主体圆实部的颜色:')
    edge = input('请输入4个大的扇形花纹的颜色:')
    sector = input('请输入4个大的扇形花纹实部的颜色:')
    largefan = input('请输入4个小的扇形花纹的颜色:')
    largefan_0 = input('请输入4个小的扇形花纹实部的颜色:')
    blessing = input('请输入祝福语:')
    blessing_0 = input('请输入祝福语的颜色:')
    number = int(input('请输入保存图片的序号:'))
    num = int(input('输入数字0结束月饼制作:'))
    good=MoonCake(pattern,center,roundt,edge,sector,largefan,largefan_0,blessing,blessing_0,number)
    good.lucky()

字体下载地址:

http://tianchi-media.oss-cn-beijing.aliyuncs.com/DSW/Python/miniproject/01_draw_moon_cake/Alibaba-PuHuiTi-Medium.ttf

静下心来写代码需要”精神力量“。精神的探究有丰富的理论支撑,这里不再累述有兴趣的同学们可以去翻阅相关书籍下面是摘抄的一段:

人们已经把世界的有形实体细化到了极致,已经看透它的内部构造。从分子到原子,再从原子到量子。接下来我们要做的事情就是把精神细分,找到精神的量子。安布罗斯·佛莱明爵士说:“能量,就其终极本质而言,只有当它表现为我们所说的‘精神’或‘意志’而运转时,方可被我们所理解。


相关实践学习
【文生图】一键部署Stable Diffusion基于函数计算
本实验教你如何在函数计算FC上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。函数计算提供一定的免费额度供用户使用。本实验答疑钉钉群:29290019867
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
相关文章
|
2月前
|
存储 大数据 索引
解锁Python隐藏技能:构建高效后缀树Suffix Tree,处理大数据游刃有余!
通过构建高效的后缀树,Python程序在处理大规模字符串数据时能够游刃有余,显著提升性能和效率。无论是学术研究还是工业应用,Suffix Tree都是不可或缺的强大工具。
48 6
|
2月前
|
大数据 UED 开发者
实战演练:利用Python的Trie树优化搜索算法,性能飙升不是梦!
在数据密集型应用中,高效搜索算法至关重要。Trie树(前缀树/字典树)通过优化字符串处理和搜索效率成为理想选择。本文通过Python实战演示Trie树构建与应用,显著提升搜索性能。Trie树利用公共前缀减少查询时间,支持快速插入、删除和搜索。以下为简单示例代码,展示如何构建及使用Trie树进行搜索与前缀匹配,适用于自动补全、拼写检查等场景,助力提升应用性能与用户体验。
55 2
|
2月前
|
存储 算法 数据挖掘
高效文本处理新纪元:Python后缀树Suffix Tree,让数据分析更智能!
在大数据时代,高效处理和分析文本信息成为关键挑战。后缀树作为一种高性能的数据结构,通过压缩存储字符串的所有后缀,实现了高效的字符串搜索、最长公共前缀查询等功能,成为文本处理的强大工具。本文探讨Python中后缀树的应用,展示其在文本搜索、重复内容检测、最长公共子串查找、文本压缩及智能推荐系统的潜力,引领数据分析迈入新纪元。虽然Python标准库未直接提供后缀树,但通过第三方库或自定义实现,可轻松利用其强大功能。掌握后缀树,即掌握开启文本数据宝藏的钥匙。
52 5
|
2月前
|
存储 开发者 Python
从理论到实践:Python中Trie树与Suffix Tree的完美结合,开启编程新篇章!
在编程领域,高效的数据结构对于解决问题至关重要。本文通过一个案例分析,介绍如何在Python中结合使用Trie树(前缀树)和Suffix Tree(后缀树)。案例聚焦于开发具备高效拼写检查和文本相似度检测功能的文本编辑器。首先,通过构建Trie树快速检查单词是否存在;接着,利用Suffix Tree检测文本相似度。尽管Python标准库未直接提供Suffix Tree,但可通过第三方库或自定义实现。本文展示了高级数据结构在实际应用中的强大功能,并强调了理论与实践相结合的重要性。
43 1
|
2月前
|
存储 算法 Python
逆袭之路:掌握Python字典树Trie与后缀树,成为技术圈的耀眼新星!
在编程的征途上,每个人都渴望成为那个能够独当一面、解决复杂问题的技术高手。而掌握高级数据结构,如字典树(Trie)与后缀树(Suffix Tree),无疑是你逆袭路上的重要一步。这些数据结构不仅能够提升你的编码技能,还能让你在解决特定问题时游刃有余,从而在技术圈中脱颖而出,成为那颗耀眼的新星。
33 1
|
2月前
|
存储 算法 搜索推荐
Python进阶必备:字典树Trie与后缀树Suffix Array,效率提升的神器!
在Python编程中,掌握高效的数据结构对于提升程序性能至关重要。本文将深入探讨两种强大的字符串处理数据结构——字典树(Trie)与后缀数组(Suffix Array)。字典树,又称前缀树,适用于自动补全和拼写检查等功能。例如,在文本编辑器中实现自动补全时,字典树能够即时提供单词补全选项。后缀数组则用于存储字符串的所有后缀并按字典序排序,结合最长公共前缀(LCP)数组,可以高效解决许多字符串问题,如查找最长重复子串等。通过实际案例,我们将展示这两种数据结构的强大功能,帮助你在Python编程中更进一步。
54 2
|
2月前
|
算法 程序员 Python
程序员必看!Python复杂度分析全攻略,让你的算法设计既快又省内存!
在编程领域,Python以简洁的语法和强大的库支持成为众多程序员的首选语言。然而,性能优化仍是挑战。本文将带你深入了解Python算法的复杂度分析,从时间与空间复杂度入手,分享四大最佳实践:选择合适算法、优化实现、利用Python特性减少空间消耗及定期评估调整,助你写出高效且节省内存的代码,轻松应对各种编程挑战。
41 1
|
2月前
|
存储 算法 索引
从菜鸟到大神:一文带你彻底搞懂Python中的后缀树Suffix Tree奥秘!
在Python编程中,后缀树是一种高效的数据结构,特别适用于处理复杂的字符串问题,如搜索、最长公共前缀查询及最长重复子串查找等。本文通过问答形式介绍后缀树的基本概念、重要性及其实现方法。后缀树能显著提高字符串处理效率,将传统方法的时间复杂度从O(nm)降至接近O(m)。尽管其构建过程较复杂,但通过手动编写代码或使用第三方库,我们可以在Python中实现这一强大工具。后缀树的应用广泛,涵盖字符串搜索、压缩、生物信息学等多个领域,学习它不仅能帮助解决实际问题,更能提升算法思维和数据结构设计能力。
71 1
|
3月前
|
Python
Python笔下那些神奇的树
Python笔下那些神奇的树
|
3月前
|
设计模式 JSON 程序员
豆瓣评分9.4!Python程序员必读的《流畅的Python》,放这里了!
Python 官方教程的开头是这样写的:“Python 是一门既容易上手又强大的编程语言。””这句话本身并无大碍,但需要注意的是,正因为它既好学又好用,所以很多Python程序员只用到了其强大功能的一小部分,只需要几个小时,经验丰富的程序员就能学会用 Python 写出实用的程序。 然而随着这最初高产的几个小时变成数周甚至数月,在那些先入为主的编程语言的影响下,开发者们会慢慢地写出带着“口音”的 Python 代码。即便 Python 是你的初恋,也难逃此命运。因为在学校里,亦或是那些入门书上,教授者往往会有意避免只跟语言本身相关的特性。