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.