Ачааллж байна...
Түвшин 3-ын сүүлчийн шинэ сэдэвт тавтай морил — тэгээд энэ сэдэв нэг том хаалга нээнэ. Өдий хүртэл таны хэрэглэсэн бүх багаж хоёрхон эх үүсвэртэй байсан: Python-ы "үргэлж бэлэн" цөөн function (print, input, int, len...) ба таны өөрийн бичсэн function-ууд. Гэтэл бодоод үз: квадрат язгуур бодох хэрэг гарвал? Санамсаргүй тоо? Өнөөдрийн огноо? Эдгээрийг өөрөө бичих нь зарим нь хэцүү, зарим нь бүр боломжгүй (компьютерын цагийг variable-аар "тааж" болохгүй биз дээ). Сайн мэдээ: бичих шаардлагагүй — Python суулгахад тань хамт олон зуун бэлэн багажны хайрцаг давхар суусан байгаа: математикийн, санамсаргүйн, огноо цагийн, тэр байтугай интернэтийн... Тэдгээрийг модуль (module) гэдэг. Тэгвэл яагаад бид тэднийг өдий хүртэл "хараагүй" юм бэ? Учир нь тэд агуулахад байдаг — таны ажлын өрөөнд биш: хэрэгтэйгээ агуулахаас авчирч байж хэрэглэнэ — тэгээд авчирдаг үг нь import (импорт — "оруулж ирэх"): өнөөдрийн ганц шинэ үг, Түвшин 3-ын сүүлчийн том түлхүүр.
Энэ сэдэв яагаад "том хаалга" вэ: import-ыг эзэмшсэн хүний өмнө Python-ы жинхэнэ далайц нээгддэг — дотор нь ирдэг зуугаад модулиас гадна дэлхийн программистуудын бичсэн сая сая нэмэлт модуль (хиймэл оюун, вэб, тоглоом...) мөн л import-оор ордог: Бүлэг 1-д ярьсан "Python-ы баялаг сан" гэдэг нь яг энэ ертөнц юм. Энэ сургалт дотоод модулиудаас гурвыг (math, random, datetime) л зочилно — гэхдээ зочлох аргыг нь сурчихвал үлдсэн бүх хаалга ижил түлхүүрээр онгойдог.
Мужааны зүйрлэлээ (Бүлэг 8-ын "эд ангиудын нэрс") үргэлжлүүлье. Таны ажлын ширээн дээр өдөр тутмын багажнууд байдаг — алх, халив: сунгаад л авна (print, len...). Харин цехийн ард агуулах бий: тавиур дүүрэн шошготой хайрцагнууд — "цахилгаан багаж", "хэмжилтийн багаж", "будгийн хэрэгсэл"... Хайрцаг бүр дотроо олон багажтай. Агуулахын журам: нэг — хэрэгтэй хайрцгаа нэрээр нь захиж авчруулна (import math — "математикийн хайрцгийг авчир"); хоёр — авчирсан хайрцагнаас багаж авахдаа хайрцгийнхаа нэрийг хэлж авна: "математикийн хайрцагнаас язгуур бодогчийг" — math.sqrt(...): энэ цэг таны сайн таньдаг цэг — Бүлэг 9-ийн "чиний авдраас" гэсэн тэр л тэмдэг: string-ийн авдар string бүрд дагалддаг байсан бол модулийн хайрцаг захиж авчруулдаг гэдэг л ялгаатай — цэгний утга нэг: "энэ нэрийн дотроос." Гурав — захиалгыг ажлын эхэнд өгдөг журамтай: import мөрүүд файлын хамгийн дээд хэсэгт бичигддэг — мужаан ажлаа эхлэхээсээ өмнө хэрэгтэй хайрцагнуудаа ширээндээ авчирдаг шиг: код уншигч файлын эхний мөрүүдээс "энэ программ ямар хайрцагнууд хэрэглэдэг вэ" гэдгийг нэг харцаар мэддэг.
Математикийн хайрцгийг авчирч, доторх хоёр багажийг үзье:
python
import math
print(math.sqrt(16))
print(math.pi)Үр дүн:
4.0
3.141592653589793Мөр бүрээр. import math — захиалга: math модулийг ажлын өрөөнд авчирлаа — энэ мөр өөрөө юу ч хэвлэдэггүй, тооцдоггүй: зөвхөн хайрцгийг бэлэн болгодог (def-ийн "бичих ≠ биелэх"-тэй ижил чимээгүй бэлтгэл). math.sqrt(16) — задалбал: math хайрцагнаас sqrt багажийг дуудав — sqrt нь square root ("квадрат язгуур") гэдгийн товчлол: 16-гийн язгуур — 4.0 (float гардуулдаг нь хуваалтын / шиг журам: язгуур бутархай гарах "эрсдэлтэй" үйлдэл тул үргэлж float саванд). Sqrt бол function — таны бүх мэдлэг хүчинтэй: argument авна, гардуулна, хайрцганд хадгалж болно. math.pi — харин энэ хаалтгүй байгааг ажигла: pi бол function биш — хайрцагт хадгалаастай бэлэн утга (π тоо — тойргийн тооцооны алдарт тогтмол): модулиуд багажаас гадна ийм "бэлэн материал" ч агуулдаг — хаалттай нь дуудаж ажиллуулдаг багаж, хаалтгүй нь шууд хэрэглэдэг утга.
Тэгээд нэг чухал зааг: import math хийсний дараа ч sqrt гэдэг нэр дангаараа ажиллахгүй — sqrt(16) гэвэл NameError! Хайрцаг өрөөнд ирсэн болохоос багажнууд нь ширээн дээр асгарчихаагүй: багаж бүрийг math. гэсэн "хаягтай нь" дууддаг. Энэ нь ачаа биш — ашиг: таны программд sqrt гэдэг нэртэй өөрийн function байлаа ч math.sqrt-тэй мөргөлдөхгүй (өрөө өрөөндөө!) — олон хайрцаг зэрэг авчирсан ч нэрс нь хэзээ ч холилддоггүйн нууц энэ цэгэн хаяглалт юм.
Хоёр дахь жишээ: хоёр хайрцаг зэрэг, бодит бодлогод. Тойрог хашааны тооцоо — math-ийн хоёр багаж нэг дор:
python
import math
radius = float(input("Тойргийн радиус (метр): "))
urt = 2 * math.pi * radius
print(f"Хашааны урт: {round(urt, 2)} метр")5 гэж хариулбал:
Тойргийн радиус (метр): 5
Хашааны урт: 31.42 метрМодулийн багаж таны бүх хуучин хэрэгсэлтэй саадгүй хоршиж байна: тооцоололд (2 math.pi radius), f-string-ийн нүхэнд... Нэг шинэ жижиг танил: round(urt, 2) — тоог бөөрөнхийлөгч: хоёр дахь argument нь "хэдэн орон үлдээх вэ" (31.415926... → 31.42) — round бол import шаарддаггүй, print шиг үргэлж бэлэн function (за тэгэхээр "ширээний багаж" бас нэгээр нэмэгдлээ): float-ын урт сүүлийг хэрэглэгчид үзүүлэхийн өмнө round-оор янзлах нь тайлан хэвлэдэг программын тогтсон дадал.
Гурав дахь жишээ: from — хайрцагнаас багажийг нь шууд ширээнд. Import-ын нэг хувилбар бичиглэл байдгийг таньж авъя:
python
from math import sqrt
print(sqrt(25))Үр дүн: 5.0 — тэгээд sqrt хаяггүй, дангаараа ажиллаж байна! from math import sqrt — "math хайрцагнаас sqrt багажийг өөрийг нь ширээн дээр гаргаад тавьчих": одооноос sqrt шууд, math.-гүйгээр дуудагдана. Хоёр хэлбэрийн харьцуулалт: import math — хайрцаг бүтнээрээ, багаж бүр хаягтай (урт бичиглэл, тодорхой гарал); from ... import ... — сонгосон багаж шууд гарт (богино бичиглэл, гэхдээ уншигч "sqrt хаанаас ирсэн бэ" гэдгийг файлын эхнээс хайж мэднэ, мөн өөрийн нэрстэй мөргөлдөх эрсдэл сэргэнэ). Энэ сургалтын дадал: import math хэлбэрийг үндсэн болгоно — хаягтай дуудлага нь эхлэгчид "энэ багаж модулийнх" гэдгийг мөр бүрт сануулдаг давуутай; from-ыг таньдаг байх хэрэгтэй (бусдын кодод маш элбэг!) ч өөрөө бичихдээ хайрцгаа бүтнээр нь авчирч бай.
Дөрөв дэх жишээ: модулиудын урьдчилсан зураглал. Ирэх хоёр хичээлийн "амтыг" нэг дор — гурван хайрцаг зэрэгцээд:
python
import math
import random
import datetime
print(math.sqrt(144))
print(random.randint(1, 10))
print(datetime.date.today())Үр дүн (жишээ нь):
12.0
7
2026-07-06Гурван import — гурван мөрөнд, файлын эхэнд эгнэв (журам!). Хоёр дахь мөр: random хайрцагнаас randint — "1-ээс 10-ын хооронд санамсаргүй бүхэл тоо" — Run дарах бүрд өөр тоо гарна: таны программын түүхэн дэх анхны "урьдчилан таамаглагдашгүй" мөр: энэ багаж юуг өөрчлөхийг та мэдэж байгаа — тоо таах тоглоомын нууц дараагийн хичээлд жинхэнэ нууц болно. Гурав дахь мөр: datetime хайрцагнаас өнөөдрийн огноо — компьютер өөрийн цагаа мэддэг, тэр мэдлэг рүү очих зам нь энэ хайрцагт: тэмдэглэлийн дэвтрийн "огноотой тэмдэглэл" өр эндээс төлөгдөнө. (datetime.date.today() гэсэн хоёр цэгтэй урт гинж нүдэнд өртсөн байх — "хайрцаг доторх хайрцаг" гэсэн үг: задаргаа нь гурав дахь хичээлд.) Өнөөдрийн ажил бол эдгээрийг эзэмшихдээ биш — хаалга нээгдсэнийг харахад оршино: нэг л import үг — гурван өөр ертөнц.
Хүсвэл туршаад үзээрэй: math хайрцгийг сонирхон уудлаарай — VS Code дээр math. гэж бичээд цэг дармагц гарч ирэх жагсаалтыг ажигла: эдитор хайрцагны бүх багажийг санал болгож байгаа нь тэр — доогуур нь гүйлгээд floor, ceil хоёрыг таамаглаад туршаарай (шал ба тааз: бутархайг доош нь ба дээш нь бүхэлддэг хос). Сонирхвол print(type(math)) гэж асуугаарай — <class 'module'> — модуль ч мөн өөрийн төрөлтэй "иргэн" болохыг type багана баталж өгнө.
Алдаа 1: ModuleNotFoundError — хайрцагны нэрийг андуурах. Өнөөдрийн шинэ танил:
python
import mathsPython:
ModuleNotFoundError: No module named 'maths'Орчуулбал: "ModuleNotFoundError (модуль олдсонгүйн алдаа): 'maths' гэдэг нэртэй модуль алга" — агуулахаас тийм шошготой хайрцаг олдсонгүй. Түгээмэл шалтгаан нь үсгийн зөрөө: maths ← math (англи хэлний "maths" гэдэг ярианы хэлбэр гараар аяндаа бичигддэг!), randon ← random, date_time ← datetime. FileNotFoundError-ын дүрмүүд энд ижил: мэдэгдэл нэрийг хашилтанд үзүүлдэг — зөв нэртэй нь тулга. Хоёр дахь шалтгаан нь хожмын ертөнцийнх: суулгаагүй нэмэлт модулийг import хийх — дотоод модулиуд (math, random, datetime...) үргэлж байдаг бол "гаднын" сая сая модуль эхлээд суулгагддаг журамтай: тэр журам энэ сургалтын хүрээнээс гадуур, гэхдээ ирээдүйд энэ алдаа таарвал "нэр зөв үү? — зөв бол: суулгасан уу?" гэсэн хоёр асуултын дараалал чинь бэлэн.
Алдаа 2: import-оо мартах. Хамгийн энгийн бөгөөд хамгийн олон таарах нь:
python
print(math.sqrt(16))Python:
NameError: name 'math' is not definedХуучин танил NameError — гэхдээ энэ удаад "math гэдэг нэр танихгүй" гэсэн нь: хайрцгийг авчраагүй байж багажийг нь нэхэв. Ялангуяа хоёр нөхцөлд элбэг: терминал дээр түр туршилт хийж байгаад (шинэ гүйлт бүр "шинэ өдөр" — өчигдрийн import өнөөдөр хүчингүй!), эсвэл кодоо өөр файлд хуулж аваачихдаа доод мөрүүдийг нь аваад дээд import-уудыг нь орхигдуулах — хуулбарлалтын сонгодог осол. Оношлогооны дүрэм: NameError-ын нэр нь модулийн нэр байвал (math, random...) — файлын дээд хэсгээ хар: import мөр байна уу?
Алдаа 3: Файлаа модулийн нэрээр нэрлэх. Хамгийн зальтай нь — олон эхлэгчийн цагийг идсэн урхи:
python
# random.py гэдэг нэртэй файлд:
import random
print(random.randint(1, 10))Python:
AttributeError: module 'random' has no attribute 'randint'"random модульд randint гэдэг зүйл алга" — гэтэл randint үнэхээр бий шүү дээ?! Оньсогын тайлал: та файлаа random.py гэж нэрлэжээ — Python import random гэхэд агуулах руу явахаасаа өмнө эргэн тойрноо хардаг журамтай: дэргэд нь random.py байсан тул "энэ байна" гээд... таны файлыг өөрийг нь хайрцаг гэж авчирсан байна: таны файлд randint байхгүй нь мэдээж. Function-ий хичээлийн "print-ийг дарж бичих" урхины модуль-хувилбар: Python-ы мэддэг нэрийг өөрийн зүйлдээ өгснөөр жинхэнэ эзнийг нь "халав." Дүрэм: файлаа модулиудын нэрээр бүү нэрлэ — random.py, math.py, datetime.py гэсэн нэрс хориотой жагсаалтад: toglom_random.py, minii_math.py маягаар өөрийн үг нэм. Онош нь танигдахуйц: "модульд байх ёстой зүйл нь 'has no attribute' гэвэл" — файлынхаа нэрийг хар.
Модуль бол Python-тай хамт ирдэг бэлэн багажны хайрцаг: import нэр — агуулахаас авчирна (файлын эхэнд, юу ч хэвлэдэггүй чимээгүй захиалга).
Багажийг хаягтай нь дууддаг: math.sqrt(16) — цэг нь "энэ хайрцагнаас" (string-авдрын цэгний ах дүү); хаалттай нь function, хаалтгүй нь бэлэн утга (math.pi).
from math import sqrt — багажийг шууд ширээнд гаргадаг хувилбар: таньдаг бай, гэхдээ энэ сургалтын дадал нь хаягтай import math хэлбэр.
Гурван алдаа гурван оноштой: ModuleNotFoundError — нэрээ тулга (maths!); модулийн нэрэн дээрх NameError — import-оо шалга; "has no attribute" — файлынхаа нэрийг шалга (модулийн нэрээр файл нэрлэхгүй!).
Гурван хайрцаг таныг хүлээж байна: math (үзлээ), random (дараагийн хичээл — тоглоомын нууц), datetime (огноо цаг — дэвтрийн өр).
Дараагийн хичээл бол таны хамгийн эртний өрийн эзэн: random — Бүлэг 6-д тоо таах тоглоом барихдаа "нууц тоог кодонд бичсэн — кодоо харсан хүн хариуг мэднэ: жинхэнэ санамсаргүй тоо Бүлэг 13-т" гэж амласнаас хойш долоон бүлэг өнгөрчээ. Тэнд randint нэг мөрөөр тэр сүүлчийн сул талыг арилгаж — тоглоом чинь өөрөө ч мэдэхгүй нууцтай болно.
Бүртгэлтэй болсноор энэ сургалтын бүх хичээлд хандах эрх авна.