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

Омӯзиши барномасозӣ бо Python аз сифр: насби Python ва муҳаррири код, тағйирёбандаҳо ва сатрҳо, рӯйхатҳо, дастурҳои if, луғатҳо, воридкунии маълумот ва даврҳои while, функсияҳо, классҳо, кор бо файлҳо ва истисноҳо ва санҷиши код бо pytest. Ҳар боб мисолҳои код ва машқҳои «Худатон бисанҷед» дорад. Муқаддима ва бобҳои 2–11 тарҷумаи тоҷикии китоби Эрик Маттес «Python Crash Course» (нашри 3) мебошанд; боби 1 ва замима барои ин нашр навишта шудаанд.
Агенти Зеҳнӣ · 16 октябри 2026 · 13 саҳифа · 2 писанд
Боби 6. Луғатҳо
Дар ин боб шумо истифодаи луғатҳо (dictionaries)-и Python-ро меомӯзед. Луғатҳо имкон медиҳанд, ки маълумоти ба ҳам алоқамандро бо якдигар пайваст кунед. Шумо меомӯзед, ки чӣ гуна ба маълумоти дар луғат нигоҳдошташуда дастрасӣ пайдо кунед ва онро тағйир диҳед. Азбаски луғатҳо метавонанд миқдори хеле зиёди маълумотро нигоҳ доранд, ман нишон медиҳам, ки чӣ гуна маълумоти луғатро бо давр паймоиш кардан мумкин аст. Ҳамчунин, шумо ҷойгир кардани луғатҳо дар дохили рӯйхатҳо, рӯйхатҳо дар дохили луғатҳо ва ҳатто луғатҳо дар дохили луғатҳои дигарро меомӯзед.
Фаҳмидани луғатҳо ба шумо имкон медиҳад, ки объектҳои гуногуни ҷаҳони воқеиро дақиқтар моделсозӣ кунед. Масалан, метавонед луғате созед, ки як шахсро муаррифӣ мекунад ва дар он ҳар қадаре хоҳед, дар бораи ӯ маълумот нигоҳ доред: ном, синну сол, маҳалли зист, касб ва ҳар хусусияти дигари ӯро. Шумо метавонед ҳар ду навъи маълумоти ба ҳам мувофиқро нигоҳ доред: калимаҳо ва маъноҳои онҳо, номи одамон ва рақамҳои дӯстдоштаашон, номи кӯҳҳо ва баландии онҳо ва ғайра.
Луғати одӣ
Бозиеро тасаввур кунед, ки дар он мавҷудоти бегона рангҳо ва миқдори холҳои гуногун доранд. Луғати одии зерин маълумоти як мавҷуди бегонаро нигоҳ медорад:
alien.py
alien_0 = {'color': 'green', 'points': 5}
print(alien_0['color'])
print(alien_0['points'])
Луғати alien_0 ранг ва миқдори холҳои мавҷуди бегонаро нигоҳ медорад. Ду сатри охир ин маълумотро гирифта, намоиш медиҳанд:
green
5
Мисли аксари мафҳумҳои нави барномасозӣ, истифодаи луғатҳо машқ мехоҳад. Пас аз андаке кор кардан бо онҳо, хоҳед дид, ки луғатҳо вазъиятҳои ҷаҳони воқеиро то чӣ андоза самаранок моделсозӣ мекунанд.
Кор бо луғатҳо
Луғат дар Python маҷмуаи ҷуфтҳои калид–қимат мебошад. Ҳар калид ба як қимат пайваст аст ва шумо метавонед бо истифода аз калид ба қимати мувофиқи он дастрасӣ пайдо кунед. Қимати калид метавонад адад, сатр, рӯйхат ё ҳатто луғати дигар бошад. Дар асл, ҳар объектеро, ки дар Python сохтан мумкин аст, метавон ҳамчун қимат дар луғат истифода бурд.
Дар Python луғат дар дохили қавсҳои фигурӣ — {} — навишта мешавад. Дар байни ин қавсҳо ҷуфтҳои калид–қимат ҷой мегиранд, чунон ки дар мисоли пешина дидем:
alien_0 = {'color': 'green', 'points': 5}
Ҷуфти калид–қимат аз ду ҷузъи ба ҳам алоқаманд иборат аст. Вақте ки калидро пешниҳод мекунед, Python қимати ба он вобастаро бармегардонад. Ҳар калид аз қимати худ бо аломати дунуқта : ҷудо мешавад ва ҷуфтҳои алоҳида бо вергул аз ҳам ҷудо мешаванд. Дар луғат метавонед ҳар қадар ҷуфти калид–қимат, ки лозим бошад, нигоҳ доред.
Содатарин луғат ҳамагӣ як ҷуфти калид–қимат дорад. Инро дар шакли тағйирёфтаи луғати alien_0 мебинем:
alien_0 = {'color': 'green'}
Ин луғат як маълумотро дар бораи alien_0 нигоҳ медорад: ранги мавҷуди бегонаро. Сатри 'color' калиди ин луғат аст ва қимати ба он вобаста 'green' мебошад.
Дастрасӣ ба қиматҳои луғат
Барои гирифтани қимати ба калид вобаста, номи луғатро нависед ва баъд калидро дар дохили қавсҳои чоркунҷа ҷойгир кунед:
alien.py
alien_0 = {'color': 'green'}
print(alien_0['color'])
Ин код қимати ба калиди 'color' вобастаро аз луғати alien_0 бармегардонад:
green
Луғат метавонад шумораи хеле зиёди ҷуфтҳои калид–қимат дошта бошад. Масалан, ин ҳамон луғати ибтидоии alien_0 аст, ки ду ҷуфти калид–қимат дорад:
alien_0 = {'color': 'green', 'points': 5}
Акнун метавонед ҳам ба ранг ва ҳам ба миқдори холҳои alien_0 дастрасӣ пайдо кунед. Агар бозигар ин мавҷудро нобуд кунад, метавонед бо чунин код муайян кунед, ки ӯ чанд хол бояд гирад:
alien_0 = {'color': 'green', 'points': 5}
new_points = alien_0['points']
print(f"Шумо ҳозир {new_points} хол гирифтед!")
Пас аз муайян кардани луғат, қимати ба калиди 'points' вобастаро аз он мегирем. Сипас ин қимат ба тағйирёбандаи new_points бахшида мешавад. Сатри охир хабареро дар бораи холҳои гирифтаи бозигар чоп мекунад:
Шумо ҳозир 5 хол гирифтед!
Агар ин кодро ҳар дафъа пас аз нобуд шудани мавҷуди бегона иҷро кунед, миқдори холҳои он гирифта мешавад.
Илова кардани ҷуфтҳои нави калид–қимат
Луғатҳо сохторҳои тағйирпазир мебошанд ва шумо метавонед ҳар вақт ба онҳо ҷуфтҳои нави калид–қимат илова кунед. Барои ин номи луғатро нависед, калиди навро дар қавсҳои чоркунҷа ҷойгир кунед ва ба он қимати нав бахшед.
Биёед ба луғати alien_0 ду маълумоти нав илова кунем: координатаҳои x ва y-и мавҷуд. Ин координатаҳо барои дар ҷойи муайяни экран намоиш додани он кумак мекунанд.
Мавҷудро дар канори чапи экран, 25 пиксел поёнтар аз боло ҷойгир мекунем. Азбаски координатаҳои экран одатан аз кунҷи болоии чап оғоз мешаванд, барои дар канори чап ҷойгир кардани мавҷуд координатаи x-ро ба 0 баробар мекунем. Барои 25 пиксел поёнтар аз боло ҷойгир кардан, координатаи y-ро ба адади мусбати 25 баробар мекунем:
alien.py
alien_0 = {'color': 'green', 'points': 5}
print(alien_0)
alien_0['x_position'] = 0
alien_0['y_position'] = 25
print(alien_0)
Аввал ҳамон луғатеро муайян мекунем, ки то ин ҷо истифода мебурдем. Баъд луғатро чоп мекунем, то ҳолати кунунии маълумоти онро бубинем.
Сипас ҷуфти нави калид–қимат илова мекунем: калиди 'x_position' ва қимати 0. Ҳамин корро барои калиди 'y_position' низ анҷом медиҳем. Вақте ки луғати тағйирёфтаро чоп мекунем, ду ҷуфти иловагии калид–қиматро мебинем:
{'color': 'green', 'points': 5}
{'color': 'green', 'points': 5, 'x_position': 0, 'y_position': 25}
Шакли ниҳоии луғат чор ҷуфти калид–қимат дорад. Ду ҷуфти аввал ранг ва миқдори холҳоро муайян мекунанд ва ду ҷуфти дигар ҷойгиршавии мавҷудро нишон медиҳанд.
Луғатҳо тартиби илова шудани ҷузъҳоро нигоҳ медоранд. Ҳангоми чоп кардани луғат ё паймоиши ҷузъҳои он, ҷузъҳоро бо ҳамон тартибе мебинед, ки ба луғат илова шуда буданд.
Оғоз кардан аз луғати холӣ
Баъзан аз луғати холӣ оғоз карда, баъд ҷузъҳоро ба он илова кардан қулай ё ҳатто зарур мешавад. Барои пур кардани луғати холӣ, аввал луғатеро бо қавсҳои фигурии холӣ муайян кунед. Сипас ҳар ҷуфти калид–қиматро дар сатри алоҳида илова кунед.
Масалан, луғати alien_0-ро бо ин роҳ чунин месозем:
alien.py
alien_0 = {}
alien_0['color'] = 'green'
alien_0['points'] = 5
print(alien_0)
Аввал луғати холии alien_0-ро муайян мекунем ва баъд ба он ранг ва миқдори холҳоро илова мекунем. Натиҷа ҳамон луғатест, ки дар мисолҳои пешина истифода мекардем:
{'color': 'green', 'points': 5}
Одатан, ҳангоми дар луғат нигоҳ доштани маълумоти воридкардаи корбар ё навиштани коде, ки шумораи зиёди ҷуфтҳои калид–қиматро худкор месозад, аз луғатҳои холӣ истифода мебаред.
Тағйир додани қиматҳои луғат
Барои тағйир додани қимат дар луғат, номи луғат ва калидро дар қавсҳои чоркунҷа нависед. Баъд қимати наверо бахшед, ки мехоҳед ба он калид вобаста шавад.
Масалан, мавҷудеро тасаввур кунед, ки ҳангоми пеш рафтани бозӣ рангаш аз сабз ба зард табдил меёбад:
alien.py
alien_0 = {'color': 'green'}
print(f"Ранги мавҷуд: {alien_0['color']}.")
alien_0['color'] = 'yellow'
print(f"Ранги ҳозираи мавҷуд: {alien_0['color']}.")
Аввал барои alien_0 луғате муайян мекунем, ки танҳо ранги мавҷудро дар бар мегирад. Сипас қимати ба калиди 'color' вобастаро ба 'yellow' тағйир медиҳем. Натиҷа нишон медиҳад, ки ранги мавҷуд аз сабз ба зард табдил ёфтааст:
Ранги мавҷуд: green.
Ранги ҳозираи мавҷуд: yellow.
Барои мисоли ҷолибтар, биёед ҷойгиршавии мавҷудеро пайгирӣ кунем, ки бо суръатҳои гуногун ҳаракат карда метавонад. Қиматеро нигоҳ медорем, ки суръати кунунии онро ифода мекунад. Баъд аз ин қимат истифода бурда, муайян мекунем, ки мавҷуд бояд чӣ қадар ба тарафи рост ҳаракат кунад:
alien_0 = {'x_position': 0, 'y_position': 25, 'speed': 'medium'}
print(f"Мавқеи ибтидоӣ: {alien_0['x_position']}")
# Мавҷудро ба тарафи рост ҳаракат медиҳем.
# Масофаи ҳаракатро аз рӯйи суръати кунунии он муайян мекунем.
if alien_0['speed'] == 'slow':
x_increment = 1
elif alien_0['speed'] == 'medium':
x_increment = 2
else:
# Дар ин ҳолат мавҷуд босуръат аст.
x_increment = 3
# Мавқеи нав ба мавқеи пешина ҷамъ бо афзоиш баробар аст.
alien_0['x_position'] = alien_0['x_position'] + x_increment
print(f"Мавқеи нав: {alien_0['x_position']}")
Аввал мавҷудеро бо мавқеъҳои ибтидоии x ва y ва суръати 'medium' муайян мекунем. Барои содагӣ, ранг ва миқдори холҳоро нанавиштаем. Аммо агар ин ҷуфтҳои калид–қиматро низ илова мекардем, мисол ба ҳамин тарз кор мекард. Ҳамчунин, қимати ибтидоии x_position-ро чоп мекунем, то бубинем, ки мавҷуд чӣ қадар ба тарафи рост ҳаракат мекунад.
Занҷираи if-elif-else муайян мекунад, ки мавҷуд бояд чӣ қадар ба тарафи рост ҳаракат кунад ва ин қиматро ба тағйирёбандаи x_increment мебахшад. Агар суръат 'slow' бошад, мавҷуд як воҳид ба рост ҳаракат мекунад; агар суръат 'medium' бошад, ду воҳид ва агар 'fast' бошад, се воҳид ҳаракат мекунад.
Пас аз ҳисоб шудани афзоиш, онро ба қимати x_position ҷамъ мекунем ва натиҷаро дар x_position-и луғат нигоҳ медорем.
Азбаски ин мавҷуд суръати миёна дорад, мавқеаш ду воҳид ба тарафи рост мекӯчад:
Мавқеи ибтидоӣ: 0
Мавқеи нав: 2
Ин усул хеле ҷолиб аст: бо тағйир додани ҳамагӣ як қимат дар луғати мавҷуд, метавонед рафтори умумии онро тағйир диҳед. Масалан, барои ба мавҷуди босуръат табдил додани ин мавҷуди миёнасуръат, чунин сатр илова мекунед:
alien_0['speed'] = 'fast'
Ҳангоми иҷрои навбатии код, блоки if-elif-else ба x_increment қимати калонтар мебахшад.
Ҳазф кардани ҷуфтҳои калид–қимат
Вақте ки маълумоти дар луғат нигоҳдошташуда дигар лозим нест, метавонед бо дастури del ҷуфти калид–қиматро пурра ҳазф кунед. Барои del танҳо номи луғат ва калиде лозим аст, ки мехоҳед ҳазф кунед.
Масалан, калиди 'points' ва қимати онро аз луғати alien_0 ҳазф мекунем:
alien.py
alien_0 = {'color': 'green', 'points': 5}
print(alien_0)
del alien_0['points']
print(alien_0)
Дастури del ба Python мегӯяд, ки калиди 'points'-ро аз луғати alien_0 ҳамроҳ бо қимати ба он вобаста ҳазф кунад. Натиҷа нишон медиҳад, ки калиди 'points' ва қимати 5 ҳазф шудаанд, вале қисми боқимондаи луғат тағйир наёфтааст:
{'color': 'green', 'points': 5}
{'color': 'green'}
Эзоҳ: Дар хотир дошта бошед, ки ҷуфти калид–қимати ҳазфшуда ба таври доимӣ хориҷ мешавад.
Луғат барои объектҳои ҳаммонанд
Дар мисоли пешина навъҳои гуногуни маълумотро дар бораи як объект — мавҷуди бегона дар бозӣ — нигоҳ доштем. Луғатро ҳамчунин барои нигоҳ доштани як навъи маълумот дар бораи объектҳои зиёд истифода бурдан мумкин аст.
Масалан, фарз кунед, ки мехоҳед аз чанд нафар бипурсед, ки забони барномасозии дӯстдоштаашон кадом аст. Луғат барои нигоҳ доштани натиҷаҳои чунин пурсиши одӣ мувофиқ аст:
favorite_languages.py
favorite_languages = {
'jen': 'python',
'sarah': 'c',
'edward': 'rust',
'phil': 'python',
}
Тавре мебинед, луғати калонтарро ба чанд сатр тақсим кардем. Ҳар калид номи шахси дар пурсиш иштироккарда мебошад ва ҳар қимат забони интихобкардаи ӯст.
Вақте медонед, ки барои муайян кардани луғат зиёда аз як сатр лозим мешавад, пас аз қавси фигурии кушода тугмаи ENTER-ро пахш кунед. Сатри навро як сатҳ — чор фосила — ба дарун кашед ва ҷуфти аввали калид–қиматро бо вергул дар охираш нависед. Минбаъд, ҳангоми пахш кардани ENTER, муҳаррири матн бояд ҷуфтҳои навбатиро худкор бо ҳамон фосилагузории ҷуфти аввал ҷойгир кунад.
Пас аз анҷоми муайян кардани луғат, қавси фигурии пӯшидаро дар сатри нав, баъд аз ҷуфти охир нависед. Онро як сатҳ ба дарун кашед, то бо калидҳои луғат ҳамсатҳ шавад. Пас аз ҷуфти охири калид–қимат низ гузоштани вергул кори хуб аст: дар ин сурат барои илова кардани ҷуфти нав дар сатри оянда омода мешавед.
Эзоҳ: Аксари муҳаррирҳо имкониятҳое доранд, ки барои ба ҳамин тарз шакл додани рӯйхатҳо ва луғатҳои дароз кумак мекунанд. Усулҳои дигари қобили қабули шаклдиҳии луғатҳои дароз низ ҳастанд. Бинобар ин, дар муҳаррири худ ё манбаъҳои дигар мумкин аст шаклдиҳии каме фарқкунандаро бинед.
Агар номи шахси дар пурсиш иштироккардаро донед, метавонед аз ин луғат забони дӯстдоштаи ӯро ба осонӣ пайдо кунед:
favorite_languages.py
favorite_languages = {
'jen': 'python',
'sarah': 'c',
'edward': 'rust',
'phil': 'python',
}
language = favorite_languages['sarah'].title()
print(f"Забони дӯстдоштаи Sarah — {language} аст.")
Барои фаҳмидани он ки Sarah кадом забонро интихоб кардааст, қимати зеринро мегирем:
favorite_languages['sarah']
Бо ин тарзи навишт забони дӯстдоштаи Sarah-ро аз луғат гирифта, ба тағйирёбандаи language мебахшем. Дар ин ҷо сохтани тағйирёбандаи нав навишти даъвати print()-ро хеле тозатар мекунад. Натиҷа забони дӯстдоштаи Sarah-ро нишон медиҳад:
Забони дӯстдоштаи Sarah — C аст.
Ҳамин тарзи навиштро барои ҳар шахси дигаре, ки дар луғат ҳаст, истифода бурдан мумкин аст.
Истифодаи get() барои дастрасӣ ба қиматҳо
Барои гирифтани қимати лозима аз луғат, навиштани калид дар қавсҳои чоркунҷа метавонад як мушкил ба вуҷуд орад: агар калиди дархостшуда вуҷуд надошта бошад, хато мегиред.
Биёед бубинем, ки ҳангоми дархости миқдори холҳои мавҷуде, ки барояш хол муайян нашудааст, чӣ рӯй медиҳад:
alien_no_points.py
alien_0 = {'color': 'green', 'speed': 'slow'}
print(alien_0['points'])
Дар натиҷа, гузориши хато пайдо мешавад, ки KeyError-ро нишон медиҳад:
Traceback (most recent call last):
File "alien_no_points.py", line 2, in
print(alien_0['points'])
~~~~~~~^^^^^^^^^^
KeyError: 'points'
Дар боби 10 шумо дар бораи коркарди чунин хатоҳо маълумоти бештар мегиред. Аммо махсус барои луғатҳо метавонед аз методи get() истифода баред. Ин метод имкон медиҳад, ки қимати пешфарзро муайян кунед: агар калиди дархостшуда вуҷуд надошта бошад, ҳамин қимат баргардонда мешавад.
Методи get() ҳамчун аргументи аввал калидро талаб мекунад. Ҳамчун аргументи дуюми ихтиёрӣ метавонед қиматеро диҳед, ки ҳангоми набудани калид баргардонда шавад:
alien_0 = {'color': 'green', 'speed': 'slow'}
point_value = alien_0.get('points', 'Миқдори холҳо муайян нашудааст.')
print(point_value)
Агар калиди 'points' дар луғат вуҷуд дошта бошад, қимати мувофиқи онро мегиред. Агар вуҷуд надошта бошад, қимати пешфарзро мегиред. Дар ин мисол points вуҷуд надорад, бинобар ин ба ҷойи хато паёми фаҳмо мегирем:
Миқдори холҳо муайян нашудааст.
Агар эҳтимол дошта бошад, ки калиди дархостшаванда вуҷуд надорад, истифодаи get()-ро ба ҷойи қавсҳои чоркунҷа баррасӣ кунед.
Эзоҳ: Агар ҳангоми даъвати get() аргументи дуюмро нанависед ва калид вуҷуд надошта бошад, Python қимати None-ро бармегардонад. Қимати махсуси None маънои «қимат вуҷуд надорад»-ро дорад. Ин хато нест: қимати махсусест, ки набудани қиматро нишон медиҳад. Дар боби 8 бо истифодаҳои дигари None шинос мешавед.
Худатон бисанҷед
6-1. Шахс: Барои нигоҳ доштани маълумот дар бораи шахси шиносатон аз луғат истифода баред. Ном, насаб, синну сол ва шаҳри зисти ӯро нигоҳ доред. Калидҳое мисли first_name, last_name, age ва city дошта бошед. Ҳар маълумоти дар луғат нигоҳдошташударо чоп кунед.
6-2. Рақамҳои дӯстдошта: Барои нигоҳ доштани рақамҳои дӯстдоштаи одамон аз луғат истифода баред. Панҷ ном интихоб кунед ва онҳоро ҳамчун калидҳои луғат истифода баред. Барои ҳар шахс рақами дӯстдоштае интихоб карда, онро ҳамчун қимат нигоҳ доред. Номи ҳар шахс ва рақами дӯстдоштаи ӯро чоп кунед. Барои ҷолибтар шудани кор, аз чанд дӯстатон пурсед ва барои барнома маълумоти воқеӣ гиред.
6-3. Фарҳанги истилоҳот: Луғати Python-ро метавон барои моделсозии луғати воқеии калимаҳо истифода бурд. Аммо барои пешгирӣ аз иштибоҳ, онро «фарҳанги истилоҳот» меномем.
- Панҷ истилоҳи барномасозиро, ки дар бобҳои пешина омӯхтед, интихоб кунед. Онҳоро ҳамчун калид ва маъноҳояшонро ҳамчун қимат дар фарҳанги худ нигоҳ доред.
- Ҳар калима ва маънояшро бо шакли тозаву хонданӣ чоп кунед. Метавонед пас аз калима дунуқта гузошта, баъд маънояшро нависед. Ё калимаро дар як сатр ва маънояшро бо фосила аз аввали сатри дуюм чоп кунед. Барои байни ҷуфтҳои калима–маъно гузоштани сатри холӣ аз аломати сатри нав
\nистифода баред.
Паймоиши луғат бо давр
Як луғати Python метавонад ҳамагӣ чанд ҷуфти калид–қимат ё миллионҳо чунин ҷуфт дошта бошад. Азбаски луғат метавонад миқдори зиёди маълумотро дар бар гирад, Python имкон медиҳад, ки онро бо давр паймоиш кунед.
Луғатҳоро барои нигоҳ доштани маълумот ба роҳҳои гуногун истифода бурдан мумкин аст. Аз ин рӯ, роҳҳои гуногуни паймоиши онҳо низ вуҷуд доранд. Метавонед ҳамаи ҷуфтҳои калид–қимат, танҳо калидҳо ё танҳо қиматҳои луғатро паймоиш кунед.
Паймоиши ҳамаи ҷуфтҳои калид–қимат
Пеш аз омӯзиши роҳҳои гуногуни паймоиш, луғати наверо баррасӣ мекунем, ки барои нигоҳ доштани маълумоти корбари сомона пешбинӣ шудааст. Луғати зерин номи корбарӣ, ном ва насаби як шахсро нигоҳ медорад:
user.py
user_0 = {
'username': 'efermi',
'first': 'enrico',
'last': 'fermi',
}
Бо истифода аз донишҳои то ин ҷо омӯхтаатон метавонед ба ҳар маълумоти алоҳидаи user_0 дастрасӣ пайдо кунед. Аммо агар хоҳед тамоми маълумоти дар луғати ин корбар нигоҳдошташударо бубинед, чӣ кор мекунед? Барои ин метавонед луғатро бо даври for паймоиш кунед:
user_0 = {
'username': 'efermi',
'first': 'enrico',
'last': 'fermi',
}
for key, value in user_0.items():
print(f"\nКалид: {key}")
print(f"Қимат: {value}")
Барои навиштани даври for барои луғат, ду тағйирёбанда муайян мекунед. Яке калид ва дигаре қимати ҳар ҷуфти калид–қиматро нигоҳ медорад. Барои ин ду тағйирёбанда метавонед ҳар номеро интихоб кунед. Агар номҳои кӯтоҳро низ истифода баред, код ҳамин тавр кор мекунад:
for k, v in user_0.items():
Қисми дуюми дастури for аз номи луғат ва методи items() иборат аст. Ин метод ҷуфтҳои калид–қиматро барои паймоиш пешниҳод мекунад. Даври for ҳар ҷуфтро гирифта, калид ва қиматашро ба ду тағйирёбандаи муайяншуда мебахшад.
Дар мисоли боло, аз ин тағйирёбандаҳо барои чоп кардани ҳар калид ва баъд қимати ба он вобаста истифода мебарем. Аломати \n дар даъвати аввали print() пеш аз ҳар ҷуфти калид–қимат сатри холӣ мегузорад:
Калид: username
Қимат: efermi
Калид: first
Қимат: enrico
Калид: last
Қимат: fermi
Паймоиши ҳамаи ҷуфтҳои калид–қимат махсусан барои луғатҳое мисли мисоли favorite_languages.py дар бахши «Луғат барои объектҳои ҳаммонанд» мувофиқ аст. Он луғат як навъи маълумотро барои калидҳои гуногун нигоҳ медорад.
Агар луғати favorite_languages-ро паймоиш кунед, номи ҳар шахс ва забони барномасозии дӯстдоштаи ӯро мегиред. Азбаски калидҳо ҳамеша номи шахс ва қиматҳо ҳамеша забон мебошанд, дар давр ба ҷойи key ва value аз тағйирёбандаҳои name ва language истифода мебарем. Ин фаҳмидани кори дохили даврро осон мекунад:
favorite_languages.py
favorite_languages = {
'jen': 'python',
'sarah': 'c',
'edward': 'rust',
'phil': 'python',
}
for name, language in favorite_languages.items():
print(f"Забони дӯстдоштаи {name.title()} — {language.title()} аст.")
Ин код ба Python мегӯяд, ки ҳар ҷуфти калид–қимати луғатро паймоиш кунад. Ҳангоми кор бо ҳар ҷуфт, калид ба тағйирёбандаи name ва қимат ба тағйирёбандаи language бахшида мешавад. Ин номҳои пурмаъно фаҳмидани кори print()-ро осонтар мекунанд.
Акнун бо ҳамагӣ чанд сатри код метавонем тамоми маълумоти пурсишро намоиш диҳем:
Забони дӯстдоштаи Jen — Python аст.
Забони дӯстдоштаи Sarah — C аст.
Забони дӯстдоштаи Edward — Rust аст.
Забони дӯстдоштаи Phil — Python аст.
Ин навъи паймоиш ҳатто агар луғат натиҷаи пурсиши ҳазор ё миллион нафарро нигоҳ медошт, низ ҳамин тавр кор мекард.
Паймоиши ҳамаи калидҳои луғат
Методи keys() вақте муфид аст, ки ба кор бо ҳамаи қиматҳои луғат ниёз надоред. Биёед луғати favorite_languages-ро паймоиш карда, номи ҳамаи иштирокчиёни пурсишро чоп кунем:
favorite_languages = {
'jen': 'python',
'sarah': 'c',
'edward': 'rust',
'phil': 'python',
}
for name in favorite_languages.keys():
print(name.title())
Ин даври for ба Python мегӯяд, ки ҳамаи калидҳои луғати favorite_languages-ро гирифта, онҳоро як-як ба тағйирёбандаи name бахшад. Натиҷа номи ҳамаи иштирокчиёни пурсишро нишон медиҳад:
Jen
Sarah
Edward
Phil
Дар асл, ҳангоми паймоиши луғат рафтори пешфарз паймоиши калидҳо мебошад. Аз ин рӯ, агар ба ҷойи:
for name in favorite_languages.keys():
чунин нависед:
for name in favorite_languages:
натиҷа айнан яксон мешавад.
Агар истифодаи ошкори keys() хондани кодро осонтар кунад, метавонед онро нависед. Агар хоҳед, метавонед онро нанависед.
Дар дохили давр, бо истифода аз калиди ҷорӣ метавонед ба қимати ба он вобаста дастрасӣ пайдо кунед. Биёед ба чанд дӯстамон дар бораи забонҳои интихобкардаашон паём чоп кунем. Мисли пешина номҳоро дар луғат паймоиш мекунем, аммо вақте ном ба номи яке аз дӯстонамон мувофиқ меояд, дар бораи забони дӯстдоштаи ӯ паём нишон медиҳем:
favorite_languages = {
'jen': 'python',
'sarah': 'c',
'edward': 'rust',
'phil': 'python',
}
friends = ['phil', 'sarah']
for name in favorite_languages.keys():
print(f"Салом, {name.title()}.")
if name in friends:
language = favorite_languages[name].title()
print(f"\t{name.title()}, мебинам, ки ту {language}-ро дӯст медорӣ!")
Аввал рӯйхати дӯстонеро месозем, ки мехоҳем барояшон паём чоп кунем. Дар дохили давр номи ҳар шахсро чоп мекунем. Баъд месанҷем, ки номи ҷорӣ дар рӯйхати friends ҳаст ё не.
Агар бошад, бо истифода аз номи луғат ва қимати ҷории name ҳамчун калид, забони дӯстдоштаи он шахсро муайян мекунем. Сипас паёми махсусеро чоп мекунем, ки дар он забони интихобкардаи ӯ зикр мешавад.
Номи ҳама чоп мешавад, аммо дӯстонамон паёми махсус мегиранд:
Салом, Jen.
Салом, Sarah.
Sarah, мебинам, ки ту C-ро дӯст медорӣ!
Салом, Edward.
Салом, Phil.
Phil, мебинам, ки ту Python-ро дӯст медорӣ!
Методи keys()-ро ҳамчунин барои фаҳмидани он истифода бурдан мумкин аст, ки оё шахси муайян дар пурсиш иштирок кардааст. Ин дафъа месанҷем, ки Erin иштирок кардааст ё не:
favorite_languages = {
'jen': 'python',
'sarah': 'c',
'edward': 'rust',
'phil': 'python',
}
if 'erin' not in favorite_languages.keys():
print("Erin, лутфан дар пурсиши мо иштирок кун!")
Методи keys() танҳо барои давр нест: он ҳамаи калидҳоро пешниҳод мекунад ва дастури if месанҷад, ки 'erin' дар байни онҳо ҳаст ё не. Азбаски нест, паёме чоп мешавад, ки ӯро ба иштирок дар пурсиш даъват мекунад:
Erin, лутфан дар пурсиши мо иштирок кун!
Паймоиши калидҳои луғат бо тартиби муайян
Ҳангоми паймоиши луғат ҷузъҳо бо ҳамон тартибе баргардонда мешаванд, ки илова шуда буданд. Аммо баъзан мехоҳед луғатро бо тартиби дигар паймоиш кунед.
Яке аз роҳҳо ин аст, ки калидҳоро пеш аз паймоиш мураттаб кунед. Бо функсияи sorted() метавонед рӯйхати мураттабшудаи калидҳоро гиред:
favorite_languages = {
'jen': 'python',
'sarah': 'c',
'edward': 'rust',
'phil': 'python',
}
for name in sorted(favorite_languages.keys()):
print(f"{name.title()}, барои иштирок дар пурсиш ташаккур.")
Ин дастури for ба дигар дастурҳои for монанд аст. Фарқ дар он аст, ки натиҷаи методи dictionary.keys()-ро ба функсияи sorted() медиҳем. Ин ба Python мегӯяд, ки пеш аз оғоз кардани давр ҳамаи калидҳои луғатро гирифта, мураттаб кунад.
Натиҷа ҳамаи иштирокчиёни пурсишро бо тартиби номҳояшон нишон медиҳад:
Edward, барои иштирок дар пурсиш ташаккур.
Jen, барои иштирок дар пурсиш ташаккур.
Phil, барои иштирок дар пурсиш ташаккур.
Sarah, барои иштирок дар пурсиш ташаккур.
Паймоиши ҳамаи қиматҳои луғат
Агар асосан қиматҳои луғат бароятон муҳим бошанд, метавонед аз методи values() истифода баред. Он қиматҳоро бе калидҳо пешниҳод мекунад.
Масалан, фарз кунед, ки аз пурсиши забонҳои барномасозӣ танҳо рӯйхати ҳамаи забонҳои интихобшударо мехоҳем, бе номи шахсоне, ки онҳоро интихоб кардаанд:
favorite_languages = {
'jen': 'python',
'sarah': 'c',
'edward': 'rust',
'phil': 'python',
}
print("Забонҳои зерин зикр шудаанд:")
for language in favorite_languages.values():
print(language.title())
Дастури for ҳар қиматро аз луғат гирифта, ба тағйирёбандаи language мебахшад. Ҳангоми чоп кардани ин қиматҳо рӯйхати ҳамаи забонҳои интихобшударо мегирем:
Забонҳои зерин зикр шудаанд:
Python
C
Rust
Python
Ин усул ҳамаи қиматҳои луғатро бе санҷиши такроршавӣ мегирад. Барои шумораи ками қиматҳо ин метавонад мувофиқ бошад. Аммо дар пурсише, ки иштирокчиёни зиёд дорад, рӯйхати хеле такрориро ба вуҷуд меорад.
Барои бе такрор дидани ҳар забони интихобшуда, метавонем аз маҷмуа — set истифода барем. Маҷмуа сохторест, ки ҳар ҷузъи он бояд ягона бошад:
favorite_languages = {
'jen': 'python',
'sarah': 'c',
'edward': 'rust',
'phil': 'python',
}
print("Забонҳои зерин зикр шудаанд:")
for language in set(favorite_languages.values()):
print(language.title())
Вақте қиматҳои дорои ҷузъҳои такрориро ба set() медиҳед, Python ҷузъҳои ягонаро муайян карда, аз онҳо маҷмуа месозад. Дар ин ҷо бо set() забонҳои такрорнашавандаи favorite_languages.values()-ро ҷудо мекунем.
Дар натиҷа рӯйхати бе такрори забонҳои зикркардаи иштирокчиёнро мегирем. Яке аз натиҷаҳои имконпазир чунин аст:
Забонҳои зерин зикр шудаанд:
Python
C
Rust
Ҳангоми идома додани омӯзиши Python, шумо бисёр вақт имконияти тайёри забонро пайдо мекунед, ки барои анҷом додани маҳз кори дилхоҳатон бо маълумот кумак мекунад.
Эзоҳ: Метавонед маҷмуаро бевосита бо қавсҳои фигурӣ созед ва ҷузъҳояшро бо вергул ҷудо кунед:
>>> languages = {'python', 'rust', 'python', 'c'}
>>> languages
{'rust', 'python', 'c'}
Маҷмуа ва луғатро ба осонӣ метавон бо ҳам иштибоҳ кард, зеро ҳар ду дар қавсҳои фигурӣ навишта мешаванд. Агар қавсҳои фигуриро бинед, вале дар дохили онҳо ҷуфтҳои калид–қимат набошанд, эҳтимолан ин маҷмуа аст.
Бар хилофи рӯйхатҳо ва луғатҳо, маҷмуаҳо тартиби муайяни ҷузъҳоро нигоҳ намедоранд.
Худатон бисанҷед
6-4. Фарҳанги истилоҳот — 2: Акнун, ки паймоиши луғатро омӯхтед, коди машқи 6-3-ро беҳтар кунед. Даъватҳои пайдарпайи print()-ро бо давре иваз кунед, ки калидҳо ва қиматҳои луғатро паймоиш мекунад. Вақте мутмаин шудед, ки давр дуруст кор мекунад, ба фарҳанг панҷ истилоҳи дигари Python илова кунед. Ҳангоми иҷрои навбатии барнома, ин калимаҳо ва маъноҳои нав бояд худкор дар натиҷа пайдо шаванд.
6-5. Дарёҳо: Луғате созед, ки се дарёи бузург ва кишвареро, ки ҳар дарё аз он мегузарад, дар бар гирад. Масалан, як ҷуфти калид–қимат метавонад 'nile': 'egypt' бошад.
- Бо истифода аз давр дар бораи ҳар дарё ҷумлае чоп кунед, масалан: «Дарёи Нил аз Миср мегузарад».
- Бо истифода аз давр номи ҳар дарёи дар луғат бударо чоп кунед.
- Бо истифода аз давр номи ҳар кишвари дар луғат бударо чоп кунед.
6-6. Пурсиш: Аз коди favorite_languages.py аз бахши «Луғат барои объектҳои ҳаммонанд» истифода баред.
- Рӯйхати одамонеро созед, ки бояд дар пурсиши забонҳои дӯстдошта иштирок кунанд. Ба рӯйхат ҳам номҳои дар луғат мавҷудбуда ва ҳам номҳои навро дохил кунед.
- Рӯйхати одамонро паймоиш кунед. Агар шахс аллакай иштирок карда бошад, паёми сипосгузорӣ чоп кунед. Агар ҳанӯз иштирок накарда бошад, паёми даъват ба иштирок чоп кунед.
Ҷойгиркунии дохилӣ
Баъзан мехоҳед чанд луғатро дар як рӯйхат нигоҳ доред ё рӯйхати ҷузъҳоро ҳамчун қимат дар луғат ҷойгир кунед. Инро ҷойгиркунии дохилӣ (nesting) меноманд.
Метавонед луғатҳоро дар дохили рӯйхат, рӯйхатро дар дохили луғат ё ҳатто луғатро дар дохили луғати дигар ҷойгир кунед. Ҷойгиркунии дохилӣ имконияти пурқувват аст, ки мисолҳои зерин онро нишон медиҳанд.
Рӯйхати луғатҳо
Луғати alien_0 маълумоти гуногунро дар бораи як мавҷуди бегона нигоҳ медорад. Аммо сохтори ҳозираи он барои нигоҳ доштани маълумоти мавҷуди дуюм, чӣ расад ба экрани пур аз мавҷудҳо, пешбинӣ нашудааст.
Гурӯҳи мавҷудҳои бегонаро чӣ гуна идора кардан мумкин аст? Яке аз роҳҳо сохтани рӯйхатест, ки ҳар ҷузъи он луғати маълумоти як мавҷуд мебошад. Масалан, коди зерин рӯйхати се мавҷудро месозад:
aliens.py
alien_0 = {'color': 'green', 'points': 5}
alien_1 = {'color': 'yellow', 'points': 10}
alien_2 = {'color': 'red', 'points': 15}
aliens = [alien_0, alien_1, alien_2]
for alien in aliens:
print(alien)
Аввал се луғат месозем, ки ҳар кадом мавҷуди алоҳидаро муаррифӣ мекунад. Ин луғатҳоро дар рӯйхате бо номи aliens нигоҳ медорем. Дар охир рӯйхатро паймоиш карда, маълумоти ҳар мавҷудро чоп мекунем:
{'color': 'green', 'points': 5}
{'color': 'yellow', 'points': 10}
{'color': 'red', 'points': 15}
Мисоли воқеитар зиёда аз се мавҷуд ва кодеро дар бар мегирифт, ки ҳар мавҷудро худкор месозад. Дар мисоли зерин бо истифода аз range() гурӯҳи 30 мавҷудро месозем:
# Барои нигоҳ доштани мавҷудҳо рӯйхати холӣ месозем.
aliens = []
# 30 мавҷуди сабз месозем.
for alien_number in range(30):
new_alien = {'color': 'green', 'points': 5, 'speed': 'slow'}
aliens.append(new_alien)
# Панҷ мавҷуди аввалро нишон медиҳем.
for alien in aliens[:5]:
print(alien)
print("...")
# Шумораи мавҷудҳои сохташударо нишон медиҳем.
print(f"Шумораи умумии мавҷудҳо: {len(aliens)}")
Ин мисол аз рӯйхати холӣ оғоз мешавад, ки ҳамаи мавҷудҳои сохташавандаро нигоҳ медорад. Функсияи range() пайдарпаии ададҳоро медиҳад, ки дар ин ҷо танҳо шумораи такроршавии даврро муайян мекунад.
Дар ҳар такрори давр мавҷуди нав месозем ва онро ба рӯйхати aliens илова мекунем. Барои чоп кардани панҷ мавҷуди аввал аз буриши рӯйхат истифода мебарем. Дар охир дарозии рӯйхатро чоп мекунем, то нишон диҳем, ки воқеан ҳамаи 30 мавҷуд сохта шудаанд:
{'color': 'green', 'points': 5, 'speed': 'slow'}
{'color': 'green', 'points': 5, 'speed': 'slow'}
{'color': 'green', 'points': 5, 'speed': 'slow'}
{'color': 'green', 'points': 5, 'speed': 'slow'}
{'color': 'green', 'points': 5, 'speed': 'slow'}
...
Шумораи умумии мавҷудҳо: 30
Ҳамаи ин мавҷудҳо хусусиятҳои яксон доранд. Аммо Python ҳар кадоми онҳоро объекти алоҳида мешуморад. Ин имкон медиҳад, ки ҳар мавҷудро мустақилона тағйир диҳем.
Бо чунин гурӯҳи мавҷудҳо чӣ гуна кор кардан мумкин аст? Тасаввур кунед, ки дар ҷараёни бозӣ баъзе мавҷудҳо рангашонро иваз мекунанд ва тезтар ҳаракат мекунанд. Вақте вақти тағйири ранг мерасад, метавонем аз даври for ва дастури if истифода барем.
Масалан, барои ба мавҷудҳои зард, миёнасуръат ва дорои 10 хол табдил додани се мавҷуди аввал чунин менависем:
# Барои нигоҳ доштани мавҷудҳо рӯйхати холӣ месозем.
aliens = []
# 30 мавҷуди сабз месозем.
for alien_number in range(30):
new_alien = {'color': 'green', 'points': 5, 'speed': 'slow'}
aliens.append(new_alien)
for alien in aliens[:3]:
if alien['color'] == 'green':
alien['color'] = 'yellow'
alien['speed'] = 'medium'
alien['points'] = 10
# Панҷ мавҷуди аввалро нишон медиҳем.
for alien in aliens[:5]:
print(alien)
print("...")
Азбаски мехоҳем се мавҷуди аввалро тағйир диҳем, буришеро паймоиш мекунем, ки танҳо ҳамин се мавҷудро дар бар мегирад.
Ҳоло ҳамаи мавҷудҳо сабзанд, аммо ин ҳолат ҳамеша чунин намемонад. Аз ин рӯ, дастури if менависем, то боварӣ ҳосил кунем, ки танҳо мавҷудҳои сабзро тағйир медиҳем. Агар мавҷуд сабз бошад, рангашро ба 'yellow', суръаташро ба 'medium' ва миқдори холҳояшро ба 10 иваз мекунем:
{'color': 'yellow', 'points': 10, 'speed': 'medium'}
{'color': 'yellow', 'points': 10, 'speed': 'medium'}
{'color': 'yellow', 'points': 10, 'speed': 'medium'}
{'color': 'green', 'points': 5, 'speed': 'slow'}
{'color': 'green', 'points': 5, 'speed': 'slow'}
...
Метавонед ин даврро бо илова кардани блоки elif васеъ кунед. Он мавҷудҳои зардро ба мавҷудҳои сурх, босуръат ва дорои 15 хол табдил медиҳад. Бе такрори тамоми барнома, он давр чунин менамояд:
for alien in aliens[0:3]:
if alien['color'] == 'green':
alien['color'] = 'yellow'
alien['speed'] = 'medium'
alien['points'] = 10
elif alien['color'] == 'yellow':
alien['color'] = 'red'
alien['speed'] = 'fast'
alien['points'] = 15
Вақте ҳар луғат навъҳои гуногуни маълумотро дар бораи як объект нигоҳ медорад, нигоҳ доштани чанд луғат дар рӯйхат кори маъмул аст.
Масалан, метавонед барои ҳар корбари сомона луғати алоҳида созед, ҳамон тавре ки дар user.py дар бахши «Паймоиши ҳамаи ҷуфтҳои калид–қимат» кардем, ва ҳамаи онҳоро дар рӯйхате бо номи users нигоҳ доред.
Ҳамаи луғатҳои рӯйхат беҳтар аст сохтори яксон дошта бошанд, то тавонед рӯйхатро паймоиш карда, бо ҳар луғат ба як тарз кор кунед.
Рӯйхат дар дохили луғат
Баъзан ба ҷойи ҷойгир кардани луғат дар рӯйхат, ҷойгир кардани рӯйхат дар луғат муфидтар аст.
Масалан, тасаввур кунед, ки питсаи фармоишдодаи касеро тавсиф мекунед. Агар танҳо рӯйхатро истифода баред, асосан рӯйхати иловаҳои питсаро нигоҳ дошта метавонед. Аммо бо луғат, рӯйхати иловаҳо метавонад танҳо яке аз хусусиятҳои питсаи тавсифшаванда бошад.
Дар мисоли зерин барои ҳар питса ду навъи маълумот нигоҳ дошта мешавад: навъи хамир ва рӯйхати иловаҳо. Рӯйхати иловаҳо қимати ба калиди 'toppings' вобаста мебошад.
Барои истифодаи ҷузъҳои ин рӯйхат, мисли дигар қиматҳои луғат, номи луғат ва калиди 'toppings'-ро менависем. Аммо ин дафъа ба ҷойи қимати алоҳида рӯйхати иловаҳоро мегирем:
pizza.py
# Маълумоти питсаи фармоишдодашударо нигоҳ медорем.
pizza = {
'crust': 'thick',
'toppings': ['mushrooms', 'extra cheese'],
}
# Фармоишро ҷамъбаст мекунем.
print(f"Шумо питсаеро бо навъи хамири '{pizza['crust']}' "
"ва иловаҳои зерин фармоиш додед:")
for topping in pizza['toppings']:
print(f"\t{topping}")
Аввал луғате месозем, ки маълумоти питсаи фармоишдодашударо нигоҳ медорад. Яке аз калидҳои луғат 'crust' аст ва қимати ба он вобаста сатри 'thick' мебошад. Калиди навбатӣ, яъне 'toppings', ҳамчун қимат рӯйхат дорад. Ин рӯйхат ҳамаи иловаҳои дархостшударо нигоҳ медорад.
Пеш аз омода кардани питса фармоишро ҷамъбаст мекунем. Агар дар даъвати print() сатри дарозро ба чанд сатр тақсим кардан лозим шавад, нуқтаи мувофиқро интихоб карда, сатри аввалро бо нохунак анҷом диҳед. Сатри навбатиро ба дарун кашед, нохунаки кушода гузоред ва матнро идома диҳед. Python ҳамаи сатрҳои матнии дар дохили қавс ҷойгиршударо худкор ба ҳам мепайвандад.
Барои чоп кардани иловаҳо даври for менависем. Барои дастрасӣ ба рӯйхати онҳо калиди 'toppings'-ро истифода мебарем ва Python рӯйхати иловаҳоро аз луғат мегирад.
Натиҷаи зерин питсаеро ҷамъбаст мекунад, ки омода карданием:
Шумо питсаеро бо навъи хамири 'thick' ва иловаҳои зерин фармоиш додед:
mushrooms
extra cheese
Дар ин мисол thick маънои «ғафс», mushrooms маънои «занбурӯғҳо» ва extra cheese маънои «панири иловагӣ»-ро дорад.
Ҳар вақте ки мехоҳед ба як калид зиёда аз як қимат вобаста шавад, метавонед дар дохили луғат рӯйхат ҷойгир кунед.
Дар мисоли пешинаи забонҳои барномасозии дӯстдошта, агар ҷавоби ҳар шахсро дар рӯйхат нигоҳ медоштем, одамон метавонистанд зиёда аз як забони дӯстдошта интихоб кунанд.
Ҳангоми паймоиши луғат, қимати ба ҳар шахс вобаста ба ҷойи як забон рӯйхати забонҳо мешуд. Дар дохили даври for-и луғат аз даври дигари for истифода мебарем, то рӯйхати забонҳои ҳар шахсро паймоиш кунем:
favorite_languages.py
favorite_languages = {
'jen': ['python', 'rust'],
'sarah': ['c'],
'edward': ['rust', 'go'],
'phil': ['python', 'haskell'],
}
for name, languages in favorite_languages.items():
print(f"\nЗабонҳои дӯстдоштаи {name.title()}:")
for language in languages:
print(f"\t{language.title()}")
Акнун қимати ба ҳар ном вобаста дар favorite_languages рӯйхат аст. Аҳамият диҳед, ки баъзе одамон як забони дӯстдошта доранд ва дигарон чандто.
Ҳангоми паймоиши луғат, барои нигоҳ доштани ҳар қимат номи languages-ро истифода мебарем, зеро медонем, ки ҳар қимат рӯйхат хоҳад буд. Дар дохили даври асосии луғат аз даври дигари for истифода мебарем, то рӯйхати забонҳои дӯстдоштаи ҳар шахсро паймоиш кунем.
Акнун ҳар шахс метавонад ҳар қадар забони дӯстдошта, ки хоҳад, номбар кунад:
Забонҳои дӯстдоштаи Jen:
Python
Rust
Забонҳои дӯстдоштаи Sarah:
C
Забонҳои дӯстдоштаи Edward:
Rust
Go
Забонҳои дӯстдоштаи Phil:
Python
Haskell
Барои боз ҳам беҳтар кардани барнома, метавонед дар оғози даври луғат дастури if илова кунед. Он бо санҷидани len(languages) муайян мекунад, ки шахс зиёда аз як забони дӯстдошта дорад ё не.
Агар зиёда аз як забон дошта бошад, натиҷа ҳамон тавр мемонад. Агар танҳо як забони дӯстдошта дошта бошад, метавонед матнро мувофиқ кунед. Масалан: «Забони дӯстдоштаи Sarah — C аст».
Эзоҳ: Рӯйхатҳо ва луғатҳоро аз ҳад зиёд дар дохили якдигар ҷойгир накунед. Агар сатҳҳои ҷойгиркунии дохилии шумо аз мисолҳои боло хеле бештар шаванд ё бо коди каси дигар кор кунед, ки сатҳҳои зиёди дохилӣ дорад, эҳтимол роҳи содатари ҳалли масъала вуҷуд дорад.
Луғат дар дохили луғат
Метавонед як луғатро дар дохили луғати дигар ҷойгир кунед. Аммо бо ин кор код метавонад зуд мураккаб шавад.
Масалан, агар сомона чанд корбар дошта бошад ва ҳар кадом номи корбарии беназир дошта бошад, метавонед номҳои корбариро ҳамчун калидҳои луғат истифода баред. Сипас маълумоти ҳар корбарро дар луғати дигаре нигоҳ доред, ки қимати ба номи корбарии ӯ вобаста мебошад.
Дар мисоли зерин барои ҳар корбар се маълумот нигоҳ медорем: ном, насаб ва маҳалли зист. Барои дастрасӣ ба ин маълумот, номҳои корбарӣ ва луғати ба ҳар ном вобастаро паймоиш мекунем:
many_users.py
users = {
'aeinstein': {
'first': 'albert',
'last': 'einstein',
'location': 'princeton',
},
'mcurie': {
'first': 'marie',
'last': 'curie',
'location': 'paris',
},
}
for username, user_info in users.items():
print(f"\nНоми корбарӣ: {username}")
full_name = f"{user_info['first']} {user_info['last']}"
location = user_info['location']
print(f"\tНому насаб: {full_name.title()}")
print(f"\tМаҳалли зист: {location.title()}")
Аввал луғате бо номи users муайян мекунем, ки ду калид дорад: 'aeinstein' ва 'mcurie'. Қимати ба ҳар калид вобаста луғатест, ки ном, насаб ва маҳалли зисти корбарро дар бар мегирад.
Баъд луғати users-ро паймоиш мекунем. Python ҳар калидро ба тағйирёбандаи username мебахшад. Луғати ба ҳар номи корбарӣ вобаста бошад, ба тағйирёбандаи user_info бахшида мешавад. Дар дохили даври асосии луғат аввал номи корбариро чоп мекунем.
Сипас ба луғати дохилӣ дастрасӣ пайдо мекунем. Тағйирёбандаи user_info, ки луғати маълумоти корбарро нигоҳ медорад, се калид дорад: 'first', 'last' ва 'location'.
Бо истифода аз ин калидҳо ному насаб ва маҳалли зисти ҳар шахсро ба шакли хонданӣ омода мекунем. Баъд маълумоти мухтасари ҳар корбарро чоп мекунем:
Номи корбарӣ: aeinstein
Ному насаб: Albert Einstein
Маҳалли зист: Princeton
Номи корбарӣ: mcurie
Ному насаб: Marie Curie
Маҳалли зист: Paris
Аҳамият диҳед, ки сохтори луғати ҳар корбар яксон аст. Гарчанде Python инро талаб намекунад, чунин сохтор кор бо луғатҳои дохилиро осон мекунад. Агар луғати ҳар корбар калидҳои гуногун медошт, коди дохили даври for мураккабтар мешуд.
Худатон бисанҷед
6-7. Одамон: Аз барномаи машқи 6-1 оғоз кунед. Ду луғати нав созед, ки шахсони дигарро муаррифӣ мекунанд. Ҳар се луғатро дар рӯйхате бо номи people нигоҳ доред. Рӯйхатро паймоиш карда, дар бораи ҳар шахс ҳамаи маълумоти мавҷударо чоп кунед.
6-8. Ҳайвоноти хонагӣ: Якчанд луғат созед, ки ҳар кадом ҳайвони хонагии алоҳидаро муаррифӣ кунад. Дар ҳар луғат навъи ҳайвон ва номи соҳибашро дохил кунед. Ин луғатҳоро дар рӯйхате бо номи pets нигоҳ доред. Сипас рӯйхатро паймоиш карда, ҳамаи маълумоти ҳар ҳайвонро чоп кунед.
6-9. Ҷойҳои дӯстдошта: Луғате бо номи favorite_places созед. Се номро ҳамчун калид интихоб кунед ва барои ҳар шахс аз як то се ҷойи дӯстдошта нигоҳ доред. Барои ҷолибтар шудани машқ, аз чанд дӯстатон хоҳиш кунед, ки ҷойҳои дӯстдоштаашонро ном баранд. Луғатро паймоиш карда, номи ҳар шахс ва ҷойҳои дӯстдоштаи ӯро чоп кунед.
6-10. Рақамҳои дӯстдошта: Барномаи машқи 6-2-ро тавре тағйир диҳед, ки ҳар шахс зиёда аз як рақами дӯстдошта дошта тавонад. Сипас номи ҳар шахсро ҳамроҳ бо рақамҳои дӯстдоштааш чоп кунед.
6-11. Шаҳрҳо: Луғате бо номи cities созед. Номи се шаҳрро ҳамчун калид истифода баред. Барои ҳар шаҳр луғати маълумот созед, ки кишвари ҷойгиршавӣ, аҳолии тахминӣ ва як далел дар бораи шаҳрро дар бар гирад. Калидҳои луғати ҳар шаҳр метавонанд country, population ва fact бошанд. Номи ҳар шаҳр ва тамоми маълумоти дар бораи он нигоҳдошташударо чоп кунед.
6-12. Васеъ кардани барномаҳо: Акнун бо мисолҳое кор мекунем, ки ба қадри кофӣ мураккабанд ва онҳоро бо роҳҳои гуногун васеъ кардан мумкин аст. Яке аз барномаҳои намунавии ин бобро интихоб кунед. Онро бо илова кардани калидҳо ва қиматҳои нав, тағйир додани мавзӯи барнома ё беҳтар кардани шакли натиҷа васеъ кунед.
Хулоса
Дар ин боб шумо муайян кардани луғат ва кор бо маълумоти дар он нигоҳдошташударо омӯхтед. Шумо фаҳмидед, ки чӣ гуна ба ҷузъҳои алоҳидаи луғат дастрасӣ пайдо кунед, онҳоро тағйир диҳед ва тамоми маълумоти луғатро бо давр паймоиш кунед.
Шумо паймоиши ҷуфтҳои калид–қимат, калидҳо ва қиматҳои луғатро омӯхтед. Ҳамчунин фаҳмидед, ки чӣ гуна чанд луғатро дар рӯйхат, рӯйхатҳоро дар луғат ва як луғатро дар дохили луғати дигар ҷойгир кардан мумкин аст.
Дар боби оянда шумо бо даврҳои while ва гирифтани маълумоти воридкардаи истифодабарандагони барнома шинос мешавед. Ин боби ҷолиб хоҳад буд, зеро меомӯзед, ки чӣ гуна ҳамаи барномаҳоятонро интерактивӣ созед: онҳо метавонанд ба маълумоти воридкардаи корбар вокуниш нишон диҳанд.

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