turtle是一隻神奇的小海龜,可以畫出大千世界。而turtle加入了python大家族,像是如龜得水,變得更加受歡迎。
很多人學習python,不知道從何學起。
很多人學習python,掌握了基本語法過後,不知道在哪裏尋找案例上手。
很多已經做案例的人,卻不知道如何去學習更加高深的知識。
那麼針對這三類人,我給大家提供一個好的學習平臺,免費領取視訊教學,電子書籍,以及課程的原始碼!
QQ羣:101677771
古人有詩雲「庭中有奇樹,綠葉發華滋」,樹之美,或婀娜、或繁茂、或蒼勁、或青翠。python-turtle筆下的樹更是別有一番風味。
# coding=gbk
import turtle as T
import random
import time
# 畫櫻花的軀幹(60,t)
def Tree(branch, t):
time.sleep(0.0005)
if branch > 3:
if 8 <= branch <= 12:
if random.randint(0, 2) == 0:
t.color('snow') # 白
else:
t.color('lightcoral') # 淡珊瑚色
t.pensize(branch / 3)
elif branch < 8:
if random.randint(0, 1) == 0:
t.color('snow')
else:
t.color('lightcoral') # 淡珊瑚色
t.pensize(branch / 2)
else:
t.color('sienna') # 赭(zhě)色
t.pensize(branch / 10) # 6
t.forward(branch)
a = 1.5 * random.random()
t.right(20 * a)
b = 1.5 * random.random()
Tree(branch - 10 * b, t)
t.left(40 * a)
Tree(branch - 10 * b, t)
t.right(20 * a)
t.up()
t.backward(branch)
t.down()
# 掉落的花瓣
def Petal(m, t):
for i in range(m):
a = 200 - 400 * random.random()
b = 10 - 20 * random.random()
t.up()
t.forward(b)
t.left(90)
t.forward(a)
t.down()
t.color('lightcoral') # 淡珊瑚色
t.circle(1)
t.up()
t.backward(a)
t.right(90)
t.backward(b)
# 繪圖區域
t = T.Turtle()
# 畫布大小
w = T.Screen()
# 隱藏畫筆
t.hideturtle()
t.getscreen().tracer(5, 0)
# wheat小麥
w.screensize(bg='white')
t.left(90)
t.up()
t.backward(150)
t.down()
t.color('sienna')
# 畫櫻花的軀幹
Tree(60, t)
# 掉落的花瓣
Petal(200, t)
w.exitonclick()
# coding=gbk
from turtle import *
from random import *
from math import *
class Tree:
def __init__(self):
setup(1000, 500)
bgcolor(1, 1, 1) # 背景色
# ht() # 隱藏turtle
speed(10) # 速度 1-10漸進,0 最快
# tracer(1, 100) # 設定繪圖螢幕重新整理頻率,參數1設定在正常重新整理頻次的第參數1次重新整理,參數2設定每次重新整理的時延
tracer(0, 0)
pu() # 擡筆
backward(100)
# 保證筆觸箭頭方向始終不向下,此處使其左轉90度,而不是右轉
left(90) # 左轉90度
backward(300) # 後退300
def tree(self, n, l):
pd() # 下筆
# 陰影效果
t = cos(radians(heading() + 45)) / 8 + 0.25
pencolor(t, t, t)
pensize(n / 1.2)
forward(l) # 畫樹枝
if n > 0:
b = random() * 15 + 10 # 右分支偏轉角度
c = random() * 15 + 10 # 左分支偏轉角度
d = l * (random() * 0.25 + 0.7) # 下一個分支的長度
# 右轉一定角度,畫右分支
right(b)
self.tree(n - 1, d)
# 左轉一定角度,畫左分支
left(b + c)
self.tree(n - 1, d)
# 轉回來
right(c)
else:
# 畫葉子
right(90)
n = cos(radians(heading() - 45)) / 4 + 0.5
pencolor(n, n * 0.8, n * 0.8)
fillcolor(n, n * 0.8, n * 0.8)
begin_fill()
circle(3)
left(90)
end_fill()
# 新增0.3倍的飄落葉子
if random() > 0.7:
pu()
# 飄落
t = heading()
an = -40 + random() * 40
setheading(an)
dis = int(800 * random() * 0.5 + 400 * random() * 0.3 + 200 * random() * 0.2)
forward(dis)
setheading(t)
# 畫葉子
pd()
right(90)
n = cos(radians(heading() - 45)) / 4 + 0.5
pencolor(n * 0.5 + 0.5, 0.4 + n * 0.4, 0.4 + n * 0.4)
fillcolor(n, n * 0.8, n * 0.8)
begin_fill()
circle(2)
left(90)
end_fill()
pu()
# 返回
t = heading()
setheading(an)
backward(dis)
setheading(t)
# pass
pu()
backward(l) # 退回
def main():
tree = Tree()
tree.tree(12, 100) # 遞回7層
done()
if __name__ == '__main__':
main()
# coding=gbk
from turtle import *
from random import *
# 畫樹方法
def drawTree(n, l):
pendown()
pencolor('#5d3c3c')
pensize( n / 1.5)
forward(l)
if n > 0:
dr = randint(30, 40)
dl = randint(30, 40)
move = l * (random() * 0.4 + 0.5)
right(dr)
drawTree(n - 1, move)
left(dr + dl)
drawTree(n - 1, move)
right(dl)
else:
drawPetal(3)
penup()
backward(l)
# 花瓣位置生成
def petalPlace(m, x, y):
penup()
goto(x, y)
pendown()
setheading(0)
tracer(False)
for i in range(m):
if i == 0:
drawPetal(5)
else:
penup()
goto(x, y)
a = randint(20, 400)
b = randint(-50, 50)
forward(a)
left(90)
forward(b)
right(90)
pendown()
drawPetal(5)
# 花朵繪畫方法
def drawPetal(n):
colormode(255)
r = randint(200, 255)
g = randint(8, 158)
b = randint(8, 158)
begin_fill()
fillcolor(r, g, b)
pencolor(r, g, b)
circle(n)
end_fill()
# 啓動方法
def run():
setup(1.0, 1.0)
penup()
goto(-50, -150)
left(90)
pendown()
hideturtle()
tracer(False)
drawTree(13, 150)
petalPlace(160, -100, -150)
run()
done()
import turtle
import random
stack = []
def createWord(max_it, word, proc_rules, x, y, turn):
turtle.up()
turtle.home()
turtle.goto(x, y)
turtle.right(turn)
turtle.down()
t = 0
while t < max_it:
word = rewrite(word, proc_rules)
drawit(word, 5, 20)
t = t+1
def rewrite(word, proc_rules):
wordList = list(word)
for i in range(len(wordList)):
curChar = wordList[i]
if curChar in proc_rules:
wordList[i] = proc_rules[curChar]
return "".join(wordList)
def drawit(newWord, d, angle):
newWordLs = list(newWord)
for i in range(len(newWordLs)):
cur_Char = newWordLs[i]
if cur_Char == 'F':
turtle.forward(d)
elif cur_Char == '+':
turtle.right(angle)
elif cur_Char == '-':
turtle.left(angle)
elif cur_Char == '[':
state_push()
elif cur_Char == ']':
state_pop()
def state_push():
global stack
stack.append((turtle.position(), turtle.heading()))
def state_pop():
global stack
position, heading = stack.pop()
turtle.up()
turtle.goto(position)
turtle.setheading(heading)
turtle.down()
def randomStart():
x = random.randint(-300, 300)
y = random.randint(-320, -280)
heading = random.randint(-100, -80)
return ((x, y), heading)
def main():
rule_sets = []
rule_sets.append(((3, 5), 'F', {'F':'F[+F][-F]F'}))
rule_sets.append(((4, 6), 'B', {'B':'F[-B][+ B]', 'F':'FF'}))
rule_sets.append(((2, 4), 'F', {'F':'FF+[+F-F-F]-[-F+F+F]'}))
tree_count = 50
turtle.tracer(10, 0)
for x in range(tree_count):
rand_i = random.randint(0, len(rule_sets) - 1)
selected_ruleset = rule_sets[rand_i]
i_range, word, rule = selected_ruleset
low, high = i_range
i = random.randint(low, high)
start_position, start_heading = randomStart()
start_x, start_y = start_position
createWord(i, word, rule, start_x, start_y, start_heading)
if __name__ == '__main__': main()
上面程式碼都可以直接執行,試試吧!