python畫(huà)一個(gè)圣誕樹(shù)實(shí)現(xiàn)示例
前言
我們上一篇博客,給大家展現(xiàn)了一個(gè)動(dòng)態(tài)的愛(ài)心。今天,我們給大家畫(huà)一個(gè)圣誕樹(shù),我們一起來(lái)看看效果吧。
效果展示
我們先來(lái)看看最終的效果看看我們畫(huà)的圣誕樹(shù)怎么樣吧。如果,感覺(jué)不錯(cuò),我們一起來(lái)實(shí)現(xiàn)吧。
功能模塊
我們先看看,實(shí)現(xiàn)這個(gè)效果,需要哪些模塊吧。大家先準(zhǔn)備好這些模塊。
import turtle as t from turtle import * import random as r
我們導(dǎo)入turtle模塊,這個(gè)模塊提供了一些繪圖函數(shù),比如turtle.circle()和turtle.forward()。我們導(dǎo)入turtle模塊的子模塊,這些子模塊提供了更多的繪圖函數(shù),比如turtle.circle()和turtle.forward(),這些函數(shù)與turtle模塊中的函數(shù)名稱(chēng)不同,但是它們具有相似的功能。導(dǎo)入random模塊的目的,這個(gè)模塊提供了一些隨機(jī)數(shù)生成函數(shù),比如random.randint()和random.uniform()。
n = 100.0 speed("fastest") screensize(bg='pink') left(90) forward(3*n) color("orange", "yellow") begin_fill() left(126)
我們這段代碼是使用turtle庫(kù)來(lái)繪制一個(gè)簡(jiǎn)單的圣誕樹(shù),包括樹(shù)干、葉子和五角星。其中,變量n
表示樹(shù)的高度,變量speed
用于設(shè)置繪圖速度,變量screensize
用于設(shè)置畫(huà)布大小,變量left
用于設(shè)置海龜?shù)姆较?,變?code>forward用于設(shè)置海龜?shù)囊苿?dòng)距離,變量color
用于設(shè)置畫(huà)筆的顏色和樣式,變量begin_fill
用于開(kāi)始填充顏色,變量left
用于設(shè)置海龜?shù)姆较颉?/p>
def drawlight(): if r.randint(0, 30) == 0: color('tomato') circle(6) elif r.randint(0,30) == 1: color('orange') circle(3) else: color('dark green') color("dark green") backward(n*4.8)
變量drawlight()
用于實(shí)現(xiàn)隨機(jī)繪制燈光的功能,根據(jù)隨機(jī)數(shù)的不同,繪制不同顏色的圓形。我們使用了r.randint()
函數(shù)來(lái)生成隨機(jī)數(shù),并根據(jù)隨機(jī)數(shù)的值來(lái)設(shè)置顏色。具體來(lái)說(shuō),如果隨機(jī)數(shù)為0,則繪制紅色的圓形;如果隨機(jī)數(shù)為1,則繪制橙色的圓形;否則,繪制綠色的圓形。
def tree(d, s): if d <= 0: return t.pensize(3) forward(s) tree(d-1, s*.8) right(120) tree(d-3, s*.5) drawlight() right(120) tree(d-3, s*.5) right(120) backward(s) tree(15, n) backward(n/2)
我們這里使用遞歸方式來(lái)構(gòu)建一棵二叉樹(shù)。具體來(lái)說(shuō),tree(d, s)
函數(shù)接受兩個(gè)參數(shù)d
和s
,表示樹(shù)的高度和當(dāng)前節(jié)點(diǎn)的高度。函數(shù)首先判斷d
是否小于等于0,如果是,則直接返回;否則,根據(jù)遞歸調(diào)用的規(guī)則,將當(dāng)前節(jié)點(diǎn)的高度s
乘以0.8,遞歸調(diào)用tree(d-1, s*.8)
來(lái)構(gòu)建左子樹(shù),然后將海龜向右旋轉(zhuǎn)120度,遞歸調(diào)用tree(d-3, s*.5)
來(lái)構(gòu)建右子樹(shù),最后調(diào)用drawlight()
函數(shù)來(lái)繪制燈光。
def drawsnow(): t.ht() t.pensize(3) for i in range(200): t.pencolor("white") t.pu() t.setx(r.randint(-350,350)) t.sety(r.randint(-100,450)) t.pd() dens = 6 snowsize = r.randint(1,10) for j in range(dens): t.fd(int(snowsize)) t.backward(int(snowsize)) t.right(int(360/dens)) drawsnow() t.done()
我們還可以實(shí)現(xiàn)雪花的繪制。讓我們的圣誕樹(shù)更加的美觀。每個(gè)雪花由6個(gè)隨機(jī)的等距圓組成,圓的半徑從1到10不等。程序使用遞歸的方式來(lái)繪制每個(gè)雪花,并使用隨機(jī)數(shù)來(lái)控制雪花的大小和位置。
總結(jié)
我們可以使用遞歸方式來(lái)繪制圣誕樹(shù)。在每一層遞歸中,我們先繪制樹(shù)干,然后根據(jù)遞歸深度繪制左右兩個(gè)分支,最后返回上一級(jí)。在繪制過(guò)程中,我們使用了一些簡(jiǎn)單的數(shù)學(xué)運(yùn)算和turtle庫(kù)的函數(shù)來(lái)控制海龜?shù)男袆?dòng)。
以上就是python畫(huà)一個(gè)圣誕樹(shù)實(shí)現(xiàn)示例的詳細(xì)內(nèi)容,更多關(guān)于python畫(huà)圣誕樹(shù)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python標(biāo)準(zhǔn)模塊--ContextManager上下文管理器的具體用法
本篇文章主要介紹了Python標(biāo)準(zhǔn)模塊--ContextManager的具體用法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-11-11python基本算法之實(shí)現(xiàn)歸并排序(Merge sort)
這篇文章主要給大家介紹了關(guān)于python基本算法之實(shí)現(xiàn)歸并排序(Merge sort)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09Pyqt+matplotlib 實(shí)現(xiàn)實(shí)時(shí)畫(huà)圖案例
這篇文章主要介紹了Pyqt+matplotlib 實(shí)現(xiàn)實(shí)時(shí)畫(huà)圖案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-03-03Tkinter組件實(shí)現(xiàn)Radiobutton的示例
Radiobutton組件用于實(shí)現(xiàn)多選一的問(wèn)題,本文主要介紹了Tkinter組件實(shí)現(xiàn)Radiobutton的示例,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01python判斷一個(gè)集合是否包含了另外一個(gè)集合中所有項(xiàng)的方法
這篇文章主要介紹了python判斷一個(gè)集合是否包含了另外一個(gè)集合中所有項(xiàng)的方法,涉及Python集合操作的相關(guān)技巧,需要的朋友可以參考下2015-06-06python中torch可以成功引用但無(wú)法訪問(wèn)屬性的解決辦法
這篇文章給大家介紹了我們?cè)趐ython中運(yùn)行程序時(shí)遇到一個(gè)奇怪的報(bào)錯(cuò),torch可以成功引用但無(wú)法訪問(wèn)屬性,這是比較奇怪的一件事,因?yàn)閠orch肯定是可以訪問(wèn)Tensor,所以本文給大家介紹了torch可以成功引用但無(wú)法訪問(wèn)屬性的解決辦法,需要的朋友可以參考下2024-01-01python 2.6.6升級(jí)到python 2.7.x版本的方法
這篇文章主要介紹了python 2.6.6升級(jí)到python 2.7.x版本的方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-10-10Django解決無(wú)法從request.POST中獲取URL傳進(jìn)來(lái)的參數(shù)
這篇文章主要介紹了Django解決無(wú)法從request.POST中獲取URL傳進(jìn)來(lái)的參數(shù)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12Python3實(shí)現(xiàn)網(wǎng)頁(yè)內(nèi)容轉(zhuǎn)換成PDF文檔和圖片
pdfkit是把 HTML+CSS 格式的文件轉(zhuǎn)換成 PDF 的一種工具,它是 wkhtmltopdf 這個(gè)工具包的 python 封裝。本文將利用pdfkit實(shí)現(xiàn)網(wǎng)頁(yè)內(nèi)容轉(zhuǎn)換成PDF文檔和圖片效果,感興趣的可以學(xué)習(xí)一下2022-06-06