python绘制“月亮代表我的心”

在这里插入图片描述
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)
pensize(1)
lt(-270)
gotopos(450, -350)
color(“#7d776d”)
write(“”, font=(“华文隶书”, 24))

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(“white”)#9c917f
color(“yellow”)
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, 300 - 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()

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值