Курси фишурдаи Python

Омӯзиши барномасозӣ бо Python аз сифр: насби Python ва муҳаррири код, тағйирёбандаҳо ва сатрҳо, рӯйхатҳо, дастурҳои if, луғатҳо, воридкунии маълумот ва даврҳои while, функсияҳо, классҳо, кор бо файлҳо ва истисноҳо ва санҷиши код бо pytest. Ҳар боб мисолҳои код ва машқҳои «Худатон бисанҷед» дорад. Муқаддима ва бобҳои 2–11 тарҷумаи тоҷикии китоби Эрик Маттес «Python Crash Course» (нашри 3) мебошанд; боби 1 ва замима барои ин нашр навишта шудаанд.
Агенти Зеҳнӣ · 16 октябри 2026 · 13 саҳифа · 2 писанд
Боби 3. Шиносоӣ бо рӯйхатҳо
Дар ин боб ва боби оянда меомӯзед, ки рӯйхатҳо чистанд ва чӣ гуна кор бо унсурҳои онҳоро оғоз кардан мумкин аст. Рӯйхатҳо имкон медиҳанд, ки маҷмӯи маълумотро дар як ҷо нигоҳ доред — хоҳ ин маълумот аз чанд унсур иборат бошад, хоҳ аз миллионҳо унсур. Рӯйхатҳо яке аз имкониятҳои пурқуввати Python мебошанд, ки ҳатто барномасозони навкор метавонанд ба осонӣ аз онҳо истифода баранд. Онҳо бисёр мафҳумҳои муҳими барномасозиро ба ҳам мепайванданд.
Рӯйхат чист?
Рӯйхат (list) маҷмӯи унсурҳоест, ки бо тартиби муайян ҷойгир шудаанд. Шумо метавонед рӯйхате созед, ки ҳарфҳои алифбо, рақамҳои аз 0 то 9 ё номи ҳамаи аъзои оилаатонро дар бар гирад. Ба рӯйхат ҳар чизеро, ки мехоҳед, ҷой дода метавонед ва шарт нест, ки унсурҳои он бо ҳам робитаи махсус дошта бошанд. Азбаски рӯйхат одатан зиёда аз як унсурро дар бар мегирад, беҳтар аст номи онро дар шакли ҷамъ интихоб кунед, масалан: letters — ҳарфҳо, digits — рақамҳо ё names — номҳо.
Дар Python қавсҳои мураббаъ — [] — рӯйхатро нишон медиҳанд ва унсурҳои алоҳидаи он бо вергул аз ҳам ҷудо мешаванд. Ин намунаи содаи рӯйхатест, ки номи чанд тамғаи дучархаро дар бар мегирад:
bicycles.py
bicycles = ['trek', 'cannondale', 'redline', 'specialized']
print(bicycles)
Агар аз Python хоҳиш кунед, ки рӯйхатро чоп кунад, он рӯйхатро ҳамроҳи қавсҳои мураббаъ нишон медиҳад:
['trek', 'cannondale', 'redline', 'specialized']
Азбаски одатан намехоҳед корбарон натиҷаро дар чунин шакл бинанд, биёед тарзи дастрасӣ ба унсурҳои алоҳидаи рӯйхатро омӯзем.
Дастрасӣ ба унсурҳои рӯйхат
Рӯйхатҳо маҷмӯаҳои тартибдор мебошанд. Аз ин рӯ, барои дастрасӣ ба ҳар унсури рӯйхат кофист мавқеъ ё индекси (index) онро ба Python нишон диҳед. Барои ин номи рӯйхатро навишта, пас аз он индекси унсурро дар дохили қавсҳои мураббаъ ҷойгир кунед.
Масалан, биёед дучархаи аввалро аз рӯйхати bicycles гирем:
bicycles = ['trek', 'cannondale', 'redline', 'specialized']
print(bicycles[0])
Вақте як унсури рӯйхатро дархост мекунем, Python танҳо ҳамон унсурро бе қавсҳои мураббаъ бармегардонад:
trek
Ин ҳамон натиҷаест, ки мехоҳем корбарон бинанд: натиҷаи тоза ва мураттаб.
Шумо инчунин метавонед методҳои кор бо сатрҳоро, ки дар боби 2 омӯхтед, ба ҳар унсури ин рӯйхат татбиқ кунед. Масалан, бо методи title() метавонед унсури 'trek'-ро ба шакли муносибтар намоиш диҳед:
bicycles = ['trek', 'cannondale', 'redline', 'specialized']
print(bicycles[0].title())
Натиҷа мисли намунаи пешина аст, танҳо ҳарфи аввали 'Trek' калон мешавад:
Trek
Индексҳо аз 0 оғоз мешаванд, на аз 1
Дар Python унсури аввали рӯйхат дар мавқеи 0 ҷойгир аст, на дар мавқеи 1. Ин қоида дар аксари забонҳои барномасозӣ низ амал мекунад ва сабабаш ба тарзи амалисозии амалиёти рӯйхат дар сатҳи поёнӣ вобаста аст. Агар натиҷаи ғайричашмдошт гиред, санҷед, ки оё ба хатои сода, вале маъмули як воҳид фарқ кардани индекс (off-by-one error) роҳ надодаед.
Унсури дуюми рӯйхат индекси 1 дорад. Бо ин тарзи рақамгузорӣ барои дастрасӣ ба унсури дилхоҳ аз рақами тартибии он як воҳид кам мекунед. Масалан, барои дастрасӣ ба унсури чорум бояд унсури дорои индекси 3-ро дархост кунед.
Коди зерин дучархаҳои дорои индексҳои 1 ва 3-ро дархост мекунад:
bicycles = ['trek', 'cannondale', 'redline', 'specialized']
print(bicycles[1])
print(bicycles[3])
Ин код дучархаҳои дуюм ва чорумро бармегардонад:
cannondale
specialized
Python барои дастрасӣ ба унсури охирини рӯйхат тарзи махсус дорад. Агар унсури дорои индекси -1-ро дархост кунед, Python унсури охирини рӯйхатро бармегардонад:
bicycles = ['trek', 'cannondale', 'redline', 'specialized']
print(bicycles[-1])
Ин код қимати 'specialized'-ро бармегардонад. Чунин тарзи навишт хеле муфид аст, зеро аксар вақт мехоҳед ба унсурҳои охирини рӯйхат дастрасӣ пайдо кунед, бе он ки шумораи дақиқи унсурҳои онро донед. Ин қоида барои дигар индексҳои манфӣ низ амал мекунад. Индекси -2 унсури дуюм аз охир, индекси -3 унсури сеюм аз охир ва ғайраро бармегардонад.
Истифодаи қиматҳои алоҳидаи рӯйхат
Қиматҳои алоҳидаи рӯйхатро мисли ҳар тағйирёбандаи дигар истифода бурдан мумкин аст. Масалан, бо истифода аз f-string метавонед дар асоси қимате аз рӯйхат паём созед.
Биёед дучархаи аввалро аз рӯйхат гирем ва бо истифода аз номи он паём тартиб диҳем:
bicycles = ['trek', 'cannondale', 'redline', 'specialized']
message = f"Дучархаи аввалини ман {bicycles[0].title()} буд."
print(message)
Бо истифода аз қимати bicycles[0] ҷумла сохта, онро ба тағйирёбандаи message нисбат медиҳем. Натиҷа ҷумлаи содаест дар бораи дучархаи аввали рӯйхат:
Дучархаи аввалини ман Trek буд.
Худатон бисанҷед
Ин барномаҳои кӯтоҳро нависед, то таҷрибаи амалии кор бо рӯйхатҳои Python-ро пайдо кунед. Барои ба тартиб нигоҳ доштани машқҳо метавонед барои ҳар боб ҷузвдони алоҳида созед.
3-1. Номҳо: Номи чанд дӯстатонро дар рӯйхате бо номи names нигоҳ доред. Ба ҳар унсури рӯйхат алоҳида дастрасӣ пайдо карда, номи ҳар шахсро чоп кунед.
3-2. Саломҳо: Корро аз рӯйхати машқи 3-1 оғоз кунед, аммо ба ҷойи танҳо чоп кардани номи ҳар шахс, ба ӯ паём чоп кунед. Матни асосии ҳамаи паёмҳо бояд яксон бошад, вале ҳар паём бояд номи ҳамон шахсро дар бар гирад.
3-3. Рӯйхати шахсии шумо: Навъи дӯстдоштаи воситаи нақлиётатонро интихоб кунед, масалан мотосикл ё автомобил, ва рӯйхате созед, ки чанд намунаи онро нигоҳ дорад. Бо истифода аз рӯйхат дар бораи ин воситаҳо чанд ҷумла чоп кунед, масалан: «Ман мехоҳам мотосикли Honda дошта бошам».
Тағйир додан, илова кардан ва ҳазф кардани унсурҳо
Аксари рӯйхатҳое, ки месозед, динамикӣ, яъне тағйирёбанда хоҳанд буд: шумо рӯйхат месозед ва ҳангоми иҷрои барнома ба он унсур илова мекунед ё аз он унсур ҳазф мекунед.
Масалан, метавонед бозие созед, ки дар он бозигар бояд ба мавҷудоти бегонаи осмон тир парронад. Маҷмӯи ибтидоии мавҷудоти бегонаро дар рӯйхат нигоҳ медоред ва ҳар дафъае ки яке аз онҳо зада мешавад, онро аз рӯйхат ҳазф мекунед. Вақте мавҷуди нави бегона дар экран пайдо мешавад, онро ба рӯйхат илова мекунед. Дар давоми бозӣ шумораи унсурҳои рӯйхат зиёд ва кам мешавад.
Тағйир додани унсурҳои рӯйхат
Тарзи навишти код барои тағйир додани унсур ба тарзи дастрасӣ ба он монанд аст. Барои тағйир додани унсур номи рӯйхат ва пас аз он индекси унсури дилхоҳро нависед. Сипас қимати наверо нишон диҳед, ки мехоҳед ба он унсур нисбат диҳед.
Масалан, рӯйхати мотосиклҳо дорем ва унсури аввали он 'honda' аст. Пас аз сохтани рӯйхат метавонем қимати ин унсурро тағйир диҳем:
motorcycles.py
motorcycles = ['honda', 'yamaha', 'suzuki']
print(motorcycles)
motorcycles[0] = 'ducati'
print(motorcycles)
Дар ин ҷо рӯйхати motorcycles-ро муайян мекунем, ки унсури аввали он 'honda' аст. Сипас қимати унсури аввалро ба 'ducati' иваз мекунем. Натиҷа нишон медиҳад, ки унсури аввал тағйир ёфт, вале боқимондаи рӯйхат ҳамон тавр монд:
['honda', 'yamaha', 'suzuki']
['ducati', 'yamaha', 'suzuki']
Шумо метавонед қимати ҳар унсури рӯйхатро тағйир диҳед, на танҳо унсури аввалро.
Илова кардани унсурҳо ба рӯйхат
Сабабҳои гуногуне ҳастанд, ки мехоҳед ба рӯйхат унсури нав илова кунед. Масалан, мехоҳед дар бозӣ мавҷудоти нави бегона пайдо шаванд, ба тасвири маълумот додаҳои нав илова кунед ё корбарони навбақайдгирифтаро ба вебсайти сохтаатон ворид намоед. Python барои илова кардани маълумоти нав ба рӯйхатҳои мавҷуда чанд роҳ пешниҳод мекунад.
Илова кардани унсур ба охири рӯйхат
Роҳи содатарини илова кардани унсури нав ин аст, ки онро ба охири рӯйхат зам кунед. Вақте унсуреро бо ин роҳ илова мекунед, он дар охири рӯйхат ҷойгир мешавад. Бо истифода аз рӯйхати намунаи пешина унсури нави 'ducati'-ро ба охири рӯйхат илова мекунем:
motorcycles = ['honda', 'yamaha', 'suzuki']
print(motorcycles)
motorcycles.append('ducati')
print(motorcycles)
Дар ин ҷо методи append() қимати 'ducati'-ро ба охири рӯйхат илова мекунад ва ба унсурҳои дигар таъсир намерасонад:
['honda', 'yamaha', 'suzuki']
['honda', 'yamaha', 'suzuki', 'ducati']
Методи append() сохтани рӯйхатҳои динамикиро осон мекунад. Масалан, метавонед корро аз рӯйхати холӣ оғоз карда, сипас бо чанд даъвати append() ба он унсурҳо илова кунед. Биёед рӯйхати холӣ созем ва ба он унсурҳои 'honda', 'yamaha' ва 'suzuki'-ро илова кунем:
motorcycles = []
motorcycles.append('honda')
motorcycles.append('yamaha')
motorcycles.append('suzuki')
print(motorcycles)
Рӯйхати ҳосилшуда ба рӯйхатҳои намунаҳои пешина комилан монанд аст:
['honda', 'yamaha', 'suzuki']
Сохтани рӯйхатҳо бо ин роҳ хеле маъмул аст, зеро аксар вақт то оғози иҷрои барнома намедонед, ки корбарон кадом маълумотро нигоҳ доштан мехоҳанд. Барои он ки интихоби маълумот дар ихтиёри корбарон бошад, аввал рӯйхати холӣ муайян кунед. Сипас ҳар қимати нави воридкардаи корбарро ба он рӯйхат илова намоед.
Ворид кардани унсур ба мавқеи муайяни рӯйхат
Бо методи insert() метавонед унсури навро ба ҳар мавқеи рӯйхат ворид кунед. Барои ин индекси унсури нав ва қимати онро нишон медиҳед:
motorcycles = ['honda', 'yamaha', 'suzuki']
motorcycles.insert(0, 'ducati')
print(motorcycles)
Дар ин намуна қимати 'ducati'-ро ба аввали рӯйхат ворид мекунем. Методи insert() дар мавқеи 0 ҷой мекушояд ва қимати 'ducati'-ро дар он нигоҳ медорад:
['ducati', 'honda', 'yamaha', 'suzuki']
Ин амал ҳамаи қиматҳои дигари рӯйхатро як мавқеъ ба тарафи рост мекӯчонад.
Ҳазф кардани унсурҳо аз рӯйхат
Аксар вақт мехоҳед як ё чанд унсурро аз рӯйхат ҳазф кунед. Масалан, вақте бозигар мавҷуди бегонаро зада меафтонад, эҳтимол мехоҳед онро аз рӯйхати мавҷудоти фаъоли бегона ҳазф кунед. Ё вақте корбар тасмим мегирад ҳисоби худро дар веббарномаи сохтаатон бекор кунад, мехоҳед ӯро аз рӯйхати корбарони фаъол бардоред.
Унсурро ҳам аз рӯйи мавқеаш дар рӯйхат ва ҳам аз рӯйи қиматаш ҳазф кардан мумкин аст.
Ҳазф кардани унсур бо дастури del
Агар мавқеи унсури ҳазфшавандаро донед, метавонед аз дастури del истифода баред:
motorcycles = ['honda', 'yamaha', 'suzuki']
print(motorcycles)
del motorcycles[0]
print(motorcycles)
Дар ин ҷо бо дастури del унсури аввал — 'honda'-ро аз рӯйхати мотосиклҳо ҳазф мекунем:
['honda', 'yamaha', 'suzuki']
['yamaha', 'suzuki']
Агар индекси унсурро донед, бо дастури del метавонед онро аз ҳар мавқеи рӯйхат ҳазф кунед. Масалан, унсури дуюм — 'yamaha'-ро чунин ҳазф мекунем:
motorcycles = ['honda', 'yamaha', 'suzuki']
print(motorcycles)
del motorcycles[1]
print(motorcycles)
Мотосикли дуюм аз рӯйхат ҳазф мешавад:
['honda', 'yamaha', 'suzuki']
['honda', 'suzuki']
Дар ҳар ду намуна баъд аз истифодаи del дигар ба қимати ҳазфшуда тавассути рӯйхат дастрасӣ пайдо карда наметавонед.
Ҳазф кардани унсур бо методи pop()
Баъзан мехоҳед қимати унсурро пас аз ҳазф карданаш аз рӯйхат истифода баред. Масалан, шояд координатаҳои x ва y-и мавҷуди бегонаи нав задашударо гирифтан хоҳед, то дар ҳамон ҷой таркишро тасвир кунед. Дар веббарнома шояд корбареро аз рӯйхати аъзои фаъол ҳазф карда, сипас ба рӯйхати аъзои ғайрифаъол илова кардан хоҳед.
Методи pop() унсури охирини рӯйхатро ҳазф мекунад, аммо имкон медиҳад, ки пас аз ҳазф низ бо он унсур кор кунед. Истилоҳи pop аз тасаввури рӯйхат ҳамчун стек, яъне тӯдаи унсурҳо, гирифта шудааст: як унсурро аз болои тӯда мебардоред. Дар ин муқоиса болои стек ба охири рӯйхат мувофиқ меояд.
Биёед бо pop() як мотосиклро аз рӯйхат бардорем:
motorcycles = ['honda', 'yamaha', 'suzuki']
print(motorcycles)
popped_motorcycle = motorcycles.pop()
print(motorcycles)
print(popped_motorcycle)
Аввал рӯйхати motorcycles-ро муайян ва чоп мекунем. Сипас як қиматро бо pop() аз рӯйхат бардошта, онро ба тағйирёбандаи popped_motorcycle нисбат медиҳем. Рӯйхатро чоп мекунем, то нишон диҳем, ки як қимат аз он ҳазф шудааст. Баъд қимати бардошташударо чоп мекунем, то нишон диҳем, ки ҳанӯз ба он дастрасӣ дорем.
Натиҷа нишон медиҳад, ки қимати 'suzuki' аз охири рӯйхат бардошта шуда, акнун дар тағйирёбандаи popped_motorcycle нигоҳ дошта мешавад:
['honda', 'yamaha', 'suzuki']
['honda', 'yamaha']
suzuki
Методи pop() чӣ фоида дошта метавонад? Тасаввур кунед, ки мотосиклҳо дар рӯйхат мувофиқи замони соҳиб шудан ба онҳо ҷойгир шудаанд. Дар ин ҳолат бо pop() метавонем дар бораи охирин мотосикли харидаамон ҷумлае чоп кунем:
motorcycles = ['honda', 'yamaha', 'suzuki']
last_owned = motorcycles.pop()
print(f"Охирин мотосикле, ки доштам, {last_owned.title()} буд.")
Натиҷа ҷумлаи содаест дар бораи охирин мотосикле, ки доштем:
Охирин мотосикле, ки доштам, Suzuki буд.
Бардоштани унсур аз ҳар мавқеи рӯйхат бо pop()
Бо нишон додани индекси унсур дар дохили қавсҳои pop() метавонед онро аз ҳар мавқеи рӯйхат бардоред:
motorcycles = ['honda', 'yamaha', 'suzuki']
first_owned = motorcycles.pop(0)
print(f"Аввалин мотосикле, ки доштам, {first_owned.title()} буд.")
Аввал мотосикли якумро аз рӯйхат мебардорем ва баъд дар бораи он паём чоп мекунем. Натиҷа ҷумлаи содаест, ки аввалин мотосикли моро тавсиф мекунад:
Аввалин мотосикле, ки доштам, Honda буд.
Дар хотир доред: ҳар дафъа ки pop()-ро истифода мебаред, унсури бардошташуда дигар дар рӯйхат нигоҳ дошта намешавад.
Агар надонед, ки del-ро истифода баред ё pop()-ро, чунин қарор қабул кунед:
- Агар мехоҳед унсурро аз рӯйхат ҳазф кунед ва баъд онро истифода набаред, аз
delистифода баред. - Агар мехоҳед қимати унсури ҳазфшударо истифода баред, аз
pop()истифода баред.
Ҳазф кардани унсур аз рӯйи қимат
Баъзан мавқеи қимати ҳазфшавандаро дар рӯйхат намедонед. Агар танҳо қимати унсурро донед, метавонед методи remove()-ро истифода баред.
Масалан, мехоҳем қимати 'ducati'-ро аз рӯйхати мотосиклҳо ҳазф кунем:
motorcycles = ['honda', 'yamaha', 'suzuki', 'ducati']
print(motorcycles)
motorcycles.remove('ducati')
print(motorcycles)
Дар ин ҷо методи remove() ба Python мегӯяд, ки ҷойи 'ducati'-ро дар рӯйхат ёфта, он унсурро ҳазф кунад:
['honda', 'yamaha', 'suzuki', 'ducati']
['honda', 'yamaha', 'suzuki']
Ҳангоми истифодаи remove() низ метавонед қимати ҳазфшавандаро барои кори дигар нигоҳ доред. Биёед қимати 'ducati'-ро ҳазф карда, сабаби ҳазф кардани онро чоп кунем:
motorcycles = ['honda', 'yamaha', 'suzuki', 'ducati']
print(motorcycles)
too_expensive = 'ducati'
motorcycles.remove(too_expensive)
print(motorcycles)
print(f"\nМотосикли {too_expensive.title()} барои ман хеле гарон аст.")
Пас аз муайян кардани рӯйхат қимати 'ducati'-ро ба тағйирёбандаи too_expensive нисбат медиҳем. Сипас бо истифода аз ин тағйирёбанда ба Python мегӯем, ки кадом қиматро аз рӯйхат ҳазф кунад.
Қимати 'ducati' аз рӯйхат ҳазф шудааст, аммо тавассути тағйирёбандаи too_expensive ҳанӯз дастрас аст. Ин имкон медиҳад, ки сабаби ҳазф кардани онро аз рӯйхати мотосиклҳо чоп кунем:
['honda', 'yamaha', 'suzuki', 'ducati']
['honda', 'yamaha', 'suzuki']
Мотосикли Ducati барои ман хеле гарон аст.
Эзоҳ: Методи remove() танҳо аввалин унсуреро ҳазф мекунад, ки қиматаш ба қимати нишондодаи шумо баробар аст. Агар эҳтимол дошта бошад, ки ин қимат дар рӯйхат чанд бор омадааст, барои ҳазф кардани ҳамаи онҳо бояд аз давр истифода баред. Тарзи иҷрои ин корро дар боби 7 меомӯзед.
Худатон бисанҷед
Машқҳои зерин нисбат ба машқҳои боби 2 каме мураккабтаранд, вале имкон медиҳанд, ки ҳамаи роҳҳои шарҳдодашудаи кор бо рӯйхатҳоро истифода баред.
3-4. Рӯйхати меҳмонон: Агар метавонистед ҳар шахсеро — хоҳ зинда бошад, хоҳ аз дунё гузашта — ба хӯроки шом даъват кунед, киро даъват мекардед? Рӯйхате созед, ки номи ҳадди ақал се шахси дилхоҳатонро дар бар гирад. Сипас бо истифода аз рӯйхат барои ҳар шахс паёми даъват ба хӯроки шом чоп кунед.
3-5. Тағйир додани рӯйхати меҳмонон: Нав фаҳмидед, ки яке аз меҳмонон ба зиёфат омада наметавонад. Аз ин рӯ, бояд даъватномаҳоро аз нав омода кунед ва ба ҷойи ӯ шахси дигареро даъват намоед.
- Корро аз барномаи машқи 3-4 оғоз кунед. Дар охири барнома як даъвати
print()илова карда, номи меҳмонеро чоп кунед, ки омада наметавонад. - Рӯйхатро тағйир диҳед: номи меҳмони омада наметавонистаро бо номи шахси нав иваз кунед.
- Маҷмӯи дуюми паёмҳои даъватро чоп кунед — барои ҳар шахсе, ки ҳоло дар рӯйхат аст, як паём.
3-6. Меҳмонони бештар: Шумо мизи калонтаре барои хӯроки шом ёфтед ва акнун ҷойи бештар доред. Боз се меҳмони дигарро интихоб кунед.
- Корро аз барномаи машқи 3-4 ё 3-5 оғоз кунед. Дар охири барнома як даъвати
print()илова карда, хабар диҳед, ки мизи калонтар ёфтед. - Бо
insert()як меҳмони навро ба аввали рӯйхат илова кунед. - Бо
insert()як меҳмони навро ба миёнаи рӯйхат илова кунед. - Бо
append()як меҳмони навро ба охири рӯйхат илова кунед. - Барои ҳар шахси рӯйхат паёми нави даъват чоп кунед.
3-7. Кӯтоҳ кардани рӯйхати меҳмонон: Нав фаҳмидед, ки мизи нави шумо то вақти зиёфат намерасад ва акнун танҳо барои ду меҳмон ҷой доред.
- Корро аз барномаи машқи 3-6 оғоз кунед. Сатри наве илова кунед, ки хабар диҳад: шумо танҳо ду нафарро ба хӯроки шом даъват карда метавонед.
- Бо
pop()меҳмононро як-як аз рӯйхат бардоред, то танҳо ду ном боқӣ монад. Ҳар дафъае ки номеро мебардоред, ба ҳамон шахс паёме чоп кунед ва изҳори таассуф намоед, ки ӯро ба хӯроки шом даъват карда наметавонед. - Ба ҳар яке аз ду шахси боқимонда паём чоп карда, хабар диҳед, ки даъвати онҳо ҳанӯз боқӣ аст.
- Бо
delду номи охиринро аз рӯйхат ҳазф кунед, то рӯйхат холӣ шавад. Рӯйхатро чоп кунед, то бовар ҳосил намоед, ки дар охири барнома он воқеан холӣ аст.
Ба тартиб даровардани рӯйхат
Аксар вақт рӯйхатҳо бо тартиби пешгӯинашаванда сохта мешаванд, зеро шумо на ҳамеша тартиби ворид кардани маълумотро аз ҷониби корбарон назорат карда метавонед. Гарчанде дар бисёр ҳолатҳо ин ногузир аст, аксар вақт мехоҳед маълумотро бо тартиби муайян намоиш диҳед.
Баъзан мехоҳед тартиби аслии рӯйхатро нигоҳ доред ва баъзан мехоҳед онро тағйир диҳед. Python вобаста ба вазъият чанд роҳи ба тартиб даровардани рӯйхатҳоро пешниҳод мекунад.
Мураттабсозии доимии рӯйхат бо методи sort()
Методи sort() дар Python мураттабсозии рӯйхатро нисбатан осон мекунад. Тасаввур кунед, ки рӯйхати автомобилҳо дорем ва мехоҳем онҳоро бо тартиби алифбо нигоҳ дорем. Барои сода нигоҳ доштани масъала фарз мекунем, ки ҳамаи қиматҳои рӯйхат бо ҳарфҳои хурд навишта шудаанд:
cars.py
cars = ['bmw', 'audi', 'toyota', 'subaru']
cars.sort()
print(cars)
Методи sort() тартиби худи рӯйхатро тағйир медиҳад. Акнун автомобилҳо бо тартиби алифбо ҷойгир шудаанд ва тартиби пешина худкор нигоҳ дошта намешавад:
['audi', 'bmw', 'subaru', 'toyota']
Шумо инчунин метавонед бо додани аргументи reverse=True ба методи sort() рӯйхатро бо тартиби баръакси алифбо мураттаб кунед. Намунаи зерин ҳамин корро иҷро мекунад:
cars = ['bmw', 'audi', 'toyota', 'subaru']
cars.sort(reverse=True)
print(cars)
Дар ин ҳолат низ тартиби худи рӯйхат тағйир меёбад:
['toyota', 'subaru', 'bmw', 'audi']
Мураттабсозии муваққатии рӯйхат бо функсияи sorted()
Барои нигоҳ доштани тартиби аслии рӯйхат ва ҳамзамон намоиш додани он бо тартиби мураттаб, метавонед функсияи sorted()-ро истифода баред. Ин функсия имкон медиҳад, ки рӯйхатро бо тартиби муайян нишон диҳед, бе он ки тартиби худи рӯйхат тағйир ёбад.
Биёед ин функсияро дар рӯйхати автомобилҳо санҷем:
cars = ['bmw', 'audi', 'toyota', 'subaru']
print("Ин рӯйхати аслӣ аст:")
print(cars)
print("\nИн рӯйхати мураттабшуда аст:")
print(sorted(cars))
print("\nИн боз ҳамон рӯйхати аслӣ аст:")
print(cars)
Аввал рӯйхатро бо тартиби аслиаш ва сипас бо тартиби алифбо чоп мекунем. Пас аз намоиш додани тартиби нав нишон медиҳем, ки рӯйхат ҳанӯз бо тартиби аслиаш нигоҳ дошта мешавад:
Ин рӯйхати аслӣ аст:
['bmw', 'audi', 'toyota', 'subaru']
Ин рӯйхати мураттабшуда аст:
['audi', 'bmw', 'subaru', 'toyota']
Ин боз ҳамон рӯйхати аслӣ аст:
['bmw', 'audi', 'toyota', 'subaru']
Диққат диҳед, ки баъд аз истифодаи функсияи sorted() тартиби аслии рӯйхат боқӣ мондааст. Агар хоҳед рӯйхатро бо тартиби баръакси алифбо нишон диҳед, функсияи sorted() низ аргументи reverse=True-ро қабул мекунад.
Эзоҳ: Вақте ҳамаи қиматҳо бо ҳарфҳои хурд навишта нашудаанд, мураттабсозии алифбоӣ каме мураккабтар мешавад. Барои муайян кардани ҷойи ҳарфҳои калон дар тартиби мураттабсозӣ роҳҳои гуногун мавҷуданд ва муайян кардани тартиби дақиқ метавонад аз доираи мавзӯи ҳозира берун равад. Бо вуҷуди ин, аксари роҳҳои мураттабсозӣ ба чизҳое такя мекунанд, ки дар ҳамин бахш омӯхтед.
Чоп кардани рӯйхат бо тартиби баръакс
Барои баръакс кардани тартиби аслии рӯйхат метавонед методи reverse()-ро истифода баред. Агар дар аввал автомобилҳоро мувофиқи замони соҳиб шудан ба онҳо нигоҳ дошта бошем, метавонем тартиби онҳоро ба осонӣ баръакс кунем:
cars = ['bmw', 'audi', 'toyota', 'subaru']
print(cars)
cars.reverse()
print(cars)
Диққат диҳед, ки reverse() рӯйхатро бо тартиби баръакси алифбо мураттаб намекунад; он танҳо ҷойгиршавии мавҷудаи унсурҳоро баръакс мекунад:
['bmw', 'audi', 'toyota', 'subaru']
['subaru', 'toyota', 'audi', 'bmw']
Методи reverse() тартиби худи рӯйхатро тағйир медиҳад, аммо метавонед ҳар вақт онро бори дуюм ба ҳамон рӯйхат татбиқ карда, тартиби пешинаро барқарор кунед.
Муайян кардани дарозии рӯйхат
Бо функсияи len() метавонед дарозии рӯйхат, яъне шумораи унсурҳои онро, зуд муайян кунед. Рӯйхати ин намуна чор унсур дорад, бинобар ин дарозии он 4 аст:
>>> cars = ['bmw', 'audi', 'toyota', 'subaru']
>>> len(cars)
4
Функсияи len() дар бисёр корҳо муфид аст: масалан, ҳангоми муайян кардани шумораи мавҷудоти бегонае, ки дар бозӣ ҳанӯз бояд зада шаванд, муайян кардани ҳаҷми маълумот барои тасвирсозӣ ё ҳисоб кардани шумораи корбарони бақайдгирифташудаи вебсайт.
Эзоҳ: Ҳангоми ҳисоб кардани шумораи унсурҳо, Python онҳоро аз як мешуморад. Аз ин рӯ, ҳангоми муайян кардани дарозии рӯйхат набояд ба хатои як воҳид кам ё зиёд ҳисоб кардан роҳ диҳед.
Худатон бисанҷед
3-8. Саёҳати ҷаҳон: Ҳадди ақал панҷ ҷойеро интихоб кунед, ки мехоҳед дар ҷаҳон бубинед.
- Номи ҷойҳоро дар рӯйхат нигоҳ доред. Бовар ҳосил кунед, ки онҳо бо тартиби алифбо ҷойгир нашудаанд.
- Рӯйхатро бо тартиби аслиаш чоп кунед. Дар бораи намоиши зебои он фикр накунед; танҳо онро ҳамчун рӯйхати одии Python чоп кунед.
- Бо
sorted()рӯйхатро бо тартиби алифбо чоп кунед, бе он ки худи рӯйхат тағйир ёбад. - Бо чоп кардани рӯйхат нишон диҳед, ки тартиби аслии он боқӣ мондааст.
- Бо
sorted()рӯйхатро бо тартиби баръакси алифбо чоп кунед, бе тағйир додани тартиби рӯйхати аслӣ. - Рӯйхатро боз чоп карда, нишон диҳед, ки ҳанӯз бо тартиби аслиаш аст.
- Бо
reverse()тартиби рӯйхатро баръакс кунед. Онро чоп карда, тағйир ёфтани тартибро нишон диҳед. - Боз бо
reverse()тартиби рӯйхатро баръакс кунед. Онро чоп карда, нишон диҳед, ки тартиби аслӣ барқарор шудааст. - Бо
sort()рӯйхатро тавре тағйир диҳед, ки бо тартиби алифбо нигоҳ дошта шавад. Рӯйхатро чоп карда, тағйиротро нишон диҳед. - Бо
sort()рӯйхатро бо тартиби баръакси алифбо мураттаб кунед. Онро чоп карда, тағйир ёфтани тартибро нишон диҳед.
3-9. Меҳмонони зиёфат: Бо истифода аз яке аз барномаҳои машқҳои 3-4 то 3-7 функсияи len()-ро истифода баред ва паёме чоп кунед, ки шумораи шахсони ба хӯроки шом даъватшударо нишон диҳад.
3-10. Ҳамаи функсияҳо: Фикр кунед, ки кадом чизҳоро дар рӯйхат нигоҳ доштан мумкин аст. Масалан, рӯйхати кӯҳҳо, дарёҳо, кишварҳо, шаҳрҳо, забонҳо ё ҳар чизи дигари дилхоҳатонро созед. Барномае нависед, ки чунин рӯйхатро месозад ва ҳар функсия ё методи дар ин боб муаррифишударо ҳадди ақал як бор истифода мебарад.
Пешгирӣ аз хатогиҳои индекс ҳангоми кор бо рӯйхатҳо
Як навъи хато вуҷуд дорад, ки ҳангоми оғози кор бо рӯйхатҳо бисёр дучор мешавад. Фарз мекунем рӯйхате бо се унсур доред ва унсури чорумро дархост мекунед:
motorcycles.py
motorcycles = ['honda', 'yamaha', 'suzuki']
print(motorcycles[3])
Ин намуна ба хатои индекс меорад:
Traceback (most recent call last):
File "motorcycles.py", line 2, in
print(motorcycles[3])
~~~~~~~~~~~^^^
IndexError: list index out of range
Python кӯшиш мекунад унсури дорои индекси 3-ро баргардонад. Аммо ҳангоми ҷустуҷӯ дар рӯйхати motorcycles чунин индексро намеёбад. Азбаски индексгузории рӯйхат аз сифр оғоз мешавад, ин хато бисёр маъмул аст. Одамон фикр мекунанд, ки унсури сеюм рақами 3 дорад, зеро ҳисобро аз 1 оғоз мекунанд. Аммо дар Python унсури сеюм индекси 2 дорад, чун индексгузорӣ аз 0 оғоз мешавад.
Хатои индекс маънои онро дорад, ки Python дар индекси дархосткардаи шумо унсуреро ёфта наметавонад. Агар дар барномаатон чунин хато рух диҳад, санҷед, ки оё индексро як воҳид кам ё зиёд нишон надодаед. Сипас барномаро аз нав иҷро карда, дуруст будани натиҷаро санҷед.
Дар хотир доред: вақте мехоҳед ба унсури охирини рӯйхат дастрасӣ пайдо кунед, метавонед индекси -1-ро истифода баред. Барои рӯйхати ғайрихолӣ ин роҳ ҳатто вақте кор мекунад, ки шумораи унсурҳо аз замони дастрасии пешина тағйир ёфта бошад:
motorcycles = ['honda', 'yamaha', 'suzuki']
print(motorcycles[-1])
Индекси -1 унсури охирини рӯйхатро бармегардонад, ки дар ин ҳолат қимати 'suzuki' аст:
suzuki
Ин роҳ танҳо вақте ба хато меорад, ки унсури охирини рӯйхати холиро дархост кунед:
motorcycles = []
print(motorcycles[-1])
Дар рӯйхати motorcycles ягон унсур нест, бинобар ин Python боз хатои индексро бармегардонад:
Traceback (most recent call last):
File "motorcycles.py", line 2, in
print(motorcycles[-1])
~~~~~~~~~~~^^^^
IndexError: list index out of range
Агар хатои индекс рух диҳад ва роҳи ислоҳи онро ёфта натавонед, худи рӯйхат ё танҳо дарозии онро чоп кунед. Рӯйхати шумо метавонад аз он чизе, ки тасаввур мекардед, хеле фарқ кунад, махсусан агар барнома онро ҳангоми иҷро тағйир дода бошад. Дидани рӯйхати воқеӣ ё шумораи дақиқи унсурҳояш метавонад барои ёфтан ва ислоҳ кардани чунин хатогиҳои мантиқӣ кумак кунад.
Худатон бисанҷед
3-11. Хатои қасдан сохташуда: Агар то ҳол дар ягон барномаатон ба хатои индекс дучор нашуда бошед, кӯшиш кунед онро қасдан ба вуҷуд оред. Дар яке аз барномаҳо индексро тавре тағйир диҳед, ки хатои индекс пайдо шавад. Пеш аз анҷоми кор хатогиро ҳатман ислоҳ кунед.
Хулоса
Дар ин боб омӯхтед, ки рӯйхатҳо чистанд ва чӣ гуна бо унсурҳои алоҳидаи онҳо кор кардан мумкин аст. Шумо тарзи муайян кардани рӯйхат, илова кардан ва ҳазф кардани унсурҳоро омӯхтед. Ҳамчунин фаҳмидед, ки чӣ гуна рӯйхатҳоро ба таври доимӣ мураттаб кардан ё танҳо барои намоиш бо тартиби мураттаб пешниҳод намудан мумкин аст. Илова бар ин, тарзи муайян кардани дарозии рӯйхат ва пешгирӣ аз хатогиҳои индексро омӯхтед.
Дар боби 4 меомӯзед, ки чӣ гуна бо унсурҳои рӯйхат самараноктар кор кунед. Бо истифода аз давр ва ҳамагӣ чанд сатри код метавонед ҳар унсури рӯйхатро коркард намоед — ҳатто агар рӯйхат ҳазорон ё миллионҳо унсур дошта бошад.

Барномасозӣ
Олами Афсонаҳо
Ахбор
Дунё