Ачааллж байна...
Энэ бол Function бүлгийн төгсгөлийн хичээл бөгөөд онцгой төрлийнх: бид өнөөдөр урагшлахгүй — эргэж харна. Өнгөрсөн гурван хичээлд та дөрвөн шинэ үг сурлаа: function, parameter, argument, return. Тэдгээрийг та "шинэ мэдлэг" гэж бодож байгаа байх — гэвч үнэндээ та шинэ юм сураагүй: аль эрт мэддэг байсан зүйлсийнхээ нэрийг л сурсан юм. Таны анхны хичээлээс хойш өдөр бүр хэрэглэж ирсэн print, input, int, type, range — бүгд function; тэдэнд өгч ирсэн зүйлс чинь — argument; тэднээс авч ирсэн зүйлс чинь — return-ий гардуулалт. Өнөөдөр бид тэр таван хуучин танилаа шинэ үгсийн сангаараа "дахин зөрөглөж", нэг бүрийг нь "энэ хэдэн parameter-тэй вэ, юу гардуулдаг вэ" гэсэн мэргэжлийн асуултаар шинжинэ. Ийм эргэн харалт юунд хэрэгтэй вэ: сурсан ойлголт хуучин туршлагатайгаа холбогдох үед л жинхэнэ утгаараа "суудаг" — мөн энэ шинжилгээний явцад таны хэдэн бүлгийн турш "яагаад ингэдэг юм бол" гэж өнгөрөөсөн жижиг оньсогонууд нэг нэгээрээ тайлагдахыг харах болно.
Мөн нэг шинэ танил нэмэгдэнэ: len() — string-ийн уртыг хэмждэг жижигхэн, гэхдээ асар их хэрэглэгддэг function. Түүнийг яг энэ хичээлд танилцуулж байгаа нь санаатай: нэгд, таны шинэ үгсийн сан түүнийг нэг өгүүлбэрээр тодорхойлох боломж өгнө (өмнө нь бүтэн хэсэг шаардах байсан); хоёрд, тэрээр дараагийн бүлгийн — String гүнзгийрүүлэх бүлгийн — үүдийг нээх түлхүүр юм.
Мужааны шавь эхний саруудад багшийнхаа багажуудыг "тэр урт иштэй юм", "нөгөө хавчдаг юм" гэж дуудаж хэрэглэдэг — ажил нь бүтдэг, гэхдээ багаж бүр түүний хувьд тус тусдаа оньсого. Тэгээд нэг өдөр багш нь багажны онолын хичээл заана: иш, ир, хошуу, бариул гэсэн эд ангиудын нэрс — ямар ч багажийг задалж ойлгодог цөөн үг. Тэр өдрөөс шавийн нүд өөрчлөгддөг: хуучин багажнууд нь "тус тусдаа оньсого" байхаа больж, нэг л онолын өөр өөр хэрэглээ болж харагддаг — бүр шинэ, огт үзээгүй багаж гарт нь ирэхэд "иш нь энэ, ир нь энэ байна" гээд өөрөө задалчихдаг болдог. Та яг тэр өдрөө өнгөрүүлж байна: function/parameter/argument/return бол таны "эд ангиудын нэрс" — өнөөдрийн тооллого хуучин таван багажийг чинь нэг онолд эгнүүлэх бөгөөд хамгийн үнэтэй үр дүн нь ирээдүйд илэрнэ: Python-д таны хараахан үзээгүй олон зуун бэлэн function бий — тэдний хэн нэгтэй нь анх таарахдаа та "ямар parameter авдаг вэ, юу гардуулдаг вэ" гэсэн хоёрхон асуултаар "задалчихдаг" болсон байх болно.
print() — авдаг нь: хэдэн ч argument; гардуулдаг нь: юу ч үгүй (None). Хамгийн анхны танилаасаа эхэлье — тэгээд шууд хоёр оньсого тайлагдана. Нэг: print(ner, "танд", niit, "төгрөг болно") гэж таслалаар хэдэн ч зүйл өгч болдог байсныг санаж байна уу — энэ нь print "дурын тооны argument" авч чаддаг онцгой чадвартай function учраас юм (та өөрөө ийм function хийж сураагүй — Python-ы гүнзгий чадваруудын нэг; таных нь тогтсон тооны parameter-тэй хэвээр байг). Хоёр — илүү чухал нь: print бол "хэлдэг тогооч" мөн: ажил нь дэлгэцэд гаргах бөгөөд юу ч гардуулдаггүй — албан ёсоор None. Өмнөх хичээлийн "None гарч ирвэл return мартагдсан" дүрмийн эх сурвалж нь яг энэ: x = print("Сайн уу") гэвэл x дотор None очно. Print бол энэ тооллогын цорын ганц гардуулдаггүй гишүүн — бусад дөрөв нь бүгд "гардуулдаг тогооч" болохыг одоо харна.
input() — авдаг нь: нэг argument (асуултын бичиг); гардуулдаг нь: string. Одоо Бүлэг 5-ын "том дүрэм" — "input ямар ч нөхцөлд string буцаадаг" — шинэ хэлээр нэг өгүүлбэр болно: input-ын return төрөл нь үргэлж str. "Буцаадаг" гэж бид тэр үед хэлж байсныг ажигла: та return-ий тухай хэдэн бүлгийн өмнө сонсчихсон байсан юм — зөвхөн нэрийг нь мэдээгүй. Мөн ner = input("Таны нэр хэн бэ? ") гэсэн, таны хамгийн олон бичсэн мөрүүдийн нэг одоо бүрэн "задардаг": "Таны нэр хэн бэ? " бол argument, гардуулалт нь ner хайрцганд очиж байна.
int() — авдаг нь: нэг argument; гардуулдаг нь: int. "Дугтуй онгойлгогч" маань бол гардуулдаг тогоочийн хамгийн цэвэр жишээ: юу ч хэвлэдэггүй, чимээгүй хувиргаад хариугаа л өгдөг. Одоо int(input(...)) гэсэн давхар бүтэц шинэ нүдээр задарна: дотоод function-ий гардуулалт гадаад function-ий argument болж байна — өмнөх хичээлийн talbai/budgiin_zardal дамжлагыг та үнэндээ Бүлэг 5-аас хойш өдөр бүр бичиж байсан юм! Гэр бүлийн гишүүд float(), str() мөн ижил дүрстэй: нэг авна, хувиргана, гардуулна.
type() — авдаг нь: нэг argument; гардуулдаг нь: төрөл. "Шошго уншигч" маань мөн гардуулдаг тогооч — тэгээд type()-ийн хичээлийн хамгийн том оньсого одоо өөрөө тайлагдана: яагаад type(12) ганцаараа юу ч үзүүлдэггүй, print(type(12)) гэж бичих ёстой байсан бэ? Учир нь type бол хэлдэг биш гардуулдаг тогооч: хариугаа гартаа барьчихаад авах хүнээ хүлээж зогсдог — print л түүнийг авч дэлгэцэд хүргэдэг байжээ. "Гардуулсан хариуг хэн ч аваагүй бол агаарт замхардаг" — өмнөх хичээлд албан ёсоор томьёолсон энэ дүрмийг та type()-тэй анх танилцахдаа аль хэдийн мэдэрчихсэн байсан юм.
range() — авдаг нь: нэг, хоёр, эсвэл гурван argument; гардуулдаг нь: тооны цуваа. Тасалбарын машин маань хамгийн "уян" тоологч: argument-ийн тоо нь юу асууж байгааг хэлдэг (нэг бол зогсоол, хоёр бол эхлэл-зогсоол, гурав бол эхлэл-зогсоол-алхам) — таных нь одоохондоо тогтмол тооны parameter авдаг бол range нь "заримыг нь орхиж болдог" ахисан чадвартай. Гардуулалт нь тоо биш цуваа гэдгийг ажигла: for loop тэр цувааг аваад тойрог бүрд нэг нэгээр нь "иддэг" — өөрөөр хэлбэл for i in range(5): гэсэн мөрөнд range-ийн гардуулалт нь for-ын "хоол" болж очдог юм. (Тэр цувааны төрлийн нэр сонин: range — тийм ээ, function-ий нэрээрээ нэрлэгдсэн өөрийн гэсэн төрөл; сониуч хүн print(type(range(5))) гэж шалгаж болно.)
Одоо тооллогодоо зургаа дахь багажаа нэмье. len() (length буюу "урт" гэдгийн товчлол) — авдаг нь: нэг argument (одоохондоо: string); гардуулдаг нь: int — тэмдэгтийн тоо. Харлаа даа: шинэ function-ийг нэг өгүүлбэрээр тодорхойлчихлоо — "эд ангиудын нэрс" ажлаа хийж байна. Жишээгээр бататгая:
python
ner = "Улаанбаатар"
urt = len(ner)
print(urt)
print(len("Сайн уу"))
print(len(""))Үр дүн:
11
7
0Гурван дуудлагыг задалъя. Эхнийх: len(ner) — ner доторх "Улаанбаатар" string-ийн тэмдэгтүүдийг тоолж 11-ийг гардуулав (гардуулдаг тогооч тул хайрцганд хадгалж чадлаа). Хоёр дахь: "Сайн уу" — С-а-й-н-зай-у-у: долоо. Зай тэмдэгтэд тоологдож байгааг ажигла — string хичээлийн "зай ч тэмдэгт мөн, string-ийн урт нүдээр биш тэмдэгтээр тоологддог" гэсэн дүрэм одоо хэмжигч багажтай боллоо: "Бат" ба "Бат " хоёрын ялгааг тэр үед нүдээр харагдахгүй гэж айж байсан бол одоо len() хоёуланг нь тоолоод 3 ба 4 гэж баримтаар ялгаж өгнө. Гурав дахь: хоосон string — тэг тэмдэгт: len("") нь 0 — "хоосон эсэхийг" шалгах хамгийн түгээмэл арга нь яг энэ дуудлага юм. Хэрэглээ нь хаа сайгүй: нууц үгийн урт хүрэлцэж байгаа эсэх (if len(nuuts_ug) >= 8:), хэрэглэгч үнэхээр юм бичсэн эсэх (if len(hariult) == 0:), мессежийн хязгаар шалгах... Дараагийн бүлэгт len() бидний байнгын хамтрагч болно — мөн тэнд "string-ээс өөр юуны уртыг хэмжиж чаддаг вэ" гэсэн асуултын хариу (list!) хүлээж байгаа.
Хүсвэл туршаад үзээрэй: өөрийн нэр, овгийн уртыг хэмжиж аль нь урт болохыг харьцуулдаг гурван мөрт программ бичээрэй. Сонирхвол таван хуучин танилаа "нотолгоожуулаарай": print(type(input("юм бич: "))) гэж input-ын гардуулалт үнэхээр str мөн эсэхийг, x = print("тест") гээд print(x)-ээр print үнэхээр None гардуулдгийг өөрийн нүдээр батлах нь энэ хичээлийн тооллогыг "итгэл"-ээс "баримт" болгоно — таамаг биш туршилтаар ажилладаг type()-ийн дадал чинь энд бүрэн хүчиндээ.
Алдаа 1: len-д argument өгөхгүй, эсвэл хаалтыг нь мартах. Шинэ танилын хоёр анхны бүдрэлт нэг дор:
python
ner = "Бат"
print(len())Python:
TypeError: len() takes exactly one argument (0 given)Орчуулбал: "len() яг нэг argument авдаг (0 өгөгдлөө)." Танил хэлбэрийн мэдэгдэл — өмнөх хичээлийн missing argument-ын ах дүү: тоолоод, дутууг хэлээд байна. Len нь юуны уртыг хэмжихээ мэдэхгүй — "уншигч машинд бараагаа тулгалгүй үнэ асуусан" хэрэг. Засвар: len(ner). Мөн урвуу зальтай хувилбар — хаалтгүй бичих: urt = len — алдаа гарахгүй (function-ий нэр бол өөрөө утга гэдгийг Бүлэг 8-ын эхний хичээлээс санана уу): urt дотор "хэмжигч багаж өөрөө" очно, тоо биш. Дараа нь urt + 1 гэх мөчид л TypeError гарч оношлогдоно. Дүрэм хуучнаараа: дуудлага = нэр + хаалт + argument.
Алдаа 2: len-д тоо өгөх. "Тооны урт" гэсэн ойлголт зөн совинд байдаг ч:
python
nas = 25
print(len(nas))Python:
TypeError: object of type 'int' has no len()Орчуулбал: "int төрлийн зүйлд len() гэж байхгүй." 25 гэдэг тоонд "хоёр оронтой" гэсэн харагдац бий ч Python-ы хувьд int бол тэмдэгтүүдийн хэлхээ биш — тоолох "ширхэг" нь угаасаа байхгүй утга юм: string нь сувдан хэлхээ бол int нь цул чулуу. Хэрэв танд үнэхээр "хэдэн оронтой вэ" гэсэн асуулт хэрэгтэй бол зам нь: тоогоо эхлээд string болго — len(str(nas)) — str() гардуулагч + len() хэмжигч гэсэн танил дамжлага: 25 → "25" → 2. Энэ алдааны ерөнхий сургамж нь том: function бүр ямар төрлийн argument "хүлээж авдгаа" сонгодог — төрөл таарахгүй бол TypeError; мэдэгдэл нь ("object of type 'int'") аль төрөл нь гологдсоныг үргэлж хэлж өгдөг.
Алдаа 3: Өөрийн function-д Python-ы function-ий нэр өгөх. Тооллогын танилуудаа "дарж бичих" осол — нэрийн хичээлийн print = ... урхины def хувилбар:
python
def len(ner):
print("Нэр шалгаж байна:", ner)
urt = len("Улаанбаатар")
print(urt)Үр дүн:
Нэр шалгаж байна: Улаанбаатар
NoneАлдааны мэдэгдэлгүй — гэхдээ хоёр давхар гажуудал: len гэдэг нэрээр өөрийн function тодорхойлсноор Python-ы жинхэнэ хэмжигч энэ программын хүрээнд "халагдаж", таны хэвлэдэг (гардуулдаггүй — тиймээс None!) хувилбар оронд нь ажиллажээ. Программын өөр газар len-ээр урт хэмжих гэсэн бүх код чимээгүйхэн эвдэрнэ. Дүрэм: def-ийн нэр сонгохдоо Python-ы мэддэг нэрсийг (print, input, int, type, range, len...) тойр — VS Code энд дохио өгдөг: нэр чинь бичмэгц "багажийн өнгөөр" будагдвал тэр нэр эзэнтэй гэсэн үг. Санамсаргүй тохиолдвол засвар нь танил: нэрээ солиод дахин Run — эвдрэл тухайн ажиллагаанд л байсан, Python-ы жинхэнэ len хэвээрээ.
Таван хуучин танил шинэ хэлээр: print (хэдэн ч argument, None — цорын ганц "хэлдэг" нь), input (нэг argument, str гардуулна), int (нэг, int), type (нэг, төрөл), range (нэг-гурав, тооны цуваа).
Шинэ танил len(): string-ийн тэмдэгтийг тоолж int гардуулна — зай ч тоологдоно, len("") нь 0; "хэдэн оронтой" бол len(str(...)).
Хуучин оньсогонууд тайлагдав: int(input(...)) бол гардуулалт-argument-ийн дамжлага; print(type(...)) хэрэгтэй байсан нь type гардуулдаг тогооч учраас; "input string буцаадаг" гэдэг нь return-ий тухай анхны яриа байсан.
Шинэ function-тэй танилцах хоёр асуулт: ямар argument (тоо, төрөл) авдаг вэ? юу гардуулдаг вэ? — TypeError-ын мэдэгдлүүд хоёуланд нь хариулж өгдөг.
Python-ы мэддэг нэрсээр өөрийн function-оо бүү нэрлэ — жинхэнэ багаж "халагдаж" чимээгүй эвдрэл тарьдаг.
Ингээд Function бүлэг өндөрлөлөө — та багаж хэрэглэгчээс багаж бүтээгч боллоо. Дараагийн бүлэг бол String гүнзгийрүүлэх: Бүлэг 5-д "битүү дугтуй" гэж танилцсан string маань үнэндээ өөрийн гэсэн багажны иж бүрдэлтэй амьтан юм — том болгох, цэвэрлэх, солих, хайх... Тэр багажнуудыг дуудах бичиглэл нь таны одоогийн мэддэгээс өчүүхэн ялгаатай (цэгээр залгаж дууддаг — ner.upper() гэх маягаар) бөгөөд яг тэр цэгний цаана Python-ы дараагийн том санаа нуугдаж байгаа. Бүлэг 6-гийн "Улаанбаатар " ард нь далд зайтай хариултын шарх ч тэнд эмчлэгдэнэ.
Бүртгэлтэй болсноор энэ сургалтын бүх хичээлд хандах эрх авна.