P小二 P小二
← 返回文章 公众号 约 5 分钟

中秋节,我们用Python代码做个五仁月饼吧

今天中秋节,FlyPython在这里祝大家中秋快乐。身为程序猿,也了解到今天也是程序猿日,做什么好呢?我们就来学习用Python程序来做个月饼吧。

今天中秋节,FlyPython在这里祝大家中秋快乐。身为程序猿,也了解到今天也是程序猿日,做什么好呢?我们就来学习用Python程序来做个月饼吧。

今天中秋节,FlyPython在这里祝大家中秋快乐。身为程序猿,也了解到今天也是

先从网上搜到一张月饼图片:

先从网上搜到一张月饼图片

我们就按照这个图的轮廓来画一个简单的月饼图。

首先,我们需要熟悉Turtle。

Python的Turtle又叫海龟作图,它功能强大,使用方便。简单来说,就是给你有一块空白,以中央为原点,画条横轴x,纵轴y,然后一只小乌龟以(0,0)作为起点,开始按照函数的指令来爬行,爬行的过程中会出现轨迹,还可以将爬行的地方填充一下颜色。这样,一个图形就出现了。

官方中文文档 : https://docs.python.org/zh-cn/3.7/library/turtle.html#module-turtle

这里我们先画轮廓。

Turtle提供了circle()函数来画圆,我们分析月饼的基本轮廓。

Turtle提供了circle()函数来画圆,我们分析月饼的基本轮廓。

由上图知道,由一个大圆和十几个小的半圆组成。

先画中间的大圆:

def draw_circle(r): tt.penup() tt.goto(0, -r) tt.seth(0) tt.pendown() tt.pensize(5) tt.color(‘#FF7F00’) tt.circle(r)


再画小半圆:

- -
- -
- -
- -
- -
- -
- -
- - ```
def draw_petal(r, n):    tt.penup()    tt.goto(0, -r)    tt.seth(0)    tt.pendown()    small_r = math.sin( math.pi/n) * r        for i in range(n):        tt.penup()        tt.home()        tt.seth((360/n)*i)        tt.fd(r)        tt.left((360/n)*0.5)        tt.pendown()        tt.circle(small_r,180)

 

入口函数调用:

def draw(): draw_circle(100) draw_petal(100,10)


效果:

![入口函数调用](https://img.pxiaoer.blog/wechat/9346c1843a6e03f4.png)

看原图发现小半圆和大圆并不是直接接触的,我们需要调整一下距离。然后在里面添加一个正方形

- -
- -
- -
- -
- - ```
def draw_square(d, r):    tt.penup()    tt.seth(0)    tt.goto(d/2 + r, -d/2)    tt.left(90)    tt.pendown()        for i in range(4):        tt.fd(d)        tt.circle(r, 90)

入口函数变为:

def draw(): draw_circle(100) draw_petal(120,10) draw_square(100,10) tt.done()


效果如下:

![效果如下](https://img.pxiaoer.blog/wechat/2dd08097910790c3.jpg)

在正方形里面写字:

- -
- -
- - ```
def draw_word(word, x, y):    tt.penup()    tt.goto(x, y)    tt.pendown()    tt.write(word, font=("微软雅黑",35, "normal"))

最终的效果:

最终的效果

我们还可以进行颜色填充,最终效果如下:

我们还可以进行颜色填充,最终效果如下

最后完整代码链接:

https://github.com/flypythoncom/flypython 

也可以点击阅读原文查看。

再次祝大家中秋节快乐,程序员日快乐,欢迎多多关注FlyPython,长按下面二维码关注我们。

再次祝大家中秋节快乐,程序员日快乐,欢迎多多关注FlyPython,长按下面二维