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

Омӯзиши барномасозӣ бо Python аз сифр: насби Python ва муҳаррири код, тағйирёбандаҳо ва сатрҳо, рӯйхатҳо, дастурҳои if, луғатҳо, воридкунии маълумот ва даврҳои while, функсияҳо, классҳо, кор бо файлҳо ва истисноҳо ва санҷиши код бо pytest. Ҳар боб мисолҳои код ва машқҳои «Худатон бисанҷед» дорад. Муқаддима ва бобҳои 2–11 тарҷумаи тоҷикии китоби Эрик Маттес «Python Crash Course» (нашри 3) мебошанд; боби 1 ва замима барои ин нашр навишта шудаанд.
Агенти Зеҳнӣ · 16 октябри 2026 · 13 саҳифа · 2 писанд
Боби 4. Кор бо рӯйхатҳо
Дар боби 3 омӯхтед, ки чӣ гуна рӯйхати сода созед ва бо унсурҳои алоҳидаи он кор кунед. Дар ин боб меомӯзед, ки чӣ гуна бо истифода аз ҳамагӣ чанд сатри код ҳамаи унсурҳои рӯйхатро пайдарпай коркард кунед, новобаста аз он ки рӯйхат чӣ қадар дароз аст. Давр имкон медиҳад, ки як амал ё маҷмӯи амалҳоро барои ҳар унсури рӯйхат иҷро кунед. Дар натиҷа, метавонед бо рӯйхатҳои ҳар гуна дарозӣ, аз ҷумла рӯйхатҳое, ки ҳазорҳо ё ҳатто миллионҳо унсур доранд, самаранок кор кунед.
Гузаштан аз ҳамаи унсурҳои рӯйхат бо давр
Аксар вақт мехоҳед аз ҳамаи унсурҳои рӯйхат гузашта, барои ҳар кадом як вазифаи яксонро иҷро кунед. Масалан, дар бозӣ шояд мехоҳед ҳар унсури экранро ба як андозаи муайян ҳаракат диҳед. Дар рӯйхати ададҳо шояд мехоҳед барои ҳар унсур як амали омории яксонро иҷро кунед. Ё шояд мехоҳед сарлавҳаи ҳар мақоларо аз рӯйхати мақолаҳои вебсайт нишон диҳед. Вақте мехоҳед як амалро барои ҳар унсури рӯйхат иҷро кунед, метавонед аз даври for дар Python истифода баред.
Фарз мекунем, ки рӯйхати номи шаъбадабозонро дорем ва мехоҳем ҳар номро чоп кунем. Метавонем ҳар номро алоҳида аз рӯйхат гирем, аммо ин роҳ чанд мушкил дорад. Аввалан, барои рӯйхати дарози номҳо ин кор такрории зиёд талаб мекунад. Ғайр аз ин, ҳар боре ки шумораи унсурҳои рӯйхат тағйир меёбад, бояд кодро низ тағйир диҳем. Даври for ҳар ду мушкилро ҳал мекунад, зеро идора кардани ин равандро ба худи Python месупорад.
Биёед бо даври for ҳар номи рӯйхати шаъбадабозонро чоп кунем.
magicians.py
magicians = ['alice', 'david', 'carolina']
for magician in magicians:
print(magician)
Аввал, мисли боби 3, рӯйхатро муайян мекунем. Сипас даври for менависем. Ин сатр ба Python мегӯяд, ки номеро аз рӯйхати magicians гирифта, ба тағйирёбандаи magician нисбат диҳад. Дар сатри навбатӣ аз Python хоҳиш мекунем, ки номи ҳоло ба magician нисбатдодашударо чоп кунад. Python ин ду сатри охирро барои ҳар номи рӯйхат як бор иҷро мекунад.
Барои фаҳмидани код метавонед онро чунин бихонед: «Барои ҳар шаъбадабоз дар рӯйхати шаъбадабозон номи ӯро чоп кун». Натиҷа номи ҳар шахси рӯйхат аст:
alice
david
carolina
Нигоҳи муфассалтар ба давр
Давр яке аз роҳҳои маъмултарини худкор кардани корҳои такрорӣ дар компютер аст. Масалан, дар даври содае, ки дар magicians.py истифода бурдем, Python аввал сатри аввали даврро мехонад:
for magician in magicians:
Ин сатр ба Python мегӯяд, ки қимати аввали рӯйхати magicians-ро гирифта, ба тағйирёбандаи magician нисбат диҳад. Қимати аввал 'alice' аст. Сипас Python сатри навбатиро мехонад:
print(magician)
Python қимати ҷории magician-ро чоп мекунад, ки ҳанӯз 'alice' аст. Азбаски дар рӯйхат қиматҳои дигар низ ҳастанд, Python ба сатри аввали давр бармегардад:
for magician in magicians:
Python номи навбатии рӯйхат — 'david'-ро гирифта, онро ба тағйирёбандаи magician нисбат медиҳад. Сипас ин сатрро иҷро мекунад:
print(magician)
Python боз қимати ҷории magician-ро чоп мекунад, ки акнун 'david' аст. Баъд тамоми даврро барои қимати охирини рӯйхат — 'carolina' — як бори дигар такрор мекунад. Азбаски дар рӯйхат дигар қимате намондааст, Python ба сатри навбатии барнома мегузарад. Дар ин намуна баъд аз даври for чизе нест, бинобар ин барнома ба анҷом мерасад.
Ҳангоми бори аввал истифода бурдани даврҳо дар хотир доред, ки ин пайдарпаии қадамҳо барои ҳар унсури рӯйхат як бор такрор мешавад, новобаста аз шумораи унсурҳо. Агар рӯйхат як миллион унсур дошта бошад, Python ин қадамҳоро як миллион бор такрор мекунад — ва одатан хеле зуд.
Ҳамчунин, ҳангоми навиштани даври for метавонед барои тағйирёбандаи муваққатӣ, ки ҳар қимати рӯйхат ба он нисбат дода мешавад, ҳар номи дилхоҳро интихоб кунед. Аммо беҳтар аст номи пурмаъноеро интихоб намоед, ки як унсури рӯйхатро ифода кунад. Масалан, даврҳоро барои рӯйхати гурбаҳо, сагҳо ва маҷмӯи умумии унсурҳо чунин оғоз кардан мувофиқ аст:
for cat in cats:
for dog in dogs:
for item in list_of_items:
Ин тарзи номгузорӣ фаҳмидани амалеро осон мекунад, ки дар дохили даври for барои ҳар унсур иҷро мешавад. Истифодаи номҳои танҳо ва ҷамъ кумак мекунад, ки муайян кунед: як қисми код бо як унсури рӯйхат кор мекунад ё бо тамоми рӯйхат.
Иҷрои корҳои бештар дар дохили даври for
Дар дохили даври for бо ҳар унсур қариб ҳар кореро иҷро кардан мумкин аст. Биёед намунаи пешинаро такмил диҳем ва ба ҳар шаъбадабоз паём чоп кунем, ки ҳунараш олиҷаноб буд.
magicians.py
magicians = ['alice', 'david', 'carolina']
for magician in magicians:
print(f"{magician.title()}, ин ҳунарнамоии олиҷаноб буд!")
Ягона фарқи ин код дар он аст, ки барои ҳар шаъбадабоз паёме месозем ва онро бо номи ӯ оғоз мекунем. Дар гузариши аввали давр қимати magician ба 'alice' баробар аст, бинобар ин Python паёми аввалро бо номи 'Alice' оғоз мекунад. Дар гузариши дуюм паём бо 'David' ва дар гузариши сеюм бо 'Carolina' оғоз мешавад.
Натиҷа барои ҳар шаъбадабози рӯйхат паёми алоҳидаеро нишон медиҳад:
Alice, ин ҳунарнамоии олиҷаноб буд!
David, ин ҳунарнамоии олиҷаноб буд!
Carolina, ин ҳунарнамоии олиҷаноб буд!
Шумо метавонед дар дохили даври for ҳар қадар сатри код, ки хоҳед, нависед. Ҳар сатре, ки пас аз for magician in magicians: бо фосилагузорӣ аз аввали сатр навишта шудааст, қисми дохилии давр ҳисобида мешавад. Ҳар яке аз ин сатрҳо барои ҳар қимати рӯйхат як бор иҷро мешавад. Пас, бо ҳар қимат метавонед ҳар қадар кори зарурӣ анҷом диҳед.
Биёед ба паём сатри дуюм илова кунем ва ба ҳар шаъбадабоз бигӯем, ки ҳунарнамоии навбатии ӯро бесаброна интизорем:
magicians = ['alice', 'david', 'carolina']
for magician in magicians:
print(f"{magician.title()}, ин ҳунарнамоии олиҷаноб буд!")
print(f"Ҳунарнамоии навбатии туро бесаброна интизорам, {magician.title()}.\n")
Азбаски ҳар ду даъвати print() бо фосилагузорӣ навишта шудаанд, ҳар сатр барои ҳар як шаъбадабози рӯйхат як бор иҷро мешавад. Аломати сатри нав — "\n" — дар даъвати дуюми print() баъд аз ҳар гузариши давр як сатри холӣ мегузорад. Дар натиҷа, паёмҳои ҳар шахс ба шакли мураттаб гурӯҳбандӣ мешаванд:
Alice, ин ҳунарнамоии олиҷаноб буд!
Ҳунарнамоии навбатии туро бесаброна интизорам, Alice.
David, ин ҳунарнамоии олиҷаноб буд!
Ҳунарнамоии навбатии туро бесаброна интизорам, David.
Carolina, ин ҳунарнамоии олиҷаноб буд!
Ҳунарнамоии навбатии туро бесаброна интизорам, Carolina.
Дар даврҳои for метавонед ҳар қадар сатр, ки зарур бошад, истифода баред. Дар амал бисёр вақт муфид аст, ки дар як давр барои ҳар унсури рӯйхат якчанд амали гуногун иҷро кунед.
Иҷрои амал баъд аз даври for
Пас аз анҷоми даври for чӣ рӯй медиҳад? Одатан мехоҳед натиҷаҳоро ҷамъбаст кунед ё ба корҳои дигари барнома гузаред.
Ҳар сатри коде, ки баъд аз даври for бе фосилагузорӣ навишта шудааст, танҳо як бор, бе такрор иҷро мешавад. Биёед ба ҳамаи шаъбадабозон барои намоиши олиҷанобашон ташаккур гӯем. Барои он ки паёми умумӣ баъд аз ҳамаи паёмҳои шахсӣ нишон дода шавад, онро пас аз давр ва бе фосилагузорӣ менависем:
magicians = ['alice', 'david', 'carolina']
for magician in magicians:
print(f"{magician.title()}, ин ҳунарнамоии олиҷаноб буд!")
print(f"Ҳунарнамоии навбатии туро бесаброна интизорам, {magician.title()}.\n")
print("Ба ҳамаатон ташаккур. Ин намоиши олиҷаноби шаъбадабозӣ буд!")
Ду даъвати аввали print() барои ҳар номи рӯйхат як бор такрор мешаванд. Аммо сатри охирин фосилагузорӣ надорад, бинобар ин танҳо як бор чоп мешавад:
Alice, ин ҳунарнамоии олиҷаноб буд!
Ҳунарнамоии навбатии туро бесаброна интизорам, Alice.
David, ин ҳунарнамоии олиҷаноб буд!
Ҳунарнамоии навбатии туро бесаброна интизорам, David.
Carolina, ин ҳунарнамоии олиҷаноб буд!
Ҳунарнамоии навбатии туро бесаброна интизорам, Carolina.
Ба ҳамаатон ташаккур. Ин намоиши олиҷаноби шаъбадабозӣ буд!
Ҳангоми коркарди маълумот бо даври for ин роҳ барои ҷамъбаст кардани амале, ки ба тамоми маҷмӯи маълумот татбиқ шудааст, мувофиқ аст. Масалан, барои омода кардани бозӣ метавонед аз рӯйхати қаҳрамонҳо гузашта, ҳар қаҳрамонро дар экран нишон диҳед. Сипас баъд аз давр коди иловагӣ менависед, ки пас аз пайдо шудани ҳамаи қаҳрамонҳо тугмаи «Ҳозир бозӣ кун»-ро намоиш диҳад.
Пешгирӣ аз хатогиҳои фосилагузорӣ
Python аз фосилагузорӣ дар аввали сатр (indentation) истифода мебарад, то муайян кунад, ки як сатр ё гурӯҳи сатрҳо бо қисмҳои дигари барнома чӣ робита доранд. Дар намунаҳои пешина сатрҳои чопкунандаи паёмҳои шахсӣ қисми даври for буданд, зеро бо фосилагузорӣ навишта шуда буданд.
Ин хусусияти Python хондани кодро осон мекунад. Аслан, Python бо истифода аз фосилаҳо шуморо водор мекунад, ки кодро бо сохтори равшан ва намуди мураттаб нависед. Дар барномаҳои дарозтар мебинед, ки блокҳои код дар чанд сатҳи гуногуни фосилагузорӣ ҷойгир шудаанд. Ин сатҳҳо ба шумо дарки умумии сохтори барномаро медиҳанд.
Вақте ба навиштани коде оғоз мекунед, ки ба фосилагузории дуруст такя мекунад, бояд ба чанд хатои маъмул диққат диҳед. Масалан, баъзан одамон сатрҳои нолозимро бо фосилагузорӣ менависанд ё фосилагузории сатрҳои заруриро фаромӯш мекунанд. Дидани чунин намунаҳо ҳоло ба шумо кумак мекунад, ки дар оянда аз ин хатогиҳо пешгирӣ намоед ва агар дар барномаҳоятон пайдо шаванд, онҳоро ислоҳ кунед.
Биёед чанд хатои маъмултарини фосилагузориро дида бароем.
Фаромӯш кардани фосилагузорӣ
Ҳамеша сатри баъд аз дастури for-ро бо фосилагузорӣ нависед. Агар фаромӯш кунед, Python ба шумо ёдрас мекунад.
magicians.py
magicians = ['alice', 'david', 'carolina']
for magician in magicians:
print(magician)
Даъвати print() бояд бо фосилагузорӣ навишта мешуд, аммо чунин нашудааст. Вақте Python блоки дорои фосилагузориро интизор мешавад ва онро намеёбад, сатри мушкилдорро нишон медиҳад:
File "magicians.py", line 3
print(magician)
^
IndentationError: expected an indented block after 'for' statement on line 2
Одатан ин хатогиро бо илова кардани фосилагузорӣ ба сатр ё сатрҳои бевосита баъд аз дастури for ислоҳ кардан мумкин аст.
Фаромӯш кардани фосилагузории сатрҳои иловагӣ
Баъзан давр бе ягон паёми хато иҷро мешавад, аммо натиҷаи интизоршударо намедиҳад. Ин ҳолат вақте рух дода метавонад, ки дар дохили давр чанд вазифаро иҷро кардан мехоҳед, вале фосилагузории баъзе сатрҳоро фаромӯш мекунед.
Масалан, агар фосилагузории сатри дуюмеро, ки ба ҳар шаъбадабоз аз интизори ҳунарнамоии навбатиаш будани мо хабар медиҳад, фаромӯш кунем, чунин мешавад:
magicians = ['alice', 'david', 'carolina']
for magician in magicians:
print(f"{magician.title()}, ин ҳунарнамоии олиҷаноб буд!")
print(f"Ҳунарнамоии навбатии туро бесаброна интизорам, {magician.title()}.\n")
Даъвати дуюми print() бояд бо фосилагузорӣ навишта мешуд. Аммо азбаски Python пас аз дастури for ҳадди ақал як сатри дорои фосилагузорӣ меёбад, паёми хато намедиҳад.
Дар натиҷа, даъвати якуми print() барои ҳар номи рӯйхат як бор иҷро мешавад, зеро дар дохили давр аст. Даъвати дуюм фосилагузорӣ надорад, бинобар ин танҳо баъд аз анҷоми давр як бор иҷро мешавад. Азбаски қимати охирини magician ба 'carolina' баробар аст, танҳо ӯ паёми интизори ҳунарнамоии навбатӣ будани моро мегирад:
Alice, ин ҳунарнамоии олиҷаноб буд!
David, ин ҳунарнамоии олиҷаноб буд!
Carolina, ин ҳунарнамоии олиҷаноб буд!
Ҳунарнамоии навбатии туро бесаброна интизорам, Carolina.
Ин хатои мантиқӣ аст. Аз ҷиҳати синтаксис код дуруст аст, аммо бо сабаби мушкил дар мантиқ натиҷаи дилхоҳро намедиҳад. Агар интизор бошед, ки амале барои ҳар унсури рӯйхат такрор шавад, вале он танҳо як бор иҷро гардад, санҷед, ки оё ба як сатр ё гурӯҳи сатрҳо фосилагузорӣ илова кардан лозим аст.
Фосилагузории нолозим
Агар тасодуфан ба сатре фосилагузорӣ илова кунед, ки ба он эҳтиёҷ надорад, Python дар бораи фосилагузории ғайричашмдошт хабар медиҳад.
hello_world.py
message = "Салом, ҷаҳони Python!"
print(message)
Ба даъвати print() фосилагузорӣ лозим нест, зеро он қисми давр нест. Аз ин рӯ, Python чунин хато медиҳад:
File "hello_world.py", line 2
print(message)
^
IndentationError: unexpected indent
Барои пешгирӣ аз ин хато танҳо вақте фосилагузорӣ истифода баред, ки сабаби муайяне доред. Дар барномаҳое, ки ҳоло менависед, танҳо он амалҳо бояд бо фосилагузорӣ навишта шаванд, ки мехоҳед барои ҳар унсури даври for такрор гарданд.
Фосилагузории нолозим баъд аз давр
Агар коде, ки бояд баъд аз анҷоми давр иҷро шавад, тасодуфан бо фосилагузорӣ навишта шавад, он барои ҳар унсури рӯйхат як бор такрор мешавад. Баъзан ин боиси паёми хато мегардад, аммо бештар ба хатои мантиқӣ меорад.
Масалан, бубинем, ки агар сатри ташаккур ба ҳамаи шаъбадабозонро тасодуфан дар дохили давр ҷойгир кунем, чӣ мешавад.
magicians.py
magicians = ['alice', 'david', 'carolina']
for magician in magicians:
print(f"{magician.title()}, ин ҳунарнамоии олиҷаноб буд!")
print(f"Ҳунарнамоии навбатии туро бесаброна интизорам, {magician.title()}.\n")
print("Ба ҳамаатон ташаккур. Ин намоиши олиҷаноби шаъбадабозӣ буд!")
Азбаски сатри охирин фосилагузорӣ дорад, барои ҳар шахси рӯйхат як бор чоп мешавад:
Alice, ин ҳунарнамоии олиҷаноб буд!
Ҳунарнамоии навбатии туро бесаброна интизорам, Alice.
Ба ҳамаатон ташаккур. Ин намоиши олиҷаноби шаъбадабозӣ буд!
David, ин ҳунарнамоии олиҷаноб буд!
Ҳунарнамоии навбатии туро бесаброна интизорам, David.
Ба ҳамаатон ташаккур. Ин намоиши олиҷаноби шаъбадабозӣ буд!
Carolina, ин ҳунарнамоии олиҷаноб буд!
Ҳунарнамоии навбатии туро бесаброна интизорам, Carolina.
Ба ҳамаатон ташаккур. Ин намоиши олиҷаноби шаъбадабозӣ буд!
Ин хатои дигари мантиқӣ аст, ки ба хатои бахши «Фаромӯш кардани фосилагузории сатрҳои иловагӣ» монанд мебошад. Python намедонад, ки шумо бо кодатон ба чӣ натиҷа расидан мехоҳед. Аз ин рӯ, ҳар коди дорои синтаксиси дурустро иҷро мекунад. Агар амале, ки бояд танҳо як бор иҷро шавад, чандин бор такрор гардад, эҳтимол фосилагузории он сатрро бояд бардоред.
Фаромӯш кардани дунуқта
Дунуқтаи охири дастури for ба Python мегӯяд, ки сатри навбатӣ оғози баданаи давр аст:
magicians = ['alice', 'david', 'carolina']
for magician in magicians
print(magician)
Агар дунуқтаро тасодуфан фаромӯш кунед, хатои синтаксисӣ мегиред, зеро Python дақиқ намефаҳмад, ки чӣ кор кардан мехоҳед:
File "magicians.py", line 2
for magician in magicians
^
SyntaxError: expected ':'
Python намедонад, ки шумо танҳо дунуқтаро фаромӯш кардед ё мехостед барои сохтани даври мураккабтар коди дигар илова кунед. Агар интерпретатор ислоҳи эҳтимолиро муайян карда тавонад, онро пешниҳод мекунад. Дар ин намуна паёми expected ':' пешниҳод мекунад, ки ба охири сатр дунуқта илова кунед.
Баъзе хатогиҳо ба шарофати пешниҳодҳои паёми хато ислоҳи сода ва равшан доранд. Баъзеи дигарро ёфтан душвортар аст, ҳатто агар дар ниҳоят танҳо як аломатро иваз кардан лозим шавад. Агар барои ёфтани ислоҳи хурд вақти зиёд сарф кунед, рӯҳафтода нашавед: ин таҷриба барои бисёр барномасозон шинос аст.
Худатон бисанҷед
4-1. Питсаҳо: Ҳадди ақал се навъи питсаи дӯстдоштаатонро интихоб кунед. Номи онҳоро дар рӯйхат нигоҳ доред ва бо даври for номи ҳар питсаро чоп кунед.
- Даврро тағйир диҳед, то ба ҷойи танҳо номи питса ҷумлае бо номи он чоп шавад. Барои ҳар питса бояд як сатри натиҷа дошта бошед, масалан: «Ман питсаи пепперониро дӯст медорам».
- Дар охири барнома, берун аз даври
for, сатре илова кунед, ки то чӣ андоза питсаро дӯст доштани шуморо баён кунад. Натиҷа бояд аз се ё зиёда сатр дар бораи питсаҳои дӯстдоштаатон ва як ҷумлаи иловагӣ, масалан «Ман питсаро хеле дӯст медорам!», иборат бошад.
4-2. Ҳайвонот: Ҳадди ақал се ҳайвони гуногунеро интихоб кунед, ки хусусияти умумӣ доранд. Номи онҳоро дар рӯйхат нигоҳ доред ва бо даври for номи ҳар ҳайвонро чоп кунед.
- Барномаро тағйир диҳед, то дар бораи ҳар ҳайвон ҷумлае чоп кунад, масалан: «Саг метавонад ҳайвони хуби хонагӣ бошад».
- Дар охири барнома сатре илова кунед, ки хусусияти умумии ин ҳайвонҳоро баён намояд. Масалан: «Ҳар яке аз ин ҳайвонҳо метавонад ҳайвони хуби хонагӣ бошад!»
Сохтани рӯйхатҳои ададӣ
Барои нигоҳ доштани маҷмӯи ададҳо сабабҳои зиёд мавҷуданд. Масалан, дар бозӣ бояд мавқеи ҳар қаҳрамонро пайгирӣ кунед ва шояд мехоҳед холҳои беҳтарини бозигарро низ нигоҳ доред. Ҳангоми тасвирсозии маълумот қариб ҳамеша бо маҷмӯаҳои ададӣ кор мекунед: ҳарорат, масофа, шумораи аҳолӣ, арз ва тӯли ҷуғрофӣ ва дигар маълумоти ададӣ.
Рӯйхатҳо барои нигоҳ доштани маҷмӯи ададҳо хеле мувофиқанд. Python воситаҳои гуногунеро пешниҳод мекунад, ки ба шумо барои кори самаранок бо чунин рӯйхатҳо кумак мекунанд. Вақте истифодаи дурусти ин воситаҳоро меомӯзед, коди шумо ҳатто бо рӯйхатҳое, ки миллионҳо унсур доранд, хуб кор мекунад.
Истифодаи функсияи range()
Функсияи range() дар Python сохтани пайдарпаии ададҳоро осон мекунад. Масалан, бо ин функсия метавонед пайдарпаии ададҳоро чунин чоп кунед.
first_numbers.py
for value in range(1, 5):
print(value)
Гарчанде аз намуди код чунин менамояд, ки он ададҳои аз 1 то 5-ро чоп мекунад, адади 5 чоп намешавад:
1
2
3
4
Дар ин намуна бо истифода аз range() танҳо ададҳои аз 1 то 4 чоп мешаванд. Ин боз як ҳолати марбут ба фарқи яквоҳидии ҳудудҳост, ки дар забонҳои барномасозӣ бисёр вомехӯрад.
Функсияи range() пайдарпаиро аз қимати аввали додашуда оғоз мекунад ва пеш аз қимати дуюм қатъ мекунад. Аз ин рӯ, қимати охир ба натиҷа дохил намешавад. Дар ин ҳолат он қимат 5 аст.
Барои чоп кардани ададҳои аз 1 то 5 бояд range(1, 6)-ро истифода баред:
for value in range(1, 6):
print(value)
Ин дафъа натиҷа аз 1 оғоз шуда, бо 5 анҷом меёбад:
1
2
3
4
5
Агар ҳангоми истифодаи range() натиҷа аз интизоратон фарқ кунад, санҷед, ки оё қимати ҳудуди охирро як воҳид тағйир додан лозим аст.
Ба range() инчунин метавонед танҳо як аргумент диҳед. Дар ин ҳолат пайдарпаӣ аз 0 оғоз мешавад. Масалан, range(6) ададҳои аз 0 то 5-ро дар бар мегирад.
Сохтани рӯйхати ададҳо бо range()
Агар хоҳед рӯйхати ададҳо созед, метавонед бо функсияи list() пайдарпаии range()-ро бевосита ба рӯйхат табдил диҳед. Вақте даъвати range()-ро дар дохили list() ҷойгир мекунед, рӯйхати ададҳо ҳосил мешавад.
Дар бахши пешина танҳо пайдарпаии ададҳоро чоп кардем. Акнун бо list() ҳамон ададҳоро ба рӯйхат табдил медиҳем:
numbers = list(range(1, 6))
print(numbers)
Натиҷа чунин аст:
[1, 2, 3, 4, 5]
Бо функсияи range() инчунин метавонед муайян кунед, ки ададҳо бо кадом қадам ҳосил шаванд. Агар ба range() аргументи сеюм диҳед, Python онро ҳамчун андозаи қадам истифода мебарад.
Масалан, рӯйхати ададҳои ҷуфти аз 1 то 10-ро чунин месозем.
even_numbers.py
even_numbers = list(range(2, 11, 2))
print(even_numbers)
Дар ин намуна range() аз қимати 2 оғоз мекунад ва барои ҳосил кардани ҳар қимати нав ба қимати пешина 2 илова мекунад. Ин раванд то пеш аз расидан ба ҳудуди 11 ё гузаштан аз он идома меёбад. Натиҷа чунин аст:
[2, 4, 6, 8, 10]
Бо функсияи range() метавонед маҷмӯаҳои гуногуни ададӣ созед. Масалан, фикр кунед, ки чӣ гуна рӯйхати квадратҳои даҳ адади аввалро сохтан мумкин аст, яъне квадрати ҳар адади бутуни аз 1 то 10-ро. Дар Python ду ситорача — ** — амали ба дараҷа бардоштанро ифода мекунанд. Квадратҳои ин даҳ ададро чунин ба рӯйхат ҷойгир кардан мумкин аст.
square_numbers.py
squares = []
for value in range(1, 11):
square = value ** 2
squares.append(square)
print(squares)
Аз рӯйхати холӣ бо номи squares оғоз мекунем. Сипас бо истифода аз range() ба Python мегӯем, ки аз ҳар қимати аз 1 то 10 гузарад. Дар дохили давр қимати ҷорӣ ба дараҷаи дуюм бардошта шуда, ба тағйирёбандаи square нисбат дода мешавад. Баъд ҳар қимати нави square ба охири рӯйхати squares илова мешавад. Пас аз анҷоми давр рӯйхати квадратҳо чоп мегардад:
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
Барои кӯтоҳтар навиштани код метавонед тағйирёбандаи муваққатии square-ро истифода набаред ва ҳар қимати навро бевосита ба рӯйхат илова кунед:
squares = []
for value in range(1, 11):
squares.append(value ** 2)
print(squares)
Ин сатр ҳамон кореро иҷро мекунад, ки дар намунаи пешина ду сатри дохили давр иҷро мекарданд. Ҳар қимат ба дараҷаи дуюм бардошта шуда, фавран ба рӯйхати квадратҳо илова мешавад.
Ҳангоми сохтани рӯйхатҳои мураккабтар метавонед ҳар ду роҳро истифода баред. Баъзан тағйирёбандаи муваққатӣ хондани кодро осон мекунад; баъзан бошад, кодро беҳуда дароз менамояд. Аввал кӯшиш кунед коде нависед, ки онро равшан мефаҳмед ва кори дилхоҳатонро иҷро мекунад. Сипас ҳангоми бознигарии код роҳҳои самараноктарро ҷустуҷӯ кунед.
Амалҳои содаи оморӣ бо рӯйхати ададҳо
Ҳангоми кор бо рӯйхатҳои ададӣ чанд функсияи Python муфид аст. Масалан, метавонед қимати хурдтарин, қимати калонтарин ва маҷмӯи ададҳои рӯйхатро ба осонӣ ёбед:
>>> digits = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
>>> min(digits)
0
>>> max(digits)
9
>>> sum(digits)
45
Эзоҳ: Дар намунаҳои ин бахш рӯйхатҳои кӯтоҳи ададӣ истифода шудаанд, то дар саҳифа ба осонӣ ҷой гиранд. Ин функсияҳо барои рӯйхатҳое, ки як миллион ё бештар адад доранд, низ кор мекунанд.
Сохтани фишурдаи рӯйхат — List Comprehension
Роҳе, ки пештар барои сохтани рӯйхати squares истифода бурдем, се ё чор сатри кодро талаб мекард. Ифодаи фишурдаи сохтани рӯйхат (list comprehension) имкон медиҳад, ки ҳамон рӯйхатро бо як сатри код созед. Он даври for ва сохтани унсурҳои навро дар як сатр муттаҳид мекунад ва ҳар унсури навро худкор ба рӯйхат дохил менамояд.
Ин тарзи навиштро на ҳамеша ба навкорон меомӯзонанд, аммо ман онро дар ин ҷо овардам, зеро ҳангоми дидани коди дигарон эҳтимол ба зудӣ ба он дучор мешавед.
Намунаи зерин ҳамон рӯйхати квадратҳоро месозад, аммо бо истифода аз list comprehension.
squares.py
squares = [value ** 2 for value in range(1, 11)]
print(squares)
Барои истифодаи ин тарзи навишт аввал барои рӯйхат номи фаҳмо, масалан squares, интихоб кунед. Сипас қавси мураббаъро кушоед ва ифодаеро нависед, ки қиматҳои рӯйхати навро муайян мекунад. Дар ин намуна ифода value ** 2 аст, ки қиматро ба дараҷаи дуюм мебардорад.
Баъд қисми for-ро нависед, то ададҳои ба ифода додашавандаро ҳосил кунад, ва қавси мураббаъро пӯшед. Дар ин намуна қисми for value in range(1, 11) қиматҳои аз 1 то 10-ро ба ифодаи value ** 2 медиҳад. Диққат диҳед, ки дар охири қисми for дунуқта истифода намешавад.
Натиҷа ҳамон рӯйхати квадратҳои пешина аст:
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
Барои навиштани чунин ифодаҳо машқ лозим аст, аммо баъд аз он ки сохтани рӯйхатҳои одиро хуб аз худ мекунед, муфид будани онҳоро эҳсос хоҳед кард. Агар барои сохтани рӯйхатҳо се ё чор сатри код нависед ва ин кор такрорӣ намояд, истифодаи list comprehension-ро баррасӣ кунед.
Худатон бисанҷед
4-3. Ҳисоб то бист: Бо даври for ададҳои аз 1 то 20-ро, бо дохил кардани ҳар ду ҳудуд, чоп кунед.
4-4. Як миллион: Рӯйхати ададҳои аз 1 то 1 000 000-ро созед ва бо даври for онҳоро чоп кунед. Агар чоп кардан хеле тӯл кашад, онро бо пахши CTRL-C ё бастани равзанаи натиҷа қатъ кунед.
4-5. Ҷамъи як миллион адад: Рӯйхати ададҳои аз 1 то 1 000 000-ро созед. Бо min() ва max() санҷед, ки рӯйхат воқеан аз 1 оғоз шуда, бо 1 000 000 анҷом меёбад. Инчунин бо sum() бубинед, ки Python як миллион ададро чӣ қадар зуд ҷамъ мекунад.
4-6. Ададҳои тоқ: Бо истифода аз аргументи сеюми range() рӯйхати ададҳои тоқи аз 1 то 20-ро созед. Ҳар ададро бо даври for чоп кунед.
4-7. Ададҳои каратии 3: Рӯйхати ададҳои каратии 3-ро аз 3 то 30 созед. Бо даври for ададҳои рӯйхатро чоп кунед.
4-8. Кубҳо: Ададе, ки ба дараҷаи сеюм бардошта шудааст, куб номида мешавад. Масалан, куби 2 дар Python ҳамчун 2 ** 3 навишта мешавад. Рӯйхати кубҳои даҳ адади аввалро созед, яъне куби ҳар адади бутуни аз 1 то 10-ро. Бо даври for қимати ҳар кубро чоп кунед.
4-9. Сохтани фишурдаи рӯйхати кубҳо: Бо истифода аз list comprehension рӯйхати кубҳои даҳ адади аввалро созед.
Кор бо як қисми рӯйхат
Дар боби 3 тарзи дастрасӣ ба унсурҳои алоҳидаи рӯйхатро омӯхтед. Дар ин боб бошад, кор бо ҳамаи унсурҳои рӯйхатро меомӯзед. Ҳамчунин метавонед бо гурӯҳи муайяни унсурҳои рӯйхат кор кунед, ки дар Python буриш (slice) ном дорад.
Гирифтани буриши рӯйхат
Барои сохтани буриш индекси оғоз ва ҳудуди анҷоми қисми дилхоҳро нишон медиҳед. Мисли функсияи range(), Python пеш аз индекси дуюми нишондода қатъ мекунад. Барои гирифтани се унсури аввал индексҳои 0 ва 3-ро нишон медиҳед; дар натиҷа унсурҳои дорои индексҳои 0, 1 ва 2 гирифта мешаванд.
Дар намунаи зерин рӯйхати бозигарони даста истифода мешавад.
players.py
players = ['charles', 'martina', 'michael', 'florence', 'eli']
print(players[0:3])
Ин код буриши рӯйхатро чоп мекунад. Натиҷа сохтори рӯйхатро нигоҳ медорад ва се бозигари аввалро дар бар мегирад:
['charles', 'martina', 'michael']
Метавонед қисмҳои гуногуни рӯйхатро гиред. Масалан, агар унсурҳои дуюм, сеюм ва чорумро хоҳед, буришро аз индекси 1 оғоз карда, ҳудуди анҷомро 4 нишон медиҳед:
players = ['charles', 'martina', 'michael', 'florence', 'eli']
print(players[1:4])
Ин дафъа буриш бо 'martina' оғоз шуда, бо 'florence' анҷом меёбад:
['martina', 'michael', 'florence']
Агар индекси аввалро нанависед, Python буришро худкор аз аввали рӯйхат оғоз мекунад:
players = ['charles', 'martina', 'michael', 'florence', 'eli']
print(players[:4])
Бе индекси оғоз, Python аз аввали рӯйхат оғоз мекунад:
['charles', 'martina', 'michael', 'florence']
Агар хоҳед буриш то охири рӯйхат идома ёбад, тарзи монандро истифода мебаред. Масалан, барои гирифтани ҳамаи унсурҳо аз унсури сеюм то охирин метавонед аз индекси 2 оғоз карда, индекси дуюмро нанависед:
players = ['charles', 'martina', 'michael', 'florence', 'eli']
print(players[2:])
Python ҳамаи унсурҳоро аз унсури сеюм то охири рӯйхат бармегардонад:
['michael', 'florence', 'eli']
Ин тарзи навишт имкон медиҳад, ки аз ҳар мавқеи рӯйхат то охири он ҳамаи унсурҳоро гиред, новобаста аз дарозии рӯйхат.
Ба ёд оред, ки индекси манфӣ мавқеи унсурро нисбат ба охири рӯйхат муайян мекунад. Аз ин рӯ, метавонед буришҳоро аз охири рӯйхат низ гиред. Масалан, барои гирифтани се бозигари охирин аз players[-3:] истифода мебарем:
players = ['charles', 'martina', 'michael', 'florence', 'eli']
print(players[-3:])
Ин код номи се бозигари охиринро чоп мекунад ва ҳатто ҳангоми тағйир ёфтани шумораи бозигарон низ кор мекунад.
Эзоҳ: Дар қавсҳои буриш қимати сеюмро низ нишон додан мумкин аст. Ин қимат андозаи қадамро муайян мекунад. Масалан, қадами 2 маънои гирифтани ҳар унсури дуюмро дорад.
Гузаштан аз унсурҳои буриш бо давр
Агар хоҳед танҳо аз қисми муайяни рӯйхат гузаред, метавонед буришро дар даври for истифода баред. Дар намунаи навбатӣ аз се бозигари аввал гузашта, номи онҳоро ҳамчун рӯйхати содаи аъзои даста чоп мекунем:
players = ['charles', 'martina', 'michael', 'florence', 'eli']
print("Инҳо се бозигари аввали дастаи ман ҳастанд:")
for player in players[:3]:
print(player.title())
Python ба ҷойи гузаштан аз тамоми рӯйхати бозигарон танҳо аз се номи аввал мегузарад:
Инҳо се бозигари аввали дастаи ман ҳастанд:
Charles
Martina
Michael
Буришҳо дар ҳолатҳои гуногун хеле муфиданд. Масалан, ҳангоми сохтани бозӣ метавонед баъд аз ҳар анҷоми бозӣ холи ниҳоии бозигарро ба рӯйхат илова кунед. Баъд рӯйхатро бо тартиби камшавӣ мураттаб карда, буриши се унсури аввалро мегиред ва се натиҷаи беҳтарини ӯро меёбед.
Ҳангоми кор бо маълумот метавонед буришҳоро барои коркарди маълумот дар қисмҳои андозаи муайян истифода баред. Ё ҳангоми сохтани веббарнома метавонед бо буришҳо маълумотро ба чанд саҳифа ҷудо намоед, то дар ҳар саҳифа миқдори мувофиқи маълумот нишон дода шавад.
Нусхабардории рӯйхат
Аксар вақт мехоҳед дар асоси рӯйхати мавҷуда рӯйхати комилан нав созед. Биёед тарзи нусхабардории рӯйхатро омӯзем ва як ҳолати муфид будани онро дида бароем.
Барои нусхабардории рӯйхат метавонед буришеро созед, ки тамоми рӯйхати аслиро дар бар мегирад. Барои ин индекси аввал ва дуюмро нанависед: [:]. Ин ба Python мегӯяд, ки буришро аз унсури аввал то унсури охирин созад ва ҳамин тавр нусхаи тамоми рӯйхатро ҳосил кунад.
Масалан, тасаввур кунед рӯйхати хӯрокҳои дӯстдоштаамонро дорем ва мехоҳем барои дӯстамон рӯйхати алоҳида созем. Ҳоло дӯсти мо ҳамаи хӯрокҳои рӯйхати моро дӯст медорад, бинобар ин рӯйхати ӯро аз рӯйхати худ нусхабардорӣ мекунем.
foods.py
my_foods = ['pizza', 'falafel', 'carrot cake']
friend_foods = my_foods[:]
print("Хӯрокҳои дӯстдоштаи ман:")
print(my_foods)
print("\nХӯрокҳои дӯстдоштаи дӯстам:")
print(friend_foods)
Аввал рӯйхати хӯрокҳои дӯстдоштаамонро бо номи my_foods месозем. Сипас рӯйхати наве бо номи friend_foods месозем. Бо дархости буриши my_foods бе нишон додани индексҳо нусхаи онро ҳосил карда, ба friend_foods нисбат медиҳем. Ҳангоми чоп кардани рӯйхатҳо мебинем, ки ҳар ду ҳамон хӯрокҳоро дар бар мегиранд:
Хӯрокҳои дӯстдоштаи ман:
['pizza', 'falafel', 'carrot cake']
Хӯрокҳои дӯстдоштаи дӯстам:
['pizza', 'falafel', 'carrot cake']
Барои нишон додани он ки воқеан ду рӯйхати ҷудогона дорем, ба ҳар рӯйхат хӯроки нав илова мекунем. Сипас нишон медиҳем, ки ҳар рӯйхат хӯрокҳои дӯстдоштаи шахси мувофиқро нигоҳ медорад:
my_foods = ['pizza', 'falafel', 'carrot cake']
friend_foods = my_foods[:]
my_foods.append('cannoli')
friend_foods.append('ice cream')
print("Хӯрокҳои дӯстдоштаи ман:")
print(my_foods)
print("\nХӯрокҳои дӯстдоштаи дӯстам:")
print(friend_foods)
Мисли намунаи пешина унсурҳои my_foods-ро ба рӯйхати нави friend_foods нусхабардорӣ мекунем. Сипас ба ҳар рӯйхат як хӯроки нав илова менамоем: ба my_foods қимати 'cannoli' ва ба friend_foods қимати 'ice cream'-ро.
Баъд ҳар ду рӯйхатро чоп мекунем, то санҷем, ки ҳар хӯрок дар рӯйхати мувофиқ ҷой гирифтааст:
Хӯрокҳои дӯстдоштаи ман:
['pizza', 'falafel', 'carrot cake', 'cannoli']
Хӯрокҳои дӯстдоштаи дӯстам:
['pizza', 'falafel', 'carrot cake', 'ice cream']
Натиҷа нишон медиҳад, ки ҳоло 'cannoli' дар рӯйхати ман ҳаст, аммо 'ice cream' нест. Дар рӯйхати дӯстам бошад, 'ice cream' ҳаст, аммо 'cannoli' нест.
Агар танҳо friend_foods = my_foods менавиштем, ду рӯйхати ҷудогона ҳосил намешуд. Масалан, ҳангоми кӯшиши нусхабардории рӯйхат бе истифодаи буриш чунин мешавад:
my_foods = ['pizza', 'falafel', 'carrot cake']
# Ин роҳ нусхаи ҷудогона намесозад:
friend_foods = my_foods
my_foods.append('cannoli')
friend_foods.append('ice cream')
print("Хӯрокҳои дӯстдоштаи ман:")
print(my_foods)
print("\nХӯрокҳои дӯстдоштаи дӯстам:")
print(friend_foods)
Ба ҷойи он ки нусхаи my_foods-ро ба friend_foods нисбат диҳем, ҳар ду тағйирёбандаро ба як рӯйхат пайваст кардем. Ин тарзи навишт ба Python мегӯяд, ки тағйирёбандаи нави friend_foods ба ҳамон рӯйхате ишора кунад, ки my_foods ба он ишора мекунад.
Дар натиҷа, вақте 'cannoli'-ро ба my_foods илова мекунем, он тавассути friend_foods низ дида мешавад. Ҳамин тавр, 'ice cream' дар ҳар ду пайдо мешавад, гарчанде дар код онро танҳо ба friend_foods илова кардаем.
Натиҷа нишон медиҳад, ки ҳар ду ном ҳоло як рӯйхати яксонро нишон медиҳанд, ки мақсади мо набуд:
Хӯрокҳои дӯстдоштаи ман:
['pizza', 'falafel', 'carrot cake', 'cannoli', 'ice cream']
Хӯрокҳои дӯстдоштаи дӯстам:
['pizza', 'falafel', 'carrot cake', 'cannoli', 'ice cream']
Эзоҳ: Ҳоло аз ҷузъиёти ин намуна нигарон нашавед. Агар бо нусхаи рӯйхат кор кардан хоҳед ва рафтори ғайричашмдошт бинед, санҷед, ки рӯйхатро мисли намунаи аввал бо истифода аз буриш нусхабардорӣ кардаед.
Худатон бисанҷед
4-10. Буришҳо: Яке аз барномаҳои дар ин боб навиштаатонро интихоб кунед ва ба охири он чанд сатр илова намоед, ки корҳои зеринро иҷро кунанд:
- Паёми «Се унсури аввали рӯйхат:»-ро чоп кунед. Сипас бо буриш се унсури аввалро чоп намоед.
- Паёми «Се унсур аз миёнаи рӯйхат:»-ро чоп кунед. Сипас бо буриш се унсурро аз миёнаи рӯйхат чоп намоед.
- Паёми «Се унсури охирини рӯйхат:»-ро чоп кунед. Сипас бо буриш се унсури охиринро чоп намоед.
4-11. Питсаҳои ман ва питсаҳои ту: Корро аз барномаи машқи 4-1 оғоз кунед. Нусхаи рӯйхати питсаҳоро сохта, онро friend_pizzas ном гузоред. Сипас:
- Ба рӯйхати аслӣ як питсаи нав илова кунед.
- Ба рӯйхати
friend_pizzasпитсаи дигари нав илова кунед. - Нишон диҳед, ки ду рӯйхати ҷудогона доред. Паёми «Питсаҳои дӯстдоштаи ман:»-ро чоп карда, бо даври
forрӯйхати аввалро чоп кунед. Сипас паёми «Питсаҳои дӯстдоштаи дӯстам:»-ро чоп карда, бо давриforрӯйхати дуюмро чоп намоед. Бовар ҳосил кунед, ки ҳар питсаи нав дар рӯйхати мувофиқ нигоҳ дошта мешавад.
4-12. Даврҳои бештар: Дар ҳамаи намунаҳои foods.py-и ин бахш барои сарфаи ҷой ҳангоми чоп аз даври for истифода нашудааст. Яке аз ин намунаҳоро интихоб карда, ду даври for нависед, то унсурҳои ҳар рӯйхати хӯрокҳоро алоҳида чоп кунанд.
Кортежҳо — Tuples
Рӯйхатҳо барои нигоҳ доштани маҷмӯи унсурҳое мувофиқанд, ки дар давоми кори барнома тағйир ёфта метавонанд. Имконияти тағйир додани рӯйхатҳо махсусан ҳангоми кор бо рӯйхати корбарони вебсайт ё қаҳрамонҳои бозӣ муҳим аст. Аммо баъзан мехоҳед маҷмӯи унсурҳое созед, ки тағйир додани онҳо иҷозат дода нашавад. Кортежҳо (tuples) барои ҳамин истифода мешаванд.
Дар Python қиматҳое, ки тағйир дода намешаванд, тағйирнопазир (immutable) ном доранд. Кортеж сохтори пайдарпайи тағйирнопазир аст.
Муайян кардани кортеж
Кортеж ба рӯйхат монанд аст, аммо ба ҷойи қавсҳои мураббаъ одатан қавсҳои гирд истифода мешаванд. Пас аз муайян кардани кортеж метавонед мисли рӯйхат бо индекси ҳар унсур ба он дастрасӣ пайдо кунед.
Масалан, агар росткунҷае дошта бошем, ки андозааш бояд ҳамеша муайян бошад, метавонем андозаҳоро дар кортеж ҷойгир кунем, то унсурҳои он тағйир дода нашаванд.
dimensions.py
dimensions = (200, 50)
print(dimensions[0])
print(dimensions[1])
Кортежи dimensions-ро бо қавсҳои гирд муайян мекунем. Сипас ҳар унсури онро алоҳида чоп менамоем. Тарзи дастрасӣ ҳамон аст, ки барои унсурҳои рӯйхат истифода мекардем:
200
50
Биёед бубинем, агар яке аз унсурҳои кортежи dimensions-ро тағйир доданӣ шавем, чӣ мешавад:
dimensions = (200, 50)
dimensions[0] = 250
Ин код кӯшиш мекунад қимати андозаи аввалро тағйир диҳад, аммо Python хатои навъ — TypeError — медиҳад. Азбаски тағйир додани унсури чунин объект иҷозат дода намешавад, Python хабар медиҳад, ки ба унсури кортеж қимати нав нисбат дода наметавонем:
Traceback (most recent call last):
File "dimensions.py", line 2, in
dimensions[0] = 250
TypeError: 'tuple' object does not support item assignment
Ин барои мо фоидаовар аст, зеро мехоҳем Python ҳангоми кӯшиши тағйир додани андозаи росткунҷа хато диҳад.
Эзоҳ: Аз ҷиҳати техникӣ кортежро мавҷудияти вергул муайян мекунад; қавсҳо онро мураттабтар ва хонданашро осон мекунанд. Агар кортежи якунсура созед, бояд пас аз унсур вергул гузоред:
my_t = (3,)
Одатан сохтани кортежи якунсура зарурати зиёд надорад, аммо ҳангоми ба таври худкор ҳосил шудани кортежҳо чунин ҳолат пеш омада метавонад.
Гузаштан аз ҳамаи қиматҳои кортеж бо давр
Мисли рӯйхат, бо даври for метавонед аз ҳамаи қиматҳои кортеж гузаред:
dimensions = (200, 50)
for dimension in dimensions:
print(dimension)
Python ҳамаи унсурҳои кортежро мисли унсурҳои рӯйхат чоп мекунад:
200
50
Ба тағйирёбанда нисбат додани кортежи нав
Гарчанде худи кортежро тағйир дода наметавонед, метавонед ба тағйирёбандае, ки ба он ишора мекунад, қимати нав нисбат диҳед. Масалан, агар андозаҳои росткунҷаро иваз кардан хоҳем, метавонем тамоми кортежро аз нав муайян кунем:
dimensions = (200, 50)
print("Андозаҳои аслӣ:")
for dimension in dimensions:
print(dimension)
dimensions = (400, 100)
print("\nАндозаҳои нав:")
for dimension in dimensions:
print(dimension)
Чор сатри аввал кортежи аслиро муайян карда, андозаҳои ибтидоиро чоп мекунанд. Сипас кортежи навро ба тағйирёбандаи dimensions нисбат медиҳем ва қиматҳои навро чоп менамоем. Ин дафъа Python хато намедиҳад, зеро ба тағйирёбанда нисбат додани қимати нав иҷозат дода мешавад:
Андозаҳои аслӣ:
200
50
Андозаҳои нав:
400
100
Дар муқоиса бо рӯйхатҳо, кортежҳо сохторҳои содаи маълумот мебошанд. Онҳоро вақте истифода баред, ки мехоҳед маҷмӯи қиматҳоеро нигоҳ доред, ки унсурҳояшон набояд дар давоми кори барнома тағйир дода шаванд.
Худатон бисанҷед
4-13. Буфет: Тарабхонае бо тарзи худхизматрасонӣ танҳо панҷ хӯроки асосӣ пешниҳод мекунад. Панҷ хӯроки содаро интихоб карда, номи онҳоро дар кортеж нигоҳ доред.
- Бо даври
forҳар хӯроки пешниҳодкардаи тарабхонаро чоп кунед. - Кӯшиш кунед яке аз унсурҳоро тағйир диҳед ва санҷед, ки Python ин тағйиротро рад мекунад.
- Тарабхона менюяшро тағйир дода, ду хӯрокро бо хӯрокҳои дигар иваз мекунад. Сатре илова кунед, ки ба тағйирёбанда кортежи нав нисбат диҳад. Сипас бо даври
forҳар хӯроки менюи навро чоп намоед.
Услуби навиштани код
Акнун, ки барномаҳои дарозтар менависед, хуб аст тарзи яксон ва мураттаби навиштани кодро омӯзед. Вақт ҷудо кунед, то кодатон то ҳадди имкон осон хонда шавад. Коди фаҳмо ба шумо кумак мекунад, ки кори барномаҳоятонро пайгирӣ кунед ва ба дигарон низ фаҳмидани онро осон месозад.
Барномасозони Python дар бораи як қатор қоидаҳои услубӣ ба мувофиқа расидаанд, то сохтори коди ҳама тақрибан яксон бошад. Вақте навиштани коди тозаи Python-ро меомӯзед, метавонед сохтори умумии коди дигаронро низ фаҳмед, ба шарте ки онҳо ҳамон дастурҳоро риоя кунанд.
Агар дар оянда барномасози касбӣ шудан хоҳед, беҳтар аст ҳарчи зудтар ин қоидаҳоро риоя кунед, то одатҳои хуб пайдо намоед.
Дастури услуб
Вақте касе мехоҳад ба забони Python тағйирот пешниҳод кунад, ҳуҷҷате бо номи Python Enhancement Proposal, кӯтоҳ PEP, менависад. Маънои он «Пешниҳод барои такмили Python» аст. Яке аз ҳуҷҷатҳои қадимии PEP — PEP 8 — ба барномасозон тарзи мураттаб навиштани кодро мефаҳмонад. PEP 8 нисбатан дароз аст, аммо қисми зиёди он ба сохторҳои мураккабтаре дахл дорад, ки то ҳол наомӯхтаед.
Дастури услуби Python бар ин андеша асос ёфтааст, ки кодро бештар мехонанд, назар ба он ки менависанд. Шумо кодро як бор менависед ва баъд ҳангоми ислоҳи хатогиҳо онро мехонед. Вақте ба барнома имконияти нав илова мекунед, боз вақти зиёдро барои хондани код сарф мекунед. Вақте кодро бо барномасозони дигар мубодила мекунед, онҳо низ онро мехонанд.
Агар байни коде, ки навиштанаш осонтар аст, ва коде, ки хонданаш осонтар аст, интихоб кардан лозим шавад, барномасозони Python қариб ҳамеша тавсия медиҳанд, ки коди хонданаш осонтарро интихоб кунед. Дастурҳои зерин ба шумо кумак мекунанд, ки аз аввал коди равшан нависед.
Фосилагузорӣ
PEP 8 тавсия медиҳад, ки барои ҳар сатҳи фосилагузорӣ чор фосила истифода баред. Ин шумора хондани кодро осон мекунад ва ҳамзамон дар сатр барои чанд сатҳи фосилагузорӣ ҷой мегузорад.
Дар ҳуҷҷатҳои матнӣ одамон бисёр вақт барои фосилагузорӣ ба ҷойи фосилаҳои одӣ аломати табулятсияро истифода мебаранд. Ин барои ҳуҷҷатҳои матнӣ мувофиқ аст, аммо омехтани табулятсия ва фосила метавонад дар Python мушкил эҷод кунад.
Ҳар муҳаррири матн танзимеро пешниҳод мекунад, ки ҳангоми пахши тугмаи TAB ба ҷойи аломати табулятсия шумораи муайяни фосилаҳоро мегузорад. Метавонед аз тугмаи TAB истифода баред, аммо бовар ҳосил кунед, ки муҳаррир ба ҷойи табулятсия фосилаҳои одӣ ворид мекунад.
Омехтани табулятсия ва фосила дар файл метавонад хатогиҳоеро ба вуҷуд орад, ки ёфтани сабабашон душвор аст. Агар гумон кунед, ки дар файл ин ду омехта шудаанд, дар аксари муҳаррирҳо метавонед ҳамаи табулятсияҳоро ба фосила табдил диҳед.
Дарозии сатр
Бисёр барномасозони Python тавсия медиҳанд, ки ҳар сатр аз 80 аломат кӯтоҳтар бошад. Аз ҷиҳати таърихӣ ин қоида аз он пайдо шудааст, ки дар аксари компютерҳо як сатри равзанаи терминал танҳо 79 аломатро ҷой дода метавонист.
Имрӯз дар экранҳо сатрҳои хеле дарозтар ҷой мегиранд, аммо барои риоя кардани меъёри 79 аломат сабабҳои дигар низ мавҷуданд.
Барномасозони касбӣ аксар вақт дар як экран чанд файлро мекушоянд. Дарозии стандартии сатр имкон медиҳад, ки сатрҳои пурраи ду ё се файли паҳлуи ҳам кушодашударо бубинанд. PEP 8 инчунин тавсия медиҳад, ки ҳар сатри шарҳ аз 72 аломат зиёд набошад, зеро баъзе воситаҳои худкори тавлиди ҳуҷҷатҳо барои лоиҳаҳои калон ба аввали сатри шарҳ аломатҳои ороишӣ илова мекунанд.
Тавсияҳои PEP 8 оид ба дарозии сатр қоидаи тағйирнопазир нестанд. Баъзе гурӯҳҳо маҳдудияти 99 аломатро интихоб мекунанд. Ҳангоми омӯзиш аз дарозии сатр зиёд нигарон нашавед, аммо дар хотир доред, ки гурӯҳҳои ҳамкор одатан ба қоидаҳои мувофиқашудаи PEP 8 такя мекунанд.
Аксари муҳаррирҳо имкон медиҳанд, ки нишонаи визуалӣ, одатан хатти амудӣ, гузоред, то ҳудуди дарозии сатрро нишон диҳад.
Эзоҳ: Дар бахши «Танзими муҳаррири код» дар боби 1 шарҳ дода мешавад, ки чӣ гуна муҳаррирро танзим кунед, то ҳар бор бо пахши TAB чор фосила ворид кунад ва барои риояи ҳудуди 79 аломат хатти амудии роҳнамо нишон диҳад.
Сатрҳои холӣ
Барои аз ҷиҳати визуалӣ гурӯҳбандӣ кардани қисмҳои барнома аз сатрҳои холӣ истифода баред. Онҳо барои ба тартиб даровардани файлҳо муфиданд, аммо набояд аз ҳад зиёд истифода шаванд. Бо пайравӣ аз намунаҳои китоб метавонед тавозуни мувофиқро пайдо кунед.
Масалан, агар панҷ сатри код рӯйхат созанд ва се сатри дигар бо он кор кунанд, байни ин ду қисм як сатри холӣ гузоштан мувофиқ аст. Аммо се ё чор сатри холӣ гузоштан лозим нест.
Сатрҳои холӣ ба иҷрои код таъсир намерасонанд, вале ба хондани он таъсир доранд. Интерпретатори Python барои фаҳмидани сохтори код фосилагузории уфуқии аввали сатрҳоро истифода мебарад, аммо сатрҳои холиро нодида мегирад.
Дигар тавсияҳои услубӣ
PEP 8 тавсияҳои зиёди дигар низ дорад, аммо аксари онҳо ба барномаҳои мураккабтар аз барномаҳои ҳозираи шумо дахл доранд. Вақте сохторҳои мураккабтари Python-ро меомӯзед, қисмҳои мувофиқи PEP 8 низ шарҳ дода мешаванд.
Худатон бисанҷед
4-14. PEP 8: Дастури аслии PEP 8-ро дар ин суроға аз назар гузаронед:
https://python.org/dev/peps/pep-0008
Ҳоло қисми зиёди онро истифода намебаред, аммо шиносоии умумӣ бо он метавонад ҷолиб бошад.
4-15. Бознигарии код: Се барномаи дар ин боб навиштаатонро интихоб карда, ҳар кадомро ба талаботи PEP 8 мувофиқ созед.
- Барои ҳар сатҳи фосилагузорӣ чор фосила истифода баред. Агар ҳанӯз чунин накарда бошед, муҳаррирро танзим кунед, то ҳангоми пахши
TABчор фосила ворид намояд. Дастури иҷрои ин кор дар бахши «Танзими муҳаррири код» дар боби 1 омадааст. - Дар ҳар сатр камтар аз 80 аломат истифода баред ва муҳаррирро тавре танзим кунед, ки дар мавқеи аломати 80-ум хатти амудии роҳнамо нишон диҳад.
- Дар файлҳои барнома сатрҳои холиро аз ҳад зиёд истифода набаред.
Хулоса
Дар ин боб тарзи кори самаранок бо унсурҳои рӯйхатро омӯхтед. Фаҳмидед, ки чӣ гуна бо даври for аз рӯйхат гузаред, Python барои муайян кардани сохтори барнома чӣ гуна аз фосилагузорӣ истифода мебарад ва чӣ тавр аз баъзе хатогиҳои маъмули фосилагузорӣ пешгирӣ кардан мумкин аст.
Шумо сохтани рӯйхатҳои содаи ададӣ ва чанд амалеро омӯхтед, ки бо онҳо иҷро кардан мумкин аст. Ҳамчунин фаҳмидед, ки чӣ гуна бо буриш як қисми рӯйхатро гиред ва рӯйхатро дуруст нусхабардорӣ кунед.
Илова бар ин, бо кортежҳо шинос шудед, ки барои маҷмӯи қиматҳои набояд тағйирёбанда як дараҷа муҳофизат фароҳам меоранд. Ҳамчунин омӯхтед, ки коди торафт мураккабтаршавандаро чӣ гуна мураттаб нависед, то хонданаш осон бошад.
Дар боби 5 меомӯзед, ки чӣ гуна бо дастурҳои if ба шароитҳои гуногун муносиб посух диҳед. Шумо тарзи якҷоя кардани санҷишҳои шартиро меомӯзед, то барнома ба вазъият ё маълумоти дилхоҳатон дуруст вокуниш нишон диҳад. Ҳамчунин меомӯзед, ки ҳангоми гузаштан аз рӯйхат бо давр чӣ гуна if-ро истифода баред, то барои унсурҳои муайян амалҳои махсус иҷро шаванд.

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