一、使用遞歸的背景
創(chuàng)新互聯(lián)建站長(zhǎng)期為1000多家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開(kāi)放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為潼關(guān)企業(yè)提供專業(yè)的網(wǎng)站設(shè)計(jì)制作、網(wǎng)站建設(shè),潼關(guān)網(wǎng)站改版等技術(shù)服務(wù)。擁有10年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開(kāi)發(fā)。
先來(lái)看一個(gè)??接口結(jié)構(gòu):
這個(gè)孩子,他是一個(gè)列表,下面有6個(gè)元素
展開(kāi)children下第一個(gè)元素[0]看看:
發(fā)現(xiàn)[0]除了包含一些字段信息,還包含了 children 這個(gè)字段(喜當(dāng)?shù)瑫r(shí)這個(gè)children下包含了2個(gè)元素:
展開(kāi)他的第一個(gè)元素,不出所料,也含有children字段(人均有娃)
可以理解為children是個(gè)對(duì)象,他包含了一些屬性,特別的是其中有一個(gè)屬性與父級(jí)children是一模一樣的,他包含父級(jí)children所有的屬性。
比如每個(gè)children都包含了一個(gè)name字段,我們要拿到所有children里name字段的值,這時(shí)候就要用到遞歸啦~
二、find_children.py
拆分理解:
1.首先import requests庫(kù),用它請(qǐng)求并獲取接口返回的數(shù)據(jù)
2.若children以上還有很多層級(jí),可以縮小數(shù)據(jù)范圍,定位到children的上一層級(jí)
3.來(lái)看看定義的函數(shù)
我們的函數(shù)調(diào)用:find_children(node_f, 'children')
其中,node_f:json字段
??? children:遞歸對(duì)象
?以下這段是實(shí)現(xiàn)遞歸的核心:
?? if items['children']:
?items['children']不為None,表示該元素下的children字段還有子類數(shù)據(jù)值,此時(shí)滿足if條件,可理解為 if 1。
?items['children']為None,表示該元素下children值為None,沒(méi)有后續(xù)可遞歸值,此時(shí)不滿足if條件,可理解為 if 0,不會(huì)再執(zhí)行if下的語(yǔ)句(不會(huì)再遞歸)。
至此,每一層級(jí)中children的name以及下一層級(jí)children的name就都取出來(lái)了
希望到這里能幫助大家理解遞歸的思路,以后根據(jù)這個(gè)模板直接套用就行
(晚安啦~)
源碼參考:
from tkinter import *
import time
import random
class Ball:
def init (self,canvas,color):
# print("begin create ball:",type(canvas),color)
self.canvas=canvas
self.id=canvas.create_oval(10,10,25,25,fill=color) #,繪制帶顏色和上下坐標(biāo)的橢圓形oval,保存小球ID
self.canvas.move(self.id,250,100) #用x方向和y方向位移,讓小球移動(dòng)到中心位置(500/2; 200/2)
starts=[-3,-2,-1,1,2,3]
random.shuffle(starts) #重新洗牌,對(duì)隨機(jī)數(shù)重新放置
self.x=starts[0]
self.y=-3
self.canvas_height=self.canvas.winfo_height() #獲取畫(huà)布當(dāng)前高度
self.canvas_width=self.canvas.winfo_width() #獲取畫(huà)布當(dāng)前寬度
tk = Tk()
tk.title('彈球游戲')
tk['width']=400
tk['height']=300
tk.resizable(False,False) #窗口大小不能調(diào)整,也可以用0替代False
tk.wm_attributes("-topmost",1) #此窗口放到其他所有窗口之前
canvas = Canvas(tk,width=500,height=400,bd=0,highlightthickness=0) #后面兩個(gè)具名函數(shù) bd high...表示畫(huà)筆之外無(wú)邊框
canvas.pack() #調(diào)整畫(huà)布大小
tk.update() #動(dòng)畫(huà)初始化
ball = Ball(canvas,'red') #把畫(huà)布保存到對(duì)象變量中,準(zhǔn)備在它上面畫(huà)球
while True:
ball.draw()
#重畫(huà)圖像
tk.update_idletasks()
tk.update()
#等待一會(huì)
time.sleep(0.01)
tk.mainloop() # stops mainloop
遞歸式方法可以被用于解決很多的計(jì)算機(jī)科學(xué)問(wèn)題,因此它是計(jì)算機(jī)科學(xué)中十分重要的一個(gè)概念。
絕大多數(shù)編程語(yǔ)言支持函數(shù)的自調(diào)用,在這些語(yǔ)言中函數(shù)可以通過(guò)調(diào)用自身來(lái)進(jìn)行遞歸。計(jì)算理論可以證明遞歸的作用可以完全取代循環(huán),因此在很多函數(shù)編程語(yǔ)言(如Scheme)中習(xí)慣用遞歸來(lái)實(shí)現(xiàn)循環(huán)。
計(jì)算機(jī)科學(xué)家尼克勞斯·維爾特如此描述遞歸:
遞歸的強(qiáng)大之處在于它允許用戶用有限的語(yǔ)句描述無(wú)限的對(duì)象。因此,在計(jì)算機(jī)科學(xué)中,遞歸可以被用來(lái)描述無(wú)限步的運(yùn)算,盡管描述運(yùn)算的程序是有限的。
python 2 遞歸函數(shù)和其它語(yǔ)言,基本沒(méi)有差別,只是不支持尾遞歸。無(wú)限遞歸最大值為固定的,但可以修改。
作者:黃哥
網(wǎng)站名稱:python函數(shù)遞歸彈球 python彈彈球
文章地址:http://chinadenli.net/article34/doddgse.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營(yíng)銷、云服務(wù)器、靜態(tài)網(wǎng)站、網(wǎng)頁(yè)設(shè)計(jì)公司、標(biāo)簽優(yōu)化、微信公眾號(hào)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)