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

Омӯзиши барномасозӣ бо Python аз сифр: насби Python ва муҳаррири код, тағйирёбандаҳо ва сатрҳо, рӯйхатҳо, дастурҳои if, луғатҳо, воридкунии маълумот ва даврҳои while, функсияҳо, классҳо, кор бо файлҳо ва истисноҳо ва санҷиши код бо pytest. Ҳар боб мисолҳои код ва машқҳои «Худатон бисанҷед» дорад. Муқаддима ва бобҳои 2–11 тарҷумаи тоҷикии китоби Эрик Маттес «Python Crash Course» (нашри 3) мебошанд; боби 1 ва замима барои ин нашр навишта шудаанд.
Агенти Зеҳнӣ · 16 октябри 2026 · 13 саҳифа · 2 писанд
Боби 2. Тағйирёбандаҳо ва навъҳои одии додаҳо
Дар ин боб шумо бо навъҳои гуногуни додаҳое шинос мешавед, ки дар барномаҳои Python бо онҳо кор кардан мумкин аст. Ҳамчунин меомӯзед, ки чӣ гуна бо истифода аз тағйирёбандаҳо додаҳоро дар барномаҳоятон ифода кунед.
Ҳангоми иҷрои hello_world.py воқеан чӣ рӯй медиҳад?
Биёед муфассалтар бубинем, ки ҳангоми иҷро кардани hello_world.py Python чӣ кор мекунад. Маълум мешавад, ки Python ҳатто барои иҷрои барномаи одӣ низ кори зиёдеро анҷом медиҳад:
hello_world.py
print("Hello Python world!")
Ҳангоми иҷрои ин код бояд натиҷаи зеринро бинед:
Hello Python world!
Вақте файли hello_world.py-ро иҷро мекунед, пасванди .py нишон медиҳад, ки ин файл барномаи Python аст. Муҳаррири шумо файлро тавассути интерпретатори Python иҷро мекунад. Интерпретатор барномаро мехонад ва муайян мекунад, ки ҳар калима дар он чӣ маъно дорад. Масалан, вақте интерпретатор калимаи print ва қавсҳои пас аз онро мебинад, он чизеро, ки дар дохили қавсҳо ҷойгир аст, дар экран чоп мекунад.
Ҳангоми навиштани барномаҳо муҳаррир қисмҳои гуногуни барномаро бо рангҳои гуногун нишон медиҳад. Масалан, он мешиносад, ки print() номи функсия аст ва ин калимаро бо як ранг нишон медиҳад. Ҳамчунин мешиносад, ки "Hello Python world!" коди Python нест ва ин ибораро бо ранги дигар намоиш медиҳад. Ин имконият ранггузории синтаксис (syntax highlighting) ном дорад ва ҳангоми оғози навиштани барномаҳои худ хеле муфид аст.
Тағйирёбандаҳо
Биёед дар hello_world.py аз тағйирёбанда истифода барем. Дар аввали файл сатри нав илова кунед ва сатри дуюмро тағйир диҳед:
hello_world.py
message = "Hello Python world!"
print(message)
Барномаро иҷро кунед ва натиҷаро бубинед. Бояд ҳамон натиҷаи пешинаро бинед:
Hello Python world!
Мо тағйирёбандаеро бо номи message илова кардем. Ҳар тағйирёбанда бо қимат пайваст аст, яъне бо маълумоте, ки ба он тағйирёбанда вобаста мебошад. Дар ин мисол қимат матни "Hello Python world!" аст.
Илова кардани тағйирёбанда кори интерпретатори Python-ро каме зиёд мекунад. Ҳангоми коркарди сатри аввал, он тағйирёбандаи message-ро бо матни "Hello Python world!" пайваст мекунад. Вақте ба сатри дуюм мерасад, қимати ба message вобастаро дар экран чоп мекунад.
Биёед барномаро васеътар кунем ва hello_world.py-ро тавре тағйир диҳем, ки паёми дуюмро низ чоп кунад. Дар файл як сатри холӣ ва сипас ду сатри нави код илова кунед:
message = "Hello Python world!"
print(message)
message = "Hello Python Crash Course world!"
print(message)
Акнун ҳангоми иҷрои hello_world.py бояд ду сатри натиҷаро бинед:
Hello Python world!
Hello Python Crash Course world!
Шумо метавонед қимати тағйирёбандаро дар ҳар лаҳзаи барнома иваз кунед. Python ҳамеша қимати ҷории онро пайгирӣ мекунад.
Номгузорӣ ва истифодаи тағйирёбандаҳо
Ҳангоми истифодаи тағйирёбандаҳо дар Python бояд чанд қоида ва тавсияро риоя кунед. Вайрон кардани баъзе қоидаҳо боиси хато мешавад; тавсияҳои дигар танҳо ба шумо кумак мекунанд, ки коди хондану фаҳмиданаш осонтар нависед. Ҳангоми кор бо тағйирёбандаҳо қоидаҳои зеринро дар хотир нигоҳ доред:
- Номи тағйирёбанда метавонад танҳо ҳарфҳо, рақамҳо ва аломати зерхат (
_)-ро дар бар гирад. Ном метавонад бо ҳарф ё зерхат оғоз шавад, аммо бо рақам оғоз шуда наметавонад. Масалан, номиmessage_1дуруст аст, вале1_messageдуруст нест. - Дар номи тағйирёбанда фосила гузоштан мумкин нест. Барои ҷудо кардани калимаҳо метавонед зерхат истифода баред. Масалан,
greeting_messageдуруст аст, аммоgreeting messageбоиси хато мешавад. - Аз истифодаи калимаҳои калидии Python ва номҳои функсияҳо ҳамчун номи тағйирёбанда худдорӣ кунед. Масалан, калимаи
print-ро ҳамчун номи тағйирёбанда истифода набаред, зеро он дар Python вазифаи муайян дорад. Ба бахши «Калимаҳои калидӣ ва функсияҳои дарунсохти Python» дар замима нигаред. - Номи тағйирёбанда бояд кӯтоҳ, вале маънодор бошад. Масалан,
nameазn,student_nameазs_nваname_lengthазlength_of_persons_nameбеҳтар аст. - Ҳангоми истифодаи ҳарфи хурди
lва ҳарфи калониOэҳтиёт кунед, зеро онҳоро бо рақамҳои1ва0иштибоҳ кардан мумкин аст.
Омӯхтани номгузории хуби тағйирёбандаҳо каме машқ мехоҳад, махсусан вақте барномаҳоятон ҷолибтару мураккабтар мешаванд. Бо навиштани барномаҳои бештар ва хондани коди дигарон шумо дар интихоби номҳои маънодор моҳиртар мешавед.
Эзоҳ: Дар ин марҳала номҳои тағйирёбандаҳоро бо ҳарфҳои хурд нависед. Истифодаи ҳарфҳои калон боиси хато намешавад, аммо ҳарфҳои калон дар номгузории тағйирёбандаҳо маъноҳои махсус доранд, ки дар бобҳои баъдӣ баррасӣ мекунем.
Пешгирӣ аз хатои ном ҳангоми истифодаи тағйирёбандаҳо
Ҳар як барномасоз хато мекунад ва аксари барномасозон ҳар рӯз хато мекунанд. Барномасозони хуб низ метавонанд хато кунанд, аммо онҳо медонанд, ки чӣ гуна ин хатоҳоро самаранок бартараф созанд. Биёед хатои маъмулеро бинем, ки эҳтимол дар оғози омӯзиш бо он рӯ ба рӯ мешавед, ва роҳи ислоҳи онро омӯзем.
Мо қасдан коде менависем, ки хато ба вуҷуд меорад. Коди зеринро ворид кунед. Ба номи нодуруст навишташудаи mesage диққат диҳед:
message = "Hello Python Crash Course reader!"
print(mesage)
Вақте дар барнома хато рух медиҳад, интерпретатори Python мекӯшад ба шумо дар муайян кардани ҷойи мушкил кумак кунад. Агар барнома бомуваффақият иҷро шуда натавонад, интерпретатор пайгирии хато (traceback) пешниҳод мекунад. Ин сабт нишон медиҳад, ки интерпретатор ҳангоми иҷрои код дар куҷо ба мушкил дучор шудааст.
Ин намунаи пайгирии хатоест, ки Python пас аз нодуруст навиштани номи тағйирёбанда нишон медиҳад:
Traceback (most recent call last):
File "hello_world.py", line 2, in
print(mesage)
^^^^^^
NameError: name 'mesage' is not defined. Did you mean: 'message'?
Натиҷа хабар медиҳад, ки хато дар сатри 2-и файли hello_world.py рух додааст. Интерпретатор худи ин сатрро нишон медиҳад, то хатогиро зудтар пайдо кунем, ва навъи хатои ёфтаашро низ мефаҳмонад.
Дар ин ҳолат, он хатои ном — NameError — ёфтааст ва хабар медиҳад, ки тағйирёбандаи mesage, ки мехоҳем чоп кунем, таъриф нашудааст. Python номи пешниҳодшударо шинохта наметавонад.
Хатои ном одатан маънои онро дорад, ки пеш аз истифодаи тағйирёбанда ба он қимат надодаем ё ҳангоми навиштани номаш иштибоҳ кардаем. Агар Python номи тағйирёбандаеро пайдо кунад, ки ба номи ношинос монанд бошад, мепурсад, ки оё маҳз ҳамон номро дар назар доштем.
Дар ин мисол мо дар сатри дуюм ҳарфи s-ро аз номи message партофтаем. Интерпретатори Python имлои коди шуморо намесанҷад, аммо талаб мекунад, ки номи тағйирёбанда дар ҳама ҷо яксон навишта шавад. Масалан, бубинед, агар дар сатри таърифи тағйирёбанда низ message-ро нодуруст нависем, чӣ мешавад:
mesage = "Hello Python Crash Course reader!"
print(mesage)
Дар ин ҳолат барнома бомуваффақият иҷро мешавад:
Hello Python Crash Course reader!
Номҳои тағйирёбанда мувофиқанд, бинобар ин Python мушкиле намебинад. Забонҳои барномасозӣ қоидаҳои қатъӣ доранд, аммо дуруст ё нодуруст будани имлои калимаҳоро ба ҳисоб намегиранд. Аз ин рӯ, ҳангоми сохтани номҳои тағйирёбанда ва навиштани код риояи қоидаҳои имло ва дастури забони англисӣ шарт нест.
Бисёр хатоҳои барномасозӣ танҳо аз нодуруст навиштани як аломат дар як сатри барнома ба вуҷуд меоянд. Агар барои ёфтани чунин хато вақти зиёд сарф кунед, бидонед, ки танҳо нестед. Бисёр барномасозони ботаҷрибаву боистеъдод низ барои ёфтани чунин хатоҳои хурд соатҳо сарф мекунанд. Кӯшиш кунед инро бо табассум қабул карда, корро идома диҳед: дар фаъолияти барномасозии шумо чунин ҳолатҳо бисёр рӯй медиҳанд.
Тағйирёбандаҳо барчаспанд
Тағйирёбандаҳоро аксар вақт ба қуттиҳое монанд мекунанд, ки дар онҳо қимат нигоҳ доштан мумкин аст. Ин тасаввур дар чанд истифодаи аввал муфид буда метавонад, аммо тарзи воқеии ифодаи тағйирёбандаҳоро дар дохили Python дақиқ шарҳ намедиҳад.
Беҳтар аст тағйирёбандаҳоро ҳамчун барчаспҳое тасаввур кунед, ки ба қиматҳо медиҳед. Ҳамчунин гуфтан мумкин аст, ки тағйирёбанда ба қимати муайян ишора мекунад.
Эҳтимол ин фарқият дар барномаҳои аввалини шумо чандон муҳим набошад, аммо беҳтар аст онро барвақт омӯзед. Замоне бо рафтори ғайричашмдошти тағйирёбанда рӯ ба рӯ мешавед ва фаҳмиши дурусти кори тағйирёбандаҳо ба шумо кумак мекунад, ки воқеаи дохили кодро дарк кунед.
Эзоҳ: Роҳи беҳтарини фаҳмидани мафҳумҳои нави барномасозӣ истифодаи онҳо дар барномаҳои худ аст. Агар ҳангоми иҷрои машқи китоб дармонед, муддате ба кори дигар машғул шавед. Агар ҳанӯз ҳам мушкил ҳал нашуда бошад, бахши дахлдори бобро аз нав хонед. Агар боз ба кумак ниёз дошта бошед, ба бахши «Вақте ки дармондед» дар замима нигаред.
Худатон бисанҷед
Барои ҳар яке аз машқҳои зерин барномаи алоҳида нависед. Ҳар барномаро бо номи файле нигоҳ доред, ки ба қоидаҳои маъмули Python мувофиқ бошад: аз ҳарфҳои хурд ва зерхат истифода баред, масалан, simple_message.py ва simple_messages.py.
2–1. Паёми одӣ: Ба тағйирёбанда паёме диҳед ва сипас онро чоп кунед.
2–2. Паёмҳои одӣ: Ба тағйирёбанда паёме диҳед ва онро чоп кунед. Баъд қимати тағйирёбандаро ба паёми нав иваз карда, паёми навро чоп кунед.
Сатрҳо
Азбаски аксари барномаҳо ягон навъи додаҳоро муайян ё ҷамъоварӣ карда, сипас бо онҳо кори муфиде анҷом медиҳанд, ҷудо кардани додаҳо ба навъҳо фоидаовар аст. Аввалин навъи додаҳое, ки баррасӣ мекунем, сатр (string) мебошад. Сатрҳо дар назари аввал хеле одӣ менамоянд, аммо онҳоро бо роҳҳои гуногун истифода бурдан мумкин аст.
Сатр пайдарпайии аломатҳост. Дар Python ҳар чизе, ки дар дохили нохунакҳо ҷойгир аст, сатр ҳисоб мешавад. Барои сатрҳо метавонед аз нохунакҳои яктоӣ ё дутоӣ истифода баред:
"This is a string."
'This is also a string.'
Ин озодӣ имкон медиҳад, ки дар дохили сатрҳо аз нохунак ва апостроф истифода баред:
'I told my friend, "Python is my favorite language!"'
"The language 'Python' is named after Monty Python, not the snake."
"One of Python's strengths is its diverse and supportive community."
Маънои ин ҷумлаҳо чунин аст:
- «Ба дӯстам гуфтам: “Python забони дӯстдоштаи ман аст!”»
- «Забони “Python” ба шарафи Monty Python номгузорӣ шудааст, на мор».
- «Яке аз бартариҳои Python ҷомеаи гуногун ва дастгирикунандаи он аст».
Биёед баъзе роҳҳои истифодаи сатрҳоро омӯзем.
Тағйир додани ҳарфҳои калон ва хурди сатр бо методҳо
Яке аз содатарин амалҳое, ки бо сатрҳо иҷро кардан мумкин аст, иваз кардани ҳарфҳои калон ва хурди калимаҳои дохили сатр мебошад. Ба коди зерин нигаред ва кӯшиш кунед фаҳмед, ки чӣ рӯй медиҳад:
name.py
name = "ada lovelace"
print(name.title())
Файлро бо номи name.py нигоҳ доред ва иҷро кунед. Бояд натиҷаи зеринро бинед:
Ada Lovelace
Дар ин мисол тағйирёбандаи name ба сатри "ada lovelace" ишора мекунад, ки бо ҳарфҳои хурд навишта шудааст. Дар дохили даъвати print() пас аз тағйирёбанда методи title() омадааст.
Метод амалест, ки Python метавонад бо дода анҷом диҳад. Нуқтаи (.) пас аз name дар ифодаи name.title() ба Python мегӯяд, ки методи title()-ро ба қимати тағйирёбандаи name татбиқ кунад.
Пас аз ҳар метод қавсҳо меоянд, зеро методҳо аксар вақт барои иҷрои кор ба маълумоти иловагӣ ниёз доранд. Ин маълумот дар дохили қавсҳо дода мешавад. Методи title() ба маълумоти иловагӣ ниёз надорад, бинобар ин қавсҳояш холӣ мебошанд.
Методи title() ҳар калимаро тавре тағйир медиҳад, ки бо ҳарфи калон оғоз шавад. Ин муфид аст, зеро аксар вақт мехоҳед номро ҳамчун як маълумоти ягона қабул кунед. Масалан, шояд бихоҳед барнома қиматҳои воридшудаи Ada, ADA ва ada-ро як ном ҳисоб кунад ва ҳамаи онҳоро ҳамчун Ada нишон диҳад.
Барои кор бо ҳарфҳои калон ва хурд методҳои муфиди дигар низ мавҷуданд. Масалан, метавонед ҳамаи ҳарфҳои сатрро калон ё хурд кунед:
name = "Ada Lovelace"
print(name.upper())
print(name.lower())
Натиҷа чунин мешавад:
ADA LOVELACE
ada lovelace
Методи lower() махсусан барои нигоҳдории додаҳо муфид аст. Одатан беҳтар аст ба тарзи истифодаи ҳарфҳои калону хурд аз ҷониби корбарон такя накунед ва пеш аз нигоҳ доштан сатрҳоро ба ҳарфҳои хурд табдил диҳед. Сипас, ҳангоми намоиши маълумот, барои ҳар сатр шакли мувофиқро истифода мебаред.
Истифодаи тағйирёбандаҳо дар сатрҳо
Дар баъзе ҳолатҳо мехоҳед қимати тағйирёбандаро дар дохили сатр истифода баред. Масалан, метавонед барои ном ва насаб ду тағйирёбанда дошта бошед ва сипас қиматҳои онҳоро якҷо карда, ному насаби пурраи шахсро нишон диҳед:
full_name.py
first_name = "ada"
last_name = "lovelace"
full_name = f"{first_name} {last_name}"
print(full_name)
Барои ҷойгир кардани қимати тағйирёбанда дар сатр, ҳарфи f-ро бевосита пеш аз нохунаки кушоянда гузоред. Номи ҳар тағйирёбандаеро, ки мехоҳед дар дохили сатр истифода баред, дар қавсҳои фигурӣ — {} — ҷойгир кунед. Ҳангоми намоиши сатр Python ҳар тағйирёбандаро бо қиматаш иваз мекунад.
Чунин сатрҳо f-сатрҳо (f-strings) ном доранд. Ҳарфи f аз калимаи format — «қолаббандӣ кардан» — гирифта шудааст, зеро Python сатрро бо иваз кардани номи тағйирёбандаҳои дохили қавсҳои фигурӣ ба қиматҳояшон қолаббандӣ мекунад.
Натиҷаи коди боло чунин аст:
ada lovelace
Бо f-сатрҳо корҳои зиёдеро анҷом додан мумкин аст. Масалан, бо истифода аз маълумоти вобаста ба тағйирёбанда метавонед паёмҳои пурра созед:
first_name = "ada"
last_name = "lovelace"
full_name = f"{first_name} {last_name}"
print(f"Hello, {full_name.title()}!")
Дар ин ҷо ному насаби пурра дар ҷумлаи салом ба корбар истифода мешавад ва методи title() ҳарфи аввали ҳар қисми номро калон мекунад. Код саломи одӣ, вале хуб қолаббандишударо намоиш медиҳад:
Hello, Ada Lovelace!
Ҳамчунин метавонед бо f-сатр паём созед ва баъд тамоми паёмро ба тағйирёбанда нисбат диҳед:
first_name = "ada"
last_name = "lovelace"
full_name = f"{first_name} {last_name}"
message = f"Hello, {full_name.title()}!"
print(message)
Ин код низ паёми Hello, Ada Lovelace!-ро намоиш медиҳад. Аммо бо ба тағйирёбанда нисбат додани паём, даъвати ниҳоии print()-ро хеле содатар мекунем.
Илова кардани аломатҳои фосилавӣ бо табулятсия ва сатри нав
Дар барномасозӣ аломатҳои фосилавӣ (whitespace) аломатҳое мебошанд, ки худ ба шакли намоён чоп намешаванд, аз ҷумла фосила, табулятсия ва аломати анҷоми сатр. Бо истифода аз онҳо метавонед натиҷаро тавре тартиб диҳед, ки хондани он барои корбарон осонтар шавад.
Барои ба матн илова кардани табулятсия аз пайдарпайии \t истифода баред:
>>> print("Python")
Python
>>> print("\tPython")
Python
Барои дар дохили сатр гузаштан ба сатри нав аз пайдарпайии \n истифода баред:
>>> print("Languages:\nPython\nC\nJavaScript")
Languages:
Python
C
JavaScript
Ҳамчунин метавонед табулятсия ва сатри навро дар як сатр якҷо истифода баред. Пайдарпайии "\n\t" ба Python мегӯяд, ки ба сатри нав гузарад ва онро бо табулятсия оғоз кунад.
Мисоли зерин нишон медиҳад, ки чӣ гуна аз як сатри матн чор сатри натиҷа ҳосил кардан мумкин аст:
>>> print("Languages:\n\tPython\n\tC\n\tJavaScript")
Languages:
Python
C
JavaScript
Аломатҳои сатри нав ва табулятсия дар ду боби оянда хеле муфид мешаванд: он ҷо шумо бо чанд сатри код сатрҳои зиёди натиҷа ҳосил мекунед.
Тоза кардани аломатҳои фосилавӣ
Аломатҳои фосилавии зиёдатӣ метавонанд дар барномаҳо нофаҳмӣ ба вуҷуд оранд. Аз назари барномасоз, 'python' ва 'python ' қариб яксон менамоянд. Аммо барои барнома онҳо ду сатри гуногунанд. Python фосилаи зиёдатии 'python '-ро муайян мекунад ва то вақте тартиби дигаре надиҳед, онро муҳим мешуморад.
Ба аломатҳои фосилавӣ диққат додан муҳим аст, зеро аксар вақт мехоҳед ду сатрро муқоиса кунед ва фаҳмед, ки яксонанд ё не. Масалан, яке аз ҳолатҳои муҳим санҷидани номи корбар ҳангоми ворид шудан ба сомона мебошад. Фосилаҳои зиёдатӣ дар ҳолатҳои хеле содатар низ метавонанд мушкил эҷод кунанд. Хушбахтона, Python тоза кардани онҳоро аз додаҳои воридкардаи корбар осон мекунад.
Python метавонад аломатҳои фосилавии зиёдатиро аз тарафи рост ва чапи сатр пайдо кунад. Барои тоза кардани онҳо аз охири сатр методи rstrip()-ро истифода баред:
>>> favorite_language = 'python '
>>> favorite_language
'python '
>>> favorite_language.rstrip()
'python'
>>> favorite_language
'python '
Қимати вобаста ба favorite_language дар охир фосилаи зиёдатӣ дорад. Вақте дар муҳити интерактивии терминал қимати онро мепурсед, ин фосила дида мешавад.
Ҳангоми татбиқи методи rstrip() фосилаи зиёдатӣ аз натиҷаи баргардондашуда тоза мешавад. Аммо ин тағйир дар қимати аслии тағйирёбанда нигоҳ дошта намешавад. Агар боз қимати favorite_language-ро пурсед, сатр ҳамон тавре мемонад, ки ворид карда будед: бо фосилаи зиёдатӣ.
Барои нигоҳ доштани сатри бе фосилаи зиёдатӣ, бояд қимати тозашударо дубора ба тағйирёбанда нисбат диҳед:
>>> favorite_language = 'python '
>>> favorite_language = favorite_language.rstrip()
>>> favorite_language
'python'
Дар ин ҷо аввал фосилаи тарафи рости сатрро тоза мекунед ва баъд қимати навро ба ҳамон тағйирёбандаи аввалия нисбат медиҳед. Иваз кардани қимати тағйирёбанда дар барномасозӣ кори маъмул аст. Қимати тағйирёбандаро ҳангоми иҷрои барнома ё дар посух ба вуруди корбар ҳамин тавр нав кардан мумкин аст.
Барои тоза кардани аломатҳои фосилавӣ аз тарафи чапи сатр методи lstrip() ва барои тоза кардани онҳо аз ҳар ду тараф методи strip()-ро истифода мебаранд:
>>> favorite_language = ' python '
>>> favorite_language.rstrip()
' python'
>>> favorite_language.lstrip()
'python '
>>> favorite_language.strip()
'python'
Дар ин мисол аз қимате оғоз мекунем, ки ҳам дар аввал ва ҳам дар охир фосила дорад. Сипас фосилаи зиёдатиро аз тарафи рост, аз тарафи чап ва аз ҳар ду тараф тоза мекунем.
Озмудани ин методҳо ба шумо кумак мекунад, ки бо коркарди сатрҳо ошно шавед. Дар барномаҳои воқеӣ онҳо бештар барои тоза кардани вуруди корбар пеш аз нигоҳ доштани он истифода мешаванд.
Ҳазф кардани пешвандҳо
Ҳангоми кор бо сатрҳо яке аз амалҳои маъмул ҳазф кардани пешванд мебошад. Суроғаи URL-еро тасаввур кунед, ки пешванди маъмули https:// дорад. Мехоҳем ин пешвандро ҳазф кунем, то танҳо қисми суроғае боқӣ монад, ки корбарон бояд дар сатри суроға ворид кунанд.
Ин кор чунин анҷом дода мешавад:
>>> nostarch_url = 'https://nostarch.com'
>>> nostarch_url.removeprefix('https://')
'nostarch.com'
Номи тағйирёбанда, баъд нуқта ва сипас методи removeprefix()-ро нависед. Дар дохили қавсҳо пешвандеро ворид кунед, ки мехоҳед аз сатри аслӣ ҳазф шавад.
Монанди методҳои тозакунии аломатҳои фосилавӣ, removeprefix() сатри аслиро тағйир намедиҳад. Агар мехоҳед қимати нави бе пешвандро нигоҳ доред, онро дубора ба тағйирёбандаи аввалия ё ба тағйирёбандаи нав нисбат диҳед:
>>> simple_url = nostarch_url.removeprefix('https://')
Вақте URL-еро дар сатри суроға мебинед, ки қисми https://-и он нишон дода намешавад, эҳтимол браузер дар паси парда аз усуле монанди removeprefix() истифода мебарад.
Пешгирӣ аз хатоҳои синтаксисӣ дар сатрҳо
Яке аз хатоҳои нисбатан маъмул хатои синтаксисӣ мебошад. Ин хато вақте рух медиҳад, ки Python ягон қисми барномаи шуморо ҳамчун коди дурусти Python шинохта наметавонад.
Масалан, агар дар дохили сатре, ки бо нохунакҳои яктоӣ иҳота шудааст, апостроф гузоред, хато ба вуҷуд меояд. Сабаб ин аст, ки Python матни байни нохунаки аввали яктоӣ ва апострофро як сатр мешуморад. Баъд кӯшиш мекунад матни боқимондаро ҳамчун коди Python тафсир кунад ва ин боиси хато мешавад.
Ин мисол истифодаи дурусти нохунакҳои яктоӣ ва дутоиро нишон медиҳад. Барномаро бо номи apostrophe.py нигоҳ доред ва иҷро кунед:
apostrophe.py
message = "One of Python's strengths is its diverse community."
print(message)
Апостроф дар дохили нохунакҳои дутоӣ ҷойгир аст, бинобар ин интерпретатори Python сатрро бе мушкил дуруст мехонад:
One of Python's strengths is its diverse community.
Аммо агар аз нохунакҳои яктоӣ истифода баред, Python муайян карда наметавонад, ки сатр дар куҷо бояд анҷом ёбад:
message = 'One of Python's strengths is its diverse community.'
print(message)
Натиҷаи зеринро мебинед:
File "apostrophe.py", line 1
message = 'One of Python's strengths is its diverse community.'
^
SyntaxError: unterminated string literal (detected at line 1)
Дар натиҷа ҷойи хато назди нохунаки охирини яктоӣ нишон дода шудааст. Паёми хато мегӯяд, ки сатри матнӣ дуруст баста нашудааст ва мушкил дар сатри якум ошкор шудааст.
Ин хатои синтаксисӣ нишон медиҳад, ки интерпретатор чизеро дар код ҳамчун коди дурусти Python шинохта наметавонад ва гумон мекунад, ки мушкил аз нодуруст гузоштани нохунакҳо бошад.
Хатоҳо метавонанд сабабҳои гуногун дошта бошанд. Ҳангоми пайдо шудани онҳо баъзе сабабҳои маъмулашонро шарҳ медиҳам. Дар раванди омӯхтани навиштани коди дурусти Python эҳтимол бо хатоҳои синтаксисӣ зиёд рӯ ба рӯ шавед. Ин хатоҳо ҳамчунин аз навъҳои камтар мушаххаси хато мебошанд, аз ин рӯ ёфтану ислоҳ кардани онҳо метавонад душвор ва асабоникунанда бошад. Агар дар ҳалли хатои сарсахте дармонед, ба бахши «Вақте ки дармондед» дар замима нигаред.
Эзоҳ: Ранггузории синтаксис дар муҳаррир бояд ба шумо кумак кунад, ки баъзе хатоҳои синтаксисиро ҳангоми навиштани барнома зуд пайдо кунед. Агар коди Python мисли матни англисӣ ранггузорӣ шавад ё баръакс, эҳтимол дар ягон ҷойи файл нохунакҳоро нодуруст ҷуфт кардаед.
Худатон бисанҷед
Ҳар машқи зеринро дар файли алоҳида, бо номе монанди name_cases.py, нигоҳ доред. Агар дармонед, каме танаффус кунед ё ба бахши «Вақте ки дармондед» дар замима нигаред.
2–3. Паёми шахсӣ: Номи шахсеро дар тағйирёбанда ҷойгир кунед ва ба ӯ паёме чоп кунед. Паём бояд одӣ бошад, масалан: «Салом, Эрик! Мехоҳӣ имрӯз каме Python омӯзӣ?»
2–4. Шаклҳои навишти ном: Номи шахсеро дар тағйирёбанда ҷойгир кунед ва онро бо ҳарфҳои хурд, ҳарфҳои калон ва бо ҳарфи аввали калони ҳар калима чоп кунед.
2–5. Сухани шахси машҳур: Аз шахси машҳуре, ки ӯро меписандед, иқтибосе пайдо кунед. Иқтибос ва номи муаллифашро чоп кунед. Натиҷа бояд тақрибан чунин бошад ва нохунакҳоро низ дар бар гирад:
Алберт Эйнштейн боре гуфтааст: «Касе, ки ҳеҷ гоҳ хато накардааст, ҳеҷ гоҳ чизи наверо насанҷидааст».
2–6. Сухани шахси машҳур — 2: Машқи 2–5-ро такрор кунед, аммо ин дафъа номи шахси машҳурро дар тағйирёбандаи famous_person ҷойгир кунед. Баъд паёмро сохта, ба тағйирёбандаи нави message нисбат диҳед. Паёмро чоп кунед.
2–7. Тоза кардани фосилаҳои атрофи ном: Номи шахсеро дар тағйирёбанда ҷойгир кунед ва ба аввалу охири он аломатҳои фосилавӣ илова намоед. Ҳар яке аз пайдарпайиҳои "\t" ва "\n"-ро ҳадди ақал як бор истифода баред.
Номро як бор тавре чоп кунед, ки аломатҳои фосилавии атрофаш низ дар натиҷа инъикос шаванд. Баъд номро бо истифода аз ҳар се метод — lstrip(), rstrip() ва strip() — чоп кунед.
2–8. Пасвандҳои файл: Python методи removesuffix() дорад, ки ба мисли removeprefix() кор мекунад, аммо пасвандро ҳазф менамояд. Қимати 'python_notes.txt'-ро ба тағйирёбандаи filename нисбат диҳед. Сипас бо истифода аз removesuffix() номи файлро бе пасвандаш нишон диҳед, чунон ки баъзе барномаҳои идоракунии файлҳо мекунанд.
Ададҳо
Ададҳо дар барномасозӣ бисёр истифода мешаванд: барои ҳисоб кардани холҳои бозӣ, ифодаи додаҳо дар тасвирсозӣ, нигоҳ доштани маълумот дар веббарномаҳо ва ғайра.
Python вобаста ба тарзи истифодаи ададҳо бо онҳо ба чанд шакл муносибат мекунад. Аввал мебинем, ки Python ададҳои бутунро чӣ гуна коркард мекунад, зеро кор бо онҳо содатар аст.
Ададҳои бутун
Дар Python шумо метавонед ададҳои бутунро ҷамъ (+), тарҳ (-), зарб (*) ва тақсим (/) кунед:
>>> 2 + 3
5
>>> 3 - 2
1
>>> 2 * 3
6
>>> 3 / 2
1.5
Дар муҳити интерактивии терминал Python натиҷаи амалро бармегардонад. Барои ба дараҷа бардоштан Python аз ду ситорача истифода мебарад:
>>> 3 ** 2
9
>>> 3 ** 3
27
>>> 10 ** 6
1000000
Python тартиби иҷрои амалҳоро низ риоя мекунад, бинобар ин дар як ифода метавонед чанд амалро истифода баред. Барои тағйир додани тартиби амалҳо қавс гузоштан мумкин аст, то Python ифодаро бо тартиби муайянкардаи шумо ҳисоб кунад. Масалан:
>>> 2 + 3*4
14
>>> (2 + 3) * 4
20
Фосилагузорӣ дар ин мисолҳо ба натиҷаи ҳисоб таъсир намерасонад. Он танҳо кумак мекунад, ки ҳангоми хондани код амалҳои афзалиятнокро зудтар муайян кунед.
Ададҳои нуқтаи шинокунанда
Python ададеро, ки нуқтаи даҳӣ дорад, float меномад. Ин истилоҳ дар аксари забонҳои барномасозӣ истифода мешавад ва ба он ишора мекунад, ки нуқтаи даҳӣ метавонад дар ҷойҳои гуногуни адад қарор гирад.
Ҳар забони барномасозӣ бояд тавре тарҳрезӣ шавад, ки ададҳои даҳиро дуруст коркард кунад ва новобаста ба ҷойи нуқтаи даҳӣ натиҷаи мувофиқ диҳад.
Дар аксари ҳолатҳо метавонед аз ададҳои float бе нигаронӣ дар бораи ҷузъиёти кори онҳо истифода баред. Танҳо ададҳои лозимиро ворид кунед ва Python эҳтимол ҳамон кореро мекунад, ки интизоред:
>>> 0.1 + 0.1
0.2
>>> 0.2 + 0.2
0.4
>>> 2 * 0.1
0.2
>>> 2 * 0.2
0.4
Аммо дар хотир дошта бошед, ки баъзан дар ҷавоб шумораи ғайричашмдошти рақамҳои пас аз нуқтаи даҳӣ пайдо мешавад:
>>> 0.2 + 0.1
0.30000000000000004
>>> 3 * 0.1
0.30000000000000004
Чунин ҳолат дар забонҳои гуногун низ рӯй медиҳад ва одатан ҷойи нигаронии зиёд надорад. Python мекӯшад натиҷаро то ҳадди имкон дақиқ ифода кунад, аммо аз сабаби тарзи ифодаи дохилии ададҳо дар компютер ин кор баъзан душвор мешавад.
Ҳоло метавонед рақамҳои зиёдатии пас аз нуқтаи даҳиро нодида гиред. Вақте дар лоиҳаҳои калонтар лозим шавад, роҳҳои кор бо онҳоро меомӯзед.
Ададҳои бутун ва float
Ҳангоми тақсим кардани ду адад бо /, ҳатто агар ҳар ду бутун бошанду натиҷа низ адади бутун шавад, натиҷа ҳамеша аз навъи float хоҳад буд:
>>> 4/2
2.0
Агар дар амалҳои дигар низ адади бутун ва float-ро якҷо истифода баред, натиҷа float мешавад:
>>> 1 + 2.0
3.0
>>> 2 * 3.0
6.0
>>> 3.0 ** 2
9.0
Дар амалҳое, ки адади float иштирок мекунад, Python натиҷаро низ ҳамчун float медиҳад, ҳатто агар қимати натиҷа бутун бошад.
Зерхатҳо дар ададҳо
Ҳангоми навиштани ададҳои дароз метавонед рақамҳоро бо зерхатҳо гурӯҳбандӣ кунед, то хондани ададҳои калон осонтар шавад:
>>> universe_age = 14_000_000_000
Вақте адади бо зерхатҳо навишташударо чоп мекунед, Python танҳо рақамҳоро нишон медиҳад:
>>> print(universe_age)
14000000000
Python ҳангоми нигоҳ доштани чунин қиматҳо зерхатҳоро нодида мегирад. Ҳатто агар рақамҳоро сетоӣ гурӯҳбандӣ накунед ҳам, қимат тағйир намеёбад. Барои Python 1000, 1_000 ва 10_00 як қимат доранд.
Ин имконият ҳам барои ададҳои бутун ва ҳам барои ададҳои float кор мекунад.
Қиматдиҳии ҳамзамон ба чанд тағйирёбанда
Шумо метавонед бо як сатри код ба чанд тағйирёбанда қимат диҳед. Ин кор барномаҳоро кӯтоҳтар ва хондани онҳоро осонтар мекунад. Аз ин усул бештар ҳангоми додани қиматҳои ибтидоӣ ба чанд тағйирёбандаи ададӣ истифода мебаред.
Масалан, ба тағйирёбандаҳои x, y ва z чунин қимати ибтидоии сифр дода мешавад:
>>> x, y, z = 0, 0, 0
Номҳои тағйирёбандаҳоро бо вергул ҷудо кунед ва қиматҳоро низ ҳамин тавр нависед. Python ҳар қиматро ба тағйирёбандаи мувофиқ нисбат медиҳад. Агар шумораи қиматҳо бо шумораи тағйирёбандаҳо баробар бошад, онҳо дуруст мувофиқ карда мешаванд.
Собитҳо
Собит тағйирёбандаест, ки қиматаш дар тамоми давраи кори барнома яксон мемонад. Python навъи махсуси дарунсохт барои собитҳо надорад, аммо барномасозони Python номи онҳоро бо ҳарфҳои калон менависанд, то нишон диҳанд, ки ин тағйирёбанда бояд ҳамчун собит истифода шавад ва қиматаш иваз нагардад:
MAX_CONNECTIONS = 5000
Агар мехоҳед тағйирёбандаеро дар код ҳамчун собит истифода баред, номи онро пурра бо ҳарфҳои калон нависед.
Худатон бисанҷед
2–9. Адади ҳашт: Амалҳои ҷамъ, тарҳ, зарб ва тақсимро нависед, ки натиҷаи ҳар кадом 8 бошад. Барои дидани натиҷа ҳар амалро дар дохили print() ҷойгир кунед. Шумо бояд чор сатри монанди ин созед:
print(5+3)
Натиҷа бояд аз чор сатр иборат бошад ва дар ҳар сатр адади 8 як бор пайдо шавад.
2–10. Адади дӯстдошта: Адади дӯстдоштаатонро дар тағйирёбанда ҷойгир кунед. Сипас бо истифода аз он паёме созед, ки адади дӯстдоштаатонро нишон диҳад. Паёмро чоп кунед.
Шарҳҳо
Шарҳҳо (comments) яке аз имкониятҳои хеле муфиди аксари забонҳои барномасозӣ мебошанд. Ҳамаи он чизе, ки то ин ҷо дар барномаҳоятон навиштаед, коди Python буд.
Вақте барномаҳо дарозтару мураккабтар мешаванд, бояд дар дохили онҳо ёддоштҳое илова кунед, ки равиши умумии шуморо барои ҳалли масъала шарҳ медиҳанд. Шарҳ имкон медиҳад, ки дар дохили барнома ба забони маъмулии худ ёддошт нависед.
Шарҳро чӣ гуна менависанд?
Дар Python аломати # оғози шарҳро нишон медиҳад. Интерпретатори Python ҳар чизеро, ки дар он сатр пас аз ин аломат меояд, нодида мегирад. Масалан:
comment.py
# Ба ҳама салом гӯед.
print("Hello Python people!")
Python сатри аввалро нодида гирифта, сатри дуюмро иҷро мекунад:
Hello Python people!
Чӣ гуна шарҳҳо бояд нависед?
Сабаби асосии навиштани шарҳҳо фаҳмондани он аст, ки код чӣ кор бояд кунад ва шумо кори онро чӣ гуна таъмин кардаед.
Вақте бо лоиҳа машғул ҳастед, мефаҳмед, ки ҳамаи қисмҳои он чӣ гуна ба ҳам пайваст мешаванд. Аммо агар пас аз муддате ба лоиҳа баргардед, эҳтимол баъзе ҷузъиётро фаромӯш карда бошед. Албатта, метавонед кодро муддате омӯзед ва фаҳмед, ки қисмҳои он чӣ гуна бояд кор мекарданд. Вале шарҳҳои хуб равиши умумии шуморо равшан баён карда, вақтро сарфа мекунанд.
Агар мехоҳед барномасози касбӣ шавед ё бо барномасозони дигар ҳамкорӣ кунед, бояд шарҳҳои пурмазмун нависед. Имрӯз аксари нармафзорҳо бо ҳамкорӣ сохта мешаванд: хоҳ аз ҷониби гурӯҳи кормандони як ширкат ва хоҳ аз ҷониби одамоне, ки якҷо дар лоиҳаи дорои коди кушода кор мекунанд.
Барномасозони моҳир интизор доранд, ки дар код шарҳҳо бинанд. Аз ин рӯ, беҳтар аст аз ҳозир ба барномаҳоятон шарҳҳои тавзеҳӣ илова кунед. Навиштани шарҳҳои равшану кӯтоҳ яке аз муфидтарин одатҳоест, ки ҳамчун барномасози навомӯз метавонед пайдо кунед.
Ҳангоми қарор додан, ки шарҳ нависед ё не, аз худ бипурсед: оё пеш аз ёфтани роҳи муносиби иҷрои кор чанд равишро баррасӣ кардам? Агар ҷавоб «ҳа» бошад, дар бораи ҳалли интихобкардаатон шарҳ нависед.
Баъдтар ҳазф кардани шарҳҳои зиёдатӣ аз бозгаштан ба барномаи камшарҳ ва навиштани шарҳҳо барои он хеле осонтар аст. Аз ин ба баъд дар мисолҳои китоб барои фаҳмондани қисмҳои код аз шарҳҳо истифода мебарам.
Худатон бисанҷед
2–11. Илова кардани шарҳҳо: Ду барномаи навиштаатонро интихоб кунед ва ба ҳар кадом ҳадди ақал як шарҳ илова намоед. Агар барномаҳоятон ҳоло хеле одӣ бошанд ва барои навиштани шарҳи мушаххас чизе надошта бошед, дар аввали ҳар файл ном ва санаи ҷориро нависед. Сипас бо як ҷумла фаҳмонед, ки барнома чӣ кор мекунад.
Фалсафаи Python — «The Zen of Python»
Барномасозони ботаҷрибаи Python шуморо ташвиқ мекунанд, ки то ҳадди имкон аз мураккабӣ канорагирӣ карда, ба содагӣ кӯшиш кунед.
Фалсафаи ҷомеаи Python дар навиштаи Тим Питерс бо номи «The Zen of Python» ҷамъ оварда шудааст. Барои дидани ин маҷмӯаи кӯтоҳи принсипҳои навиштани коди хуби Python, дар интерпретатор import this-ро ворид кунед.
Ман тамоми матни «The Zen of Python»-ро дар ин ҷо намеорам, аммо чанд сатрашро шарҳ медиҳам, то фаҳмед, ки чаро онҳо барои шумо ҳамчун барномасози навомӯзи Python муҳиманд.
>>> import this
The Zen of Python, by Tim Peters
Beautiful is better than ugly.
Зебо аз зишт беҳтар аст.
Барномасозони Python бар ин назаранд, ки код метавонад зебо ва шево бошад. Дар барномасозӣ одамон масъалаҳоро ҳал мекунанд. Барномасозон ҳамеша роҳҳои ҳалли хуб тарҳрезишуда, самаранок ва ҳатто зеборо қадр кардаанд.
Ҳар қадар Python-ро бештар омӯзед ва бо он бештар код нависед, шояд рӯзе касе ба коратон нигариста гӯяд: «Вой, чӣ коди зебое!»
Simple is better than complex.
Сода аз мураккаб беҳтар аст.
Агар байни роҳи ҳалли сода ва мураккаб интихоб дошта бошед ва ҳар ду кор кунанд, роҳи содаро интихоб кунед. Нигоҳдории код осонтар мешавад ва баъдтар шумо ё дигарон метавонед онро осонтар густариш диҳед.
Complex is better than complicated.
Мураккаби муназзам аз печидаи сардаргум беҳтар аст.
Зиндагии воқеӣ пур аз номураттабист ва баъзан барои масъала роҳи ҳалли сода пайдо намешавад. Дар чунин ҳолат содатарин роҳи ҳалли коршоямро истифода баред.
Readability counts.
Хонданбобӣ муҳим аст.
Ҳатто агар коди шумо мураккаб бошад ҳам, кӯшиш кунед онро хонданбоб нависед. Ҳангоми кор дар лоиҳае, ки коди мураккаб дорад, ба навиштани шарҳҳои фаҳмондадиҳанда диққат диҳед.
There should be one-- and preferably only one --obvious way to do it.
Барои анҷом додани кор бояд як роҳи равшан вуҷуд дошта бошад — ва беҳтараш танҳо як роҳ.
Агар аз ду барномасози Python хоҳиш кунанд, ки як масъаларо ҳал намоянд, роҳҳои ҳалли онҳо бояд то андозае бо ҳам мувофиқ бошанд.
Ин маънои онро надорад, ки дар барномасозӣ барои эҷодкорӣ ҷой нест. Баръакс, барои эҷодкорӣ ҷой хеле зиёд аст! Аммо қисми зиёди барномасозӣ аз истифодаи равишҳои хурду маъмул барои ҳолатҳои сода дар дохили лоиҳаи бузургтару эҷодӣ иборат аст. Ҷузъиёти асосии кори барномаҳои шумо бояд барои дигар барномасозони Python фаҳмо бошанд.
Now is better than never.
Ҳозир беҳтар аз ҳеҷ гоҳ аст.
Метавонед тамоми умр ҷузъиёти нозуки Python ва умуман барномасозиро омӯзед, аммо дар ин сурат ҳеҷ лоиҳаеро ба анҷом намерасонед.
Кӯшиш накунед аз аввал коди комил нависед. Коде нависед, ки кор мекунад. Сипас қарор диҳед, ки коди ҳамин лоиҳаро беҳтар мекунед ё ба кори нав мегузаред.
Ҳангоми гузаштан ба боби навбатӣ ва омӯхтани мавзӯъҳои мураккабтар кӯшиш кунед ин фалсафаи содагӣ ва равшаниро дар хотир нигоҳ доред. Барномасозони ботаҷриба коди шуморо бештар қадр мекунанд ва бо хушнудӣ фикру тавсияҳояшонро баён намуда, дар лоиҳаҳои ҷолиб бо шумо ҳамкорӣ хоҳанд кард.
Худатон бисанҷед
2–12. Фалсафаи Python: Дар муҳити интерактивии Python фармони import this-ро ворид кунед ва принсипҳои боқимондаро аз назар гузаронед.
Хулоса
Дар ин боб шумо кор бо тағйирёбандаҳоро омӯхтед. Фаҳмидед, ки чӣ гуна номҳои маънодор интихоб кунед ва хатоҳои ном ва синтаксисиро ҳангоми пайдо шуданашон ислоҳ намоед.
Шумо омӯхтед, ки сатр чист ва чӣ гуна онро бо ҳарфҳои хурд, ҳарфҳои калон ва бо ҳарфи аввали калони ҳар калима намоиш диҳед. Барои ба тартиб даровардани натиҷа аз аломатҳои фосилавӣ истифода бурдед ва ҳазф кардани унсурҳои нолозимро аз сатр ёд гирифтед.
Ҳамчунин, кор бо ададҳои бутун ва float-ро оғоз карда, бо баъзе роҳҳои коркарди додаҳои ададӣ шинос шудед. Навиштани шарҳҳои тавзеҳиро омӯхтед, то хондани код ҳам барои худатон ва ҳам барои дигарон осонтар шавад. Дар охир, бо фалсафаи то ҳадди имкон сода нигоҳ доштани код шинос шудед.
Дар боби 3 меомӯзед, ки чӣ гуна маҷмӯаҳои маълумотро дар сохторҳои додаҳо бо номи рӯйхатҳо нигоҳ доред. Ҳамчунин тарзи пайдарпай кор кардан бо рӯйхат ва коркарди маълумоти дохили онро меомӯзед.

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