⊗pyPmFnRe 24 of 129 menu

Urekebishaji wa Kujirudia katika Python

Katika programu, kuna dhana inayoitwa urekebishaji wa kujirudia - wakati kazi inajikuta yenyewe.

Mfano . Urekebishaji rahisi wa kujirudia na kihesabuji

Wacha tuonyeshe kwa kutumia urekebishaji wa kujirudia nambari kutoka 1 hadi 10:

i = 1 def func(): global i print(i) i += 1 if i <= 10: func() # hapa kazi inajikuta yenyewe func()

Wacha tujadili jinsi msimbo huu unavyofanya kazi.

Tuna kigezo cha kimataifa i na kazi func, ndani yake kiwango hujulisha yaliyomo cha kigezo i, kisha huongezewa kitengo kimoja.

Ikiwa kigezo chetu i ni kidogo au sawa na 10, basi kazi inaitwa tena. Kwa sababu kigezo i - ni cha kimataifa, basi kwa kila wito mpya wa kazi ndani yake kutakuwa na thamani iliyowekwa wakati wa wito uliotangulia ya kigezo i.

Itatokea kwamba kazi itajikuta yenyewe hadi i isiwe kubwa kuliko 10.

Kumbuka, katika kesi yetu haiwezekani kazi ianzishwe bila if - ikiwa hii itafanyika, basi itatokea wito usio na mwisho wa kazi.

Mfano . Urekebishaji wa kujirudia kwa kuonyesha vipengele vya orodha zilizowekwa ndani

Mara nyingi urekebishaji wa kujirudia hutumiwa kwa kupitia orodha za viwango tofauti vya kutiwa ndani. Tuchukulie tuna orodha ifuatayo:

lst = [1, [2, 3], [[4, 5], [6, 7, 8, [9]]]]

Wacha tuunde kazi ambayo itaipitia. Ndani yake kwanza inahitajika kuweka sharti, ili kipengele ambacho ni kimsingi, yaani nambari iliyotolewa tu kutoka kwa orodha, ionyeshwe kwenye kiwango. Na ikiwa kipengele ni kitu kilichoshonwa, kwa mfano, orodha iliyowekwa ndani, basi katika kesi hii wacha kazi ijikute yenyewe, yaani urekebishaji wa kujirudia utatokea. Kwa kuangalia aina ya kipengele tutatumia kazi isinstance. Ili kwa mfano wetu tu kwenye kigezo cha kwanza cha isinstance tuandike el, na cha pili - aina list:

def func(lst): for el in lst: if isinstance(el, list): func(el) else: print(el)

Wakati wa kukuta kazi mstari wa nambari zote kutoka kwa orodha iliyowekwa ndani utaonyeshwa:

func(lst) # itaonyesha 1, 2, ... 8, 9

Mfano . Urekebishaji wa kujirudia kwa shughuli na vipengele vya orodha zilizowekwa ndani

Urekebishaji wa kujirudia unaweza kutumika na kwa anuwai ya shughuli na vipengele vya orodha zilizowekwa ndani. Tuchukulie tuna orodha ifuatayo:

lst = [1, [2, 3], [[4, 5], [6, 7, 8, [9]]]]

Wacha tupate jumla ya vipengele vyake vyote. Kwa hili katika kazi tutatangaza kigezo res, ambacho jumla ya nambari itakusanyika. Katika sharti tuandike, kwamba ikiwa kipengele ni kitu kilichoshonwa, basi huangukia katika kigezo cha kazi func na huongezwa kwenye jumla. Hii inamaanisha kuwa kipengele kitakuwa ndani ya urekebishaji wa kujirudia hadi kikigeuka kuwa kipengele kimsingi. Na katika kesi hii kitaongezwa tu kwenye jumla, iliyoandikwa kwenye res:

def func(lst): res = 0 for el in lst: if isinstance(el, list): res += func(el) else: res += el return res

Wacha tukute kazi na tuonyeshe matokeo yake kwenye kiwango:

print(func(lst)) # itaonyesha 45

Mfano . Urekebishaji wa kujirudia kwa kusanya kwenye orodha

Kwa kutumia urekebishaji wa kujirudia inawezekana kuvunja orodha zilizowekwa ndani kuwa orodha moja ya mwelekeo mmoja. Tuchukulie tuna orodha ifuatayo:

lst = [1, [2, 3], [[4, 5], [6, 7, 8, [9]]]]

Wacha tuandike katika kazi orodha tupu res, ambayo vipengele vya orodha asilia vitakusanywa. Ifuatayo tuanzishe kitanzi na tuweke sharti - ikiwa kipengele ni orodha, basi huangukia kwenye mbinu extend. Mbinu hii huunganisha vipengele vya orodha moja mwisho wa orodha ya pili, yaani vipengele vya orodha iliyowekwa ndani huangukia mwisho wa orodha res:

def func(lst): res = [] for el in lst: if isinstance(el, list): res.extend(func(el)) else: res.append(el) return res print(func(lst))

Matokeo ya msimbo uliofanyika:

[1, 2, 3, 4, 5, 6, 7, 8, 9]

Kazi za Vitendo

Onyesha vipengele vyote vya kinumeriki vya kamusi ya kiwango cha kutiwa ndani cha kiholela:

{ 'a': { 'b': 1, 'c': 2, 'd': { 'e': 3, 'f': 4 } }, 'j': { 'h': 5, 'k': 6, }, 'l': 7 }

Tafuta jumla ya vipengele vya kamusi kutoka kwa kazi iliyotangulia.

Pata orodha ya vipengele vya kimsingi vya kamusi kutoka kwa kazi iliyotangulia.

Kiswahili
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Tunatumia kuki kwa ajili ya uendeshaji wa tovuti, uchambuzi na ubinafsishaji. Usindikaji wa data unafanyika kulingana na Sera ya Faragha.
kubali yote sanidi kataa