Uploaded by salimov_int

Лексияи 1

advertisement
Лексияи 1:
Забони барномасозии Python
Муқаддима
Забони барномасозии Python, китобхонаҳои асосии он ва баъзе замимаҳо
(барномањои амали) омухта мешаванд.
Курс ба яке аз забонҳои барномасозии босуръат рушдёбанда ва маъмул Python бахшида шудааст.
Забони Python ба шумо имкон медиҳад, ки ҳам прототипҳои системаҳои
нармафзорро ва ҳам худи системаҳои барномавиро зуд эҷод кунед , дар
ҳамбастагии таъмини барномавї барои ҳалли масъалаҳои истеҳсолӣ кӯмак
мекунад.
Python амалан барои кулли ниёзҳои соҳаи технологияҳои иттилоотӣ
дорои китобхонаи стандартии бой ва миқдори зиёди модулҳои васеъкунӣ
мебошад. Бо шарофати синтаксиси возеҳ, омӯзиши забон мушкилии надорад.
Барномаҳои дар он навишташуда дар шакли сохтор сохта шудаанд ва
пайгирӣ кардани мантиқи кор дар онҳо осон аст. Њангоми омўзиши забони
Python мо чунин мафҳумҳои муҳимро ба назар мегирем: барномасозии ба
объект нигаронидашуда, барномасозии функсионалӣ, барномаҳои ба
рўйдодњо асосёфта (барномаҳои GUI), форматҳои тасвири додањо (Unicode,
XML ва ғайра). Ќобилияти низоми муколамавии интерпретатори Python
имконият медињад, ки вақти омӯзиши худи забон кам карда шуда ба ҳалли
масъалањо дар соҳаҳои марбут гузашта шавад. Python барои бисёр
платформаҳо дастрас аст ва барномаҳое, ки дар он навишта шудаанд, одатан
байни платформаҳо бе тағйир қобили интиқол мебошанд. Ин ҳолат ба шумо
имкон медиҳад, ки платформаи сахтафзореро барои омӯхтани забон
истифода баред.
Хулоса: Дар ин лексия синтаксиси забони Python барои сохторҳои
алгоритми асосӣ, литералҳо ва ифодаҳо муҳокима карда мешавад. Шарњи
навъҳои додањо, инчунин баъзе масъалаҳои услуби барномасозии барои
Python маъмул баррасї карда мешавад.
Калидвожаҳо: ба навъњои динамикӣ људо намудан, RAD, таҳияи
босуръати барномаҳо, забони расмӣ, прагматика, VAN, KOI8-R, дастурамали
услубӣ, шакли Backus-Naur, оператори мураккаб, эллипсис, адади комплексї,
мураккаб, ҳамҷоя, бурида, табдили номуайян , системаи њисоби њаштї, адади
мавњум, навъи бутун, ќимати ҳақиқӣ, пайдарпаии идоракунї, аломати
махсус, функсияи муқоисавӣ, интихоби зергурӯҳ, ҷустуҷӯ, амалҳои яктарафа,
амалиёти дуӣ, афзалияти амал, далели расмӣ, ҳисобкунии истинод, муҳити
тағирёбанда, навъҳои додаҳо
Python чист?
Дар бораи Python (беҳтараш “питон” гуфтан лозим аст, гарчанде ки
баъзеҳо “пайтон” мегӯянд) - таҳиякунандаи ин забони барномасозӣ, голландӣ
Гвидо ван Россум гуфтааст:
"Python забони барномасозии ба объект нигаронидашудаи сатҳи баланд
бо семантикаи(маъношиносии) динамикӣ мебошад.
Сохторҳои дар сатҳи баланд сохташудаи додањо дар якҷоягӣ бо навъњо
људокунии динамикӣ ва ба њам алоќамандкунї заборо барои рушди
босуръати барномаҳо (RAD, RapidApplication Development) ҷолиб месозад.
Ғайр аз он, вайро њамчун забони фаъол (арсавї) барои пайвандсозии ҷузъҳои
барномавї истифода бурдан мумкин аст.
Синтаксиси Python ба осонӣ омӯхта мешавад, ањамияти хос ба хониши
код дода мешавад. Python модулҳо, пакетҳо ва истифодаи такрории кодро
дастгирӣ мекунад. Интерпретатори Python ва китобхонаи калони стандартӣ
ройгон буда барои ҳамаи платформаҳои асосӣ озодона паҳн карда мешавад.
Дар ҷараёни омӯзиш маънои ин таъриф ошкор хоҳад шуд ва ҳоло кифоя аст
донем, ки Python забони барномасозии универсалӣ аст. Он дорои миқёси
татбиќ, афзалиятҳо ва инчунин нуқсонҳо мебошад. Python барои њали доираи
васеи масъалаҳо дорои китобхонаи васеи стандартӣ мебошад. Китобхонаҳои
баландсифат барои Python дар Интернет дар соҳаҳои мухталиф дастрасанд:
воситаҳои коркарди матн ва технологияҳои Интернет, коркарди тасвирҳо,
воситаҳо барои сохтани барномаҳо, механизмҳои дастрасӣ ба пойгоҳҳо,
бастаҳои ҳисобҳои илмӣ, китобхонаҳо барои сохтани интерфейси графикӣ ва
ғайра. Ғайр аз он, Python ҳам тавассути ворид кардани тарҷумон ба
барномаҳо дар забонҳои барномасозї ва баръакс, бо истифода аз
китобхонаҳое, ки дар барномаҳои Python навишта шудаанд воситаҳои оддии
ҳамгироӣ бо забонҳои C, C ++ (ва Java) дорад,.
Мо гуфта метавонем, ки Python як технологияи бутуни ҳамаҷониба барои
эҷоди барномањо (ва прототипҳои онҳо) мебошад. Он тақрибан дар ҳамаи
платформаҳои муосир (ҳам 32 ва 64-бита) бо compiler C ва платформаи Java
дастрас аст.
Чунин ба назар мерасад, ки дар саноати барномасозї, ғайр аз C / C ++,
Java, Visual Basic, C #, ҷой барои чизи дигаре вуҷуд надорад. Аммо, ин чунин
нест. Эҳтимол, ба шарофати ин курсҳои лексияҳо ва машқҳои амалӣ, барои
Python ҷонибдорони нав пайдо шавад ва ба абзори ивазнашаванда табдил
ёбад.
Забонро чӣ гуна тавсиф бояд кард?
Ин лексия барои мунтазам тавсиф кардани Python пешбинӣ нашудааст:
барои ин дастуруламали аслии роњнамої вуҷуд дорад.
Дар ин ҷо пешниҳод карда мешавад, ки тавассути як қатор мисолњо
забон дар якчанд паҳлӯ баррасӣ карда шавад, то ки имкон диҳад ба
барномасозии воқеӣ зудтар ҳамроҳ шавед.
Бояд ба муносибати дурусти тавсифи забон диққат дода шавад.
Сохтани барнома ҳамеша иртибот аст, ки дар он барномасоз ба компютер
иттилооти заруриро барои иҷрои амали охирин интиқол медиҳад. Ин амалњо
аз тарафи барномасоз чи тавр фаҳмида мешаванд, семантика номидан
мумкин аст. Воситаҳои интиқоли ин маъно синтаксиси забони барномасозӣ
мебошанд. Хуб, он чизе, ки интерпретатор (тарҷумон) дар асоси чизи
интиқолёфта иҷро мекунад, одатан прагматизм номида мешавад.
Ифодаи прагматика худи интерпретатори забон аст. Њамин "паёме" -ро,
ки мувофиқи синтаксис сабт шудааст, мехонад ва онро мувофиқи алгоритми
дар он гузошташуда ба амал табдил медиҳад.
Синтаксиси забони Python воситаҳои пурқуввате дорад, ки дарк кардани
масъалањоро аз тарафи барноманависон ба «фаҳмиши» интерпретатор
наздиктар мекунад. Сохторњои дохилии Python дар яке аз лексияҳои ниҳоӣ
муҳокима карда мешаванд.
Таърихи забони Python
Коркарди забони Python аз тарафи Гвидо ван Россум (Guido van Rossum)
соли 1991, вақте ки ӯ дар ОС тақсимшудаи Амеба кор мекард, оғоз ёфт.
Системаи оператсионии тақсимшуда таъмини барномавие аст барои
маҷмӯи интиқолҳои мустақил ва ба шабака пайвастшуда ва ба забони васеъе
ниёз дошт, ки дастгирии зангҳои системаро таъмин кунад.
Њамчун асос дар тањияи ин забони ABC ва Modula-3 гирифта шудааст.
ABC ва Модул -3 забони барномасозии системї мебошад.
Ӯ Python-ро на аз рӯи номи мор, балки ҳамчун ном ба ифтихори силсилаи
комедияи Би-Би-Си дар Монти Питон интихоб кард.
Аз он вақт инҷониб, Python бо дастгирии ташкилотҳое, ки Гидо кор
мекард, ташаккул ёфт. Алалхусус забони муосир дар ҳоли ҳозир, вақте ки дар
он на танҳо гурӯҳи эҷодкорон, балки тамоми ҷомеаи барномасозон аз тамоми
ҷаҳон кор мекунанд, такмил дода мешавад. Бо вуҷуди ин, калимаи охирин
дар бораи самти рушди забон ба Гвидо ван Россум тааллуқ дорад.
Программа на языке Python может состоять из одного или нескольких
модулей. Каждый модуль представляет собой текстовый файл в кодировке,
совместимой с 7-битной кодировкой ASCII. Для кодировок, использующих
старший бит, необходимо явно указывать название кодировки.
Барнома ба забони Python
Барнома ба забони Python метавонад аз як ё якчанд модул иборат бошад.
Ҳар як модул як файли матнии бо рамзгузории 7-bit-и кодгузории ASCII
мувофиқ аст. Барои рамзикунонӣ, бо истифода аз битњои калон бояд ба
таври возеҳ номи рамзгузорї нишон дода шавад.Мисол, модул, тафсирҳо ва ё
литералњои сатрие, ки дар KOI8-R рамзбандӣ шудаанд, дар сатри аввал ё
дуюм бояд мушаххасоти зерин дошта бошанд:
# -*- coding: koi8-r -*Бо шарофати ин мушаххасот (тавсиф), интерпретатори Python медонад,
ки чӣ гуна аломатҳои литералњои рамзи Юникодро ба Юникод дуруст
тарҷума кунад. Бидуни ин сатр, версияҳои нави Python дар ҳар як модуле, ки
бо рамзҳои ҳашт бит-и муқарраршуда дучор мешаванд огоҳӣ медиҳад. Тарзи
модулсозии барномаҳо дар лексияҳои дигар маълум хоҳад шуд. Дар
мисолҳои дар зер буда ҳам порчаҳои модулҳое, ки дар файл ва њам пораҳои
муколама бо интерпретатори Python навишта шуда истифода бурда
мешаванд. Охиринҳо бо даъвати хоси худ >>> фарқ мекунанд. Аломати
панљара (#) шарҳро дар охири сатр қайд мекунад.
Барнома дар Python, аз нуқтаи назари интерпретатор, аз сатрҳои мантиқӣ
иборат аст.
Як сатри мантиқӣ, чун қоида, дар як сатри физикӣ ҷойгир аст. Аммо
сатрҳои дарозии мантиқӣро ба якчанд сатрҳои физикӣ (бо истифода аз хати
моилшакл ё номуайян (дар дохили қавс)) тақсим кардан мумкин аст:
print a, " - сатри хеле дарозе, ки дар 80 аломатљой ", \
, "љойгир шуда наметавонад"
Сохторҳои алгоритмии асосӣ
Пайдарпаии операторњо
Амалҳои пайдарпай бо сатрҳои пайдарпайи барнома тавсиф карда
мешаванд. Аммо илова кардан бамаврид аст, ки дар барномаҳо фосила
гузоштан муҳим аст, аз ин рӯ ҳамаи операторҳое, ки бахши як қисми
пайдарпаии амалҳо мебошанд, бояд фосилаи якхела дошта бошанд:
a=1
b=2
a=a+b
b=a-b
a=a-b
print (a, b)
Ин мисол чӣ кор мекунад? Бо истифодаи аз низоми интерактивии
интерпретатори Python метавонед фарзияи худро санҷед.
Ҳангоми кор бо Python дар низоми интерактивӣ барномае ворид карда
мешавад, ки аз амалҳои пайдарпай иборат аст. Дар мисоли дар боло буда,
операторони бахшиш ва оператори print. Истифода шудаанд.
Оператори шартї ва интихоб
Албатта, фаќат амалњои пайдарпай дар барномасозӣ кифоя нест, аз ин рӯ
ҳангоми навиштани алгоритмҳо амалњои ба шохаҳо људокунї ҳам истифода
мешаванд:
if a > b:
c=a
else:
c=b
Дар ин порчаи коди Python if ва else калимањои забони англисӣ буда,
мувофиќан дар забони тољикї агар ва дар акси њол-тарљума мешаванд. Дар
ин ҳолат оператори ба шохањо људокунї аз ду қисм иборат аст ва њар яке аз
операторон бо фосила навишта шудаанд.
Њолати нисбатан умумии - оператори интихоб - ро бо ёрии синтаксиси
зерин, дар мисоли ҳисоб кардани аломати адад, чунин менависем:
if a < 0:
s = -1
elif a == 0:
s=0
else:
s=1
Қобили зикр аст, ки elif шакли мухтасари else if мебошад. Бе навишти
мухтасар мо бояд оператори болоињам хобидаи ба шохањо људокуниро
истифода барем:
if a < 0:
s = -1
else:
if a == 0:
s=0
else:
s=1
Баръакси оператор print , оператор if-else изҳороти таркибї аст.
Оператори даврї (сиклї, њалќавї)
Третьей необходимой алгоритмической конструкцией является цикл. С
помощью цикла можно описать повторяющиеся действия. В Python имеются
два вида циклов: цикл ПОКА (выполняется некоторое условие) и цикл ДЛЯ
(всех значений последовательности). Следующий пример иллюстрирует
цикл ПОКА на Python:
Сохтори алгоритмии зарурии дигар сохтори даврї аст. Бо истифодаи
сохтори даврї, амалҳои такрорӣ тавсиф карда мешаванд. Дар Python, ду
намуди ҳалқаҳо мавҷуданд: даври while (шарт дуруст аст) ва даври FOR
давр (ҳама ќиматҳои пайдарпай). Мисоли зерин даври while -ро дар
Python нишон медиҳад:
s = "abcdefghijklmnop"
while s != "":
print (s)
s = s[1:-1]
говорит интерпретатору Python: "пока верно условие цикла, выполнять
тело цикла ". В языке Python тело цикла выделяется отступом. Каждое
исполнение тела цикла будет называться итерацией. В приведенном
примере убирается перв(такрорый и последний символ строки до тех пор,
пока не останется пустая строка.
Ҳангоми иљриош Оператор while ба интерпретатори Python супориш
медињад:, ки "то њолате ки шарти ҳалқа дуруст аст, сохтори давр иҷро
гардад." Дар Python, сохтори давр бо фосила људо карда мешавад. Ҳар як
иҷрои сохтори давр iteration (такрор) номида мешавад. Дар мисоли болоӣ,
аломати аввал ва охирини сатр то он даме, ки сатр холӣ мемонад, нест карда
мешавад.
Барои мутобиқати бештар дар ташкили ҳалқаҳо, операторҳои break ( ќатъ
кардан) ва continue (давом додан) истифода мешаванд. Якум ба шумо имкон
медиҳад, ки кори оператори давриро қатъ кунед, ва дуввум ба шумо имкон
медиҳад, ки кори оператори давриро бо гузаштан ба итератсияи навбатӣ
идома диҳед (агар, албатта, шарти ин давра қонеъ карда шавад).
Мисоли зерин сатрҳоро аз файл мехонад ва онҳое, ки дарозии зиёда аз 5
доранд чоп мекунад:
f = open("file.txt", "r")
while f:
l = f.readline()
if not l:
break
if len(l) > 5:
print l
f.close()
Дар ин мисол, даври беохир ташкил шудааст, ки он танҳо ҳангоми ба даст
овардани сатри холӣ (l) аз файл ќатъ гардида охири файлро нишон медиҳад.
Дар Python, ҳар як объект ќимати мантиқӣ дорад: сифрҳо, сатрҳои холӣ ва
пайдарҳамӣ, объекти махсус None ва literal False ќимати False (дурӯғ) ва
дигар объектҳо ќимати True (рост) доранд. Барои нишон додани ҳақиқат
одатан 1 ё True истифода мешавад.
Даври for сохтори давраро барои ҳар як унсури пайдарпай иҷро мекунад.
Дар мисоли зерин ҷадвали зарб нишон дода шудааст:
for i in range(1, 10):
for j in range(1, 10):
print(f"%2d ={i}*{j}" %
print
(i*j)),
Дар инҷо ҳалқаҳои for болои њам ҷойгир карда шудаанд.Функсияи range
() рӯйхати тамоми ададњои бутунро дар фосилаи [1, 10] мебарорад. Пеш аз
ҳар як такрор, ҳисобкунаки давр ќимати навбатиро аз ин рӯйхат мегирад. Дар
Python диапазонҳои кушода одатан қабул карда шудаанд. Гумон меравад, ки
истифодаи онҳо қулайтар аст ва хатогиҳои камтари барномаро ба бор меорад.
Масалан, range(len(s)) рӯйхати индексҳоро барои рӯйхати s тавлид мекунад
(дар Python, пайдарпайии элементи аввал индекси 0 дорад).Барои чопи зебои
ҷадвали зарб, амали форматкунӣ % истифода мешавад (барои ададҳои бутун,
ҳамин аломат барои амали гирифтани боқимондаи тақсим истифода
мешавад). Сатри форматкунї дар тарафи чап нишон дода мешавад.
Функсияњо
Барномасоз функсияҳои хоси худро бо ду роҳ муайян карда метавонад: бо
истифодаи оператор def ё бевосита дар ифода ба воситаи lambda. Усули
дуввум (ва воқеан кор бо функсияҳо) дар лексия оид ба барномасозии
функсионалӣ дар Python муфассалтар муҳокима карда мешавад ва дар ин ҷо
намунаи муайян ва даъват кардани функсияро дида мебароем:
def cena(rub, kop=0):
return "%i руб. %i коп." % (rub, kop)
print(cena(8, 50))
print (cena(7))
print (cena(rub=23, kop=70))
Дар ин мисол функсияи ду аргумент муайян карда шудааст (ки
аргументи дуюм дорои ќимати пешфарзии 0 аст). Инчунин якчанд
вариантҳои даъват кардани ин функсия бо параметрҳои пешнињод карда
шудаанд. Қобили зикр аст, ки ҳангоми даъвати функсия, аввал параметрҳои
мавқеъӣ, сипас параметрҳои номгузоришуда иљро мегарданд. Аргументҳо
бо ќиматҳои пешфарзӣ бояд аз пайи аргументои муқаррарї бошанд. Оператор
return ќимати функсияро бармегардонад. Танҳо як объектро аз функсия
баргардонидан мумкин аст, аммо он метавонад якчанд объект бошад.Пас аз
оператори def, номи cena бо объекти функсионалї алоқаманд мегардад.
Истисноҳо
Дар барномаҳои муосир интиқоли идоракунї на ҳамеша
чун
сохторњои дар боло тавсифшуда амали мегарданд. Барои ҳалли
ҳолатҳои махсус (масалан, тақсим кардани сифр ё кӯшиши хондан аз
файли вуҷуднадошта) механизми истисно истифода мешавад. Беҳтараш
синтаксиси оператори try-except -ро бо мисоли зерин шарҳ медиҳем:
try:
res = int(open('a.txt').read()) / int(open('c.txt').read())
print (res)
except IOError:
print ("Ошибка ввода-вывода")
except ZeroDivisionError:
print("Деление на 0")
except KeyboardInterrupt:
print ("Прерывание с клавиатуры")
except:
print ("Ошибка")
Дар ин мисол, рақамҳо аз ду файл гирифта шуда, яке ба дигараш тақсим
карда мешаванд.Дар натиҷаи ин амалҳои оддӣ якчанд ҳолатҳои истисноӣ ба
миён омада метавонад, ки баъзе аз онҳо дар қисмҳои except қайд карда
шудаанд (дар ин ҷо истисноҳои муқаррарии Python истифода шудаанд).
Қисми охирини except дар ин мисол, ҳама истисноҳои дигарро, ки дар боло
оварда шудаанд дарбар мегирад. Барои намуна, агар ҳадди аққал дар яке аз
файлҳо ќимати ѓайри рақами бошад, функсияи int () истиснои ValueError -ро
ба вуљуд меоварад. Вайро ќисми охирини except ошкор карда метавонад.
Албатта, иҷрои қисми try дар ҳолати хатогӣ пас аз иҷрои яке аз ќисмҳои e
xcept идома нахоҳад ёфт.
Бар хилофи дигар забонҳои барномасозӣ, истисноҳо дар Python одатан
барои соддагардонии алгоритмҳо хизмат мекунанд. Бо навиштани оператор
try-except, барномасоз метавонад чунин фикр кунад: "Ман кӯшиш мекунам,
аммо агар он ба амал наояд, код дар except иҷро карда мешавад ". Хусусвн,
барои ифодаи ифодаҳое истифода мешавад, ки қимматњои онњо аз рўи
калиди дар инъикос пайдошуда гирифта шудааст:
try:
value = dict[key]
except:
value = default_value
Вместо
if dict.has_key(key):
value = dict[key]
else:
value = default_value
Download