Ачааллж байна...
Энэ хичээл өмнөх хичээлүүдээсээ зориудаар богино байх болно — учир нь зорилго нь өөр. Randint-ийг бид "эзэмшсэн": гүн ойлгож, тоглоомдоо суулгасан. Харин өнөөдрийн хоёр хайрцгийг бид зочилно: datetime (огноо цагийн) ба math (математикийн — эхний хичээлд нэг шагайсан) хайрцагнуудаар богино аялал хийж, хамгийн хэрэгтэй хэдэн багажийг нь гартаа үзээд гарна. Яагаад ийм "хөнгөн" горим вэ: эдгээр хайрцагт олон арван багаж бий — бүгдийг нь цээжлэх нь утгагүй бөгөөд шаардлагагүй: мэргэжлийн программист ч тэднийг цээжээр мэддэггүй — "ийм хайрцаг бий, дотор нь иймэрхүү зүйл байдаг" гэдгийг л мэдээд, хэрэгтэй үедээ дотрыг нь харж (VS Code-ын цэг дарахад гарч ирдэг жагсаалт — эхний хичээлийн туршилт!) хэрэглэдэг. Өнөөдрийн жинхэнэ сургамж нь багажнууд өөрсдөө биш — "хэрэгтэй багаж надад бэлэн байгаа, олоод л авах хэрэгтэй" гэсэн итгэл юм: тэр итгэл бол Түвшин 3-ын нэрийн ("Итгэлтэй болох нь") нэг тулгуур.
Агуулахын зүйрлэлээ үргэлжлүүлье — өнөөдөр хоёр тавиур зочилно. Datetime тавиур бол "цаг хугацааны хэрэгслүүд": хуанли, цаг, зогсоолын цаг... Тэдний нэг онцлог — эдгээр багаж гаднаас мэдээлэл авчирдаг: math.sqrt(16) үргэлж 4.0 гардаг бол datetime-ийн "өнөөдөр хэд вэ" багаж өдөр бүр өөр хариулдаг: randint шиг "Run бүрд өөр" — гэхдээ санамсаргүйгээс биш, бодит ертөнцөөс (компьютерын цагнаас) уншдаг учраас: таны программ гадаад ертөнцтэй холбогдох хоёр дахь цонхоо нээж байна гэсэн үг (эхнийх нь input — хүнээс, одоо цагнаас). Math тавиур бол "тооны нарийн багажнууд": язгуур, бөөрөнхийлөлт, тогтмолууд — эсрэгээрээ мөнхийн ертөнц: хэзээ дуудсан ч ижил хариулт.
python
import datetime
unuudur = datetime.date.today()
print(unuudur)
print(f"Он: {unuudur.year}, сар: {unuudur.month}, өдөр: {unuudur.day}")Үр дүн (таны Run хийсэн өдрөөр!):
2026-07-06
Он: 2026, сар: 7, өдөр: 6Задалъя. datetime.date.today() — өмнөх хичээлд амласан "хоёр цэгтэй урт гинжийн" задаргаа: datetime хайрцаг дотроо date гэдэг дэд хэсэгтэй (хайрцаг доторх тавиур гэж бод), тэр тавиурын today багаж "өнөөдрийн огноог" гардуулдаг: гинжийг зүүнээс баруун уншина — "datetime хайрцагны, date тавиурын, today багаж." Гардуулалт нь шинэ төрлийн утга: тоо ч биш, string ч биш — огноо (date төрөл): он-сар-өдрөө "мэддэг" ухаалаг утга. Хоёр дахь мөр түүний ухааныг үзүүлж байна: unuudur.year, .month, .day — цэгээр нь "асуухад" эд ангиудаа тус тусад нь өгдөг (хаалтгүй байгааг ажигла — math.pi шиг бэлэн утгууд: дуудах биш уншина). Огнооны утга дотроо ийм бүтэцтэй байдаг нь string-ээс хамаагүй дээр: "2026-07-06" гэсэн string-ээс оныг салгах бол индекс, split-ийн ажил байсан бол date-ээс — ганц цэг.
Тэгээд амласан өр — тэмдэглэлийн дэвтрийн огноо. Temdeglel_devter.py-гийнхээ nemeh function-ий write мөрийг ингэж солиход л болно:
python
f.write(f"{datetime.date.today()} — {temdeglel}\n")(мөн файлын эхэнд import datetime нэмнэ) — одооноос тэмдэглэл бүр "2026-07-06 — Өнөөдөр Python сурлаа" хэлбэрээр, өөрийн төрсөн өдөртэйгөө хадгалагдана: өдрийн тэмдэглэл шиг ажилладаг боллоо — нэг import, нэг нүх: өр төлөгдөв.
Хоёр дахь жишээ: одоогийн цаг. Огнооноос гадна цаг минут хэрэгтэй бол — date биш datetime тавиур (тийм ээ — хайрцаг ба доторх нэг тавиур ижил нэртэй: эхэндээ жаахан хачирхалтай ч "бүтэн багц нь" гэсэн санаатай нэрлэлт):
python
import datetime
odoo = datetime.datetime.now()
print(odoo)
print(f"Цаг: {odoo.hour}, минут: {odoo.minute}")Үр дүн (жишээ):
2026-07-06 14:32:08.123456
Цаг: 14, минут: 32now() — "яг одоо": огноо + цаг хоёулаа нэг утгад (сүүлийн бутархай нь секундын саяны хувь — нарийн хэмжилтийн ертөнцийн үлдэгдэл: үл ойшиж болно). Цэгэн асуултууд өргөжив: .hour, .minute (мөн .second бий). Хэрэглээ нь шууд харагдаж байгаа биз: "Өглөөний мэнд / оройн мэнд" гэж цагаас хамаарч мэндэлдэг программ — if odoo.hour < 12: — Бүлэг 6-гийн шүүлт + цагийн цонх: гурван мөрийн дасгал болгож үлдээе.
Гурав дахь жишээ: math-ийн дөрвөн түгээмэл багаж. Математикийн тавиураас өдөр тутмын дөрвийг нэг дор:
python
import math
print(math.sqrt(225))
print(math.floor(7.8))
print(math.ceil(7.2))
print(round(7.5678, 2))Үр дүн:
15.0
7
8
7.57Нэг бүрчлэн: sqrt — язгуур (танил); floor ("шал") — бутархайг доош бүхэлддэг: 7.8 → 7; ceil ("тааз") — дээш: 7.2 → 8 (эхний хичээлийн туршилтын хос — одоо албан ёсоор: нэрс нь өөрсдөө зүйрлэл: шал руу, тааз руу); round — ойрын руу, хоёр дахь argument-аар оронгийн нарийвчлалтай (энэ нь math-ийн гадна, үргэлж бэлэн — өмнөх хичээлээс танил). Floor/ceil хэзээ хэрэгтэй вэ гэсэн нэг амьдралын жишээ: 23 сурагчийг 4-өөр автобусанд суулгахад хэдэн автобус хэрэгтэй вэ — 23 / 4 = 5.75: round бол 6 гэнэ (энд таарлаа), гэхдээ 21 сурагчид 21 / 4 = 5.25 — round 5 гэчихнэ: нэг автобус дутна! Зөв багаж нь ceil: "хагас автобус гэж байхгүй — багтаахын тулд үргэлж дээш": math.ceil(21 / 4) = 6. Багаж сонголт бол бодлогынхоо утгыг дагадаг — "аль нь ойр вэ" биш "юу нь зөв бэ" гэсэн асуулт.
Хүсвэл туршаад үзээрэй: тэмдэглэлийн дэвтэртээ огноогоо жинхэнээсээ суулгаарай — амласан өрөө өөрийн гараар барагдуулах нь энэ хичээлийн хамгийн үнэ цэнтэй "гэрийн ажил." Сонирхвол "өглөөний/оройн мэнд" программыг гурван салаатай (өглөө-өдөр-орой) бичээд үзээрэй; бүр сонирхвол datetime.date.today().year - гэж төрсөн оноо хасаад "та энэ жил ... нас хүрнэ" гэдэг тооцоолуур — огноо, тооцоо, f-string гурвын уулзвар.
Алдаа 1: date ба datetime тавиурыг андуурах. Хамгийн элбэг будлиан:
python
import datetime
odoo = datetime.date.now()Python:
AttributeError: type object 'datetime.date' has no attribute 'now'"date-д now гэж алга" — now() бол datetime тавиурын багаж (цаг мэддэг нь), date тавиурт зөвхөн today() бий (өдөр л мэддэг нь). Урвуугаар datetime.datetime.today() гэвэл харин ажилладаг (цагтайгаа гардаг) — тэгэхээр журам нь энгийн: зөвхөн огноо — date.today(); огноо + цаг — datetime.now(): has no attribute харагдвал тавиураа сольж үз. (Давхар нэрийн datetime.datetime бичиглэл нүд эрээлжлүүлбэл — хэвийн: бүгдэд тэгдэг — тайвнаар журмаа тулга.)
Алдаа 2: Огноог string гэж бодож ажиллах. Төрлийн урхи шинэ нутагтаа:
python
import datetime
unuudur = datetime.date.today()
print("Өнөөдөр: " + unuudur)Python:
TypeError: can only concatenate str (not "datetime.date") to strТанил мэдэгдэл — шинэ "гологдогч": datetime.date төрөл string дээр залгагдахгүй. Print дээр хэвлэгдэж байсан болохоор string юм гэж бодогдсон нь аргагүй — гэхдээ хэвлэгдэхдээ л string-рүү хувирдаг болохоос өөрөө өөр төрөл. Засвар нь таны гурван хуучин найзын аль нь ч: f-string (f"Өнөөдөр: {unuudur}" — нүх өөрөө хувиргадаг: хамгийн зөв зам), str() дугтуйлалт, эсвэл таслалт print. Ерөнхий дүрэм хуучнаараа: залгалтад орж гацвал — f-string руу шилж.
Алдаа 3: import datetime-аа мартаад date-ээс шууд эхлэх. Гинжийн эхний үеийг гээвэл:
python
ognoo = date.today()Python:
NameError: name 'date' is not defineddate бол хайрцаг доторх тавиур — хайрцгаа авчраагүй бол тавиурын нэр агаарт: import datetime + бүтэн гинж datetime.date.today(). (Бусдын кодод from datetime import date гээд date.today() гэж шууд бичсэн харагдах нь энэ учиртай — from хэлбэр тавиурыг шууд ширээнд гаргажээ: таньдаг бай, өөрөө хаягтай хэлбэрээ барь.)
datetime хайрцаг: datetime.date.today() — өнөөдрийн огноо (.year, .month, .day цэгээр асуугдана); datetime.datetime.now() — огноо + цаг (.hour, .minute): "зөвхөн өдөр — date, цагтай нь — datetime" журам.
Огноо бол өөрийн төрөлтэй ухаалаг утга — string биш: залгалтад TypeError, f-string-ийн нүхээр хэвлэ.
math-ийн дөрөв: sqrt (язгуур), floor (доош — "шал"), ceil (дээш — "тааз"), round (ойрын руу, нарийвчлалтай — import-гүй); багаж сонголт бодлогын утгыг дагана (автобусны бодлого — ceil!).
Тэмдэглэлийн дэвтрийн огнооны өр төлөгдөв: нэг import, write-ийн нүхэнд today() — тэмдэглэл бүр төрсөн өдөртэйгөө.
Жинхэнэ сургамж: хайрцагнууд бэлэн байдаг — цээжлэх биш, байдгийг нь мэдээд хэрэгтэй үедээ ол (цэг дараад жагсаалтыг нь хар!).
Дараагийн хичээл бол Түвшин 3-ын төгсгөлийн төсөл — энэ Түвшний бүх мэдлэгийг нэгтгэсэн хамтдаа бүтээх барилга: "Хийх ажлын жагсаалт" — ажил нэмдэг, харуулдаг, хийснийг тэмдэглэдэг, тэгээд файлд хадгалдаг тул программ хаагдсан ч жагсаалт чинь мартагддаггүй бүрэн хэмжээний хэрэгсэл: list, loop, function, файл, try/except — таван том чадвар нэг дор: харилцагчийн дэвтэрт өгсөн "мартдаггүй болгоно" гэсэн амлалтын биелэл.
Бүртгэлтэй болсноор энэ сургалтын бүх хичээлд хандах эрх авна.