Ачааллж байна...
Шинэ бүлэгт тавтай морил. Бүлэг 5-д бид string-ийг "битүү дугтуй" гэж таньсан: Python доторхыг нь шинжилдэггүй, байгаагаар нь зөөдөг гэж. Тэр зураг үнэн хэвээрээ — гэхдээ өнөөдрөөс бид түүнд нэг том нэмэлт хийнэ: дугтуй маань өөрийн гэсэн багажны иж бүрдэлтэй юм байна. Том үсэг болгодог, захын зайг хусдаг, үг солидог, хэсэглэн хуваадаг... — string бүр ийм "хувийн багажнуудыг" биедээ авч явдаг бөгөөд тэдгээрийг method (арга) гэж нэрлэдэг. Энэ хичээлд бид string-ийн хамгийн их хэрэглэгддэг таван method-той танилцана: upper, lower, strip, replace, split. Мөн нэг өр барагдана: Бүлэг 6-д "хэрэглэгч 'улаанбаатар' гэж жижгээр, эсвэл 'Улаанбаатар ' гэж ард нь далд зайтай бичихэд нөхцөл унадаг — цэвэрлэгч аргууд нь Бүлэг 9-ийн эзэд" гэж амласан шархыг өнөөдөр эмчилнэ.
Method гэдэг нь юугаараа шинэ ойлголт вэ — function-ээс ялгаа нь юу вэ гэдгийг эхэнд нь шударгаар хэлье: method бол утгандаа "харьяалагддаг" function юм. Len() бол хэнд ч харьяалагдахгүй, бие даасан багаж — хэрэглэхдээ len(ner) гэж утгаа хаалтанд нь өгдөг. Харин upper бол string-ийн өөрийнх нь багаж — хэрэглэхдээ ner.upper() гэж утгынхаа ард цэгээр залгаж дууддаг. Энэ цэгэн бичиглэлийг dot notation гэдэг бөгөөд цаана нь Python-ы нэг том санаа нуугдаж байгаа — "утга бүр өөрийн төрлийн авдартай ирдэг" гэсэн санаа: тэр том яриаг бид Бүлэг 14-т (class, object) бүрэн дэлгэнэ. Өнөөдөртөө практик тал нь хангалттай: string-ийн багажийг string-ийнхээ ард цэг тавьж дууддаг — цэг бол "чиний авдраас" гэсэн утгатай тэмдэг гэж ойлгоод явъя.
Битүү дугтуйныхаа зургийг өргөтгөе. Төсөөлөөрэй — таны дугтуй бүр үнэндээ жижигхэн дагалдах авдартай ирдэг юм: авдар дотор нь яг энэ төрлийн илгээмжид зориулагдсан багажнууд. String-ийн авдарт: "бүх үсгийг томруулагч", "захын зай хусагч", "үг солигч"... Авдрыг нээх түлхүүр нь цэг: ner.upper() гэдэг нь "ner дугтуйны өөрийнх нь авдраас upper багажийг гаргаж ажиллуул" гэсэн заавар. Нэг чухал зүйлийг зүйрлэлдээ шууд суулгая: эдгээр багажнууд дугтуйг өөрийг нь хөнддөггүй — тэд дугтуйн агуулгыг уншаад, өөрчилсөн шинэ дугтуй хийж гардуулдаг: хуучин дугтуй чинь байрандаа, байсан хэвээрээ үлддэг. Өөрөөр хэлбэл string-ийн method-ууд бүгд өмнөх бүлгийн "гардуулдаг тогооч" нар: юу ч хэвлэдэггүй, хуучнаа эвддэггүй — шинийг гардуулдаг. Энэ чанарыг мартах нь өнөөдрийн хамгийн том урхи тул жишээнүүд дээр дахин дахин үзнэ.
Хамгийн энгийн хосоос эхэлье — бүх үсгийг том (upper) эсвэл жижиг (lower) болгогч:
python
ner = "Улаанбаатар"
print(ner.upper())
print(ner.lower())
print(ner)Үр дүн:
УЛААНБААТАР
улаанбаатар
УлаанбаатарБичиглэлийг задалъя: ner цэг upper хаалт — цэг нь "ner-ийн авдраас", upper нь багажийн нэр, хаалт нь таны сайн мэдэх "одоо ажилла!" гэсэн товч (method бол function тул хаалтгүйгээр ажиллахгүй — хуучин дүрэм шинэ нутагтаа хүчинтэй). Гурав дахь print-ийг онцгойлон хараарай: хоёр method дуудагдсаны дараа ner дотор юу байна — "Улаанбаатар" хэвээрээ. Хоёр дуудлага хоёулаа шинэ string гардуулсан (бид тэднийг шууд print-д өгсөн) болохоос ner-ийг өөрийг нь өөрчлөөгүй. Хэрэглээ нь: том-жижиг үсгийн ялгааг арилгаж харьцуулах — Бүлэг 6-гийн шархны эхний эм:
python
hariult = input("Монголын нийслэл хаана вэ? ")
if hariult.lower() == "улаанбаатар":
print("Зөв!")"Улаанбаатар" ч бай, "УЛААНБААТАР" ч бай, "улаанбаатар" ч бай — lower() бүгдийг нь "улаанбаатар" болгож жигнэсний дараа тулгаж байгаа тул гурвуулаа "Зөв!" авна. Жинлүүрийн хоёр талыг нэг хэлбэрт оруулж байж тулгах — энэ бол хэрэглэгчийн орцтой ажиллах мэргэжлийн дадал.
Хоёр дахь жишээ: strip — захын зай хусагч. Шархны хоёр дахь эм. Хэрэглэгч "Бат " гэж ард нь санамсаргүй зайтай бичихэд юу болдгийг Бүлэг 6-аас санана — strip() яг түүнийг эмчилнэ: string-ийн эхэн ба төгсгөлийн бүх зайг хусаж хаясан шинэ string гардуулна:
python
bichleg = " Сайн байна уу "
print(len(bichleg))
tseverhen = bichleg.strip()
print(len(tseverhen))
print(tseverhen)Үр дүн:
18
12
Сайн байна ууӨмнөх хичээлийн len() шинэ ажилдаа орлоо: нүдэнд бараг ялгагдахгүй өөрчлөлтийг тоогоор баталж байна — 18 тэмдэгт байсан нь хусалтын дараа 12 болов (эхний гурав, сүүлийн гурван зай алга болж, дундах зайнууд үлдсэнийг ажигла: strip зөвхөн захыг хусдаг, дотор орохгүй). Гардуулалтыг нь энэ удаад хайрцганд (tseverhen) хадгалснаа анзаараарай — method-ын үр дүнтэй цааш ажиллах хэрэгтэй үед танил хөдөлгөөн. Хэрэглэгчийн орцыг хүлээж авмагц strip() хийх нь бараг зан үйл болсон дадал: hariult = input(...).strip() — input-ын гардуулалт дээр шууд цэгээр залгаж болдог нь (гардуулалт бол жинхэнэ string тул өөрийн авдартай!) дамжлагын танил гоо зүй.
Гурав дахь жишээ: replace — үг солигч. Хоёр argument авдаг анхны method: "юуг" ба "юугаар":
python
medee = "Өнөөдөр бороотой байна"
shine_medee = medee.replace("бороотой", "нартай")
print(shine_medee)
print(medee)Үр дүн:
Өнөөдөр нартай байна
Өнөөдөр бороотой байнаreplace("бороотой", "нартай") — "бороотой гэсэн хэсэг бүрийг нартай болгож сольсон шинэ string гардуул." Бүрийг гэдгийг тодотгоё: string дотор хайж буй хэсэг гурван удаа тааралдвал гурвууланг нь солино. Сүүлийн print дахин нэг сануулж байна: эх string хөндөгдөөгүй. Replace-ийн нэг зальтай хэрэглээ — устгалт: хоёр дахь argument-д хоосон string өгвөл utas.replace(" ", "") гэдэг нь "бүх зайг юугаар ч сольж" буюу устгаж байгаа хэрэг: "9911 2233" → "99112233" — утасны дугаар цэвэрлэхэд бэлэн жор.
Дөрөв дэх жишээ: split — хуваагч, ба анхны танилцал: list. Тавны хамгийн онцгой нь — учир нь гардуулдаг зүйл нь string биш:
python
uguulber = "алим лийр чавга"
jims = uguulber.split()
print(jims)Үр дүн:
['алим', 'лийр', 'чавга']split() нь string-ийг зай бүрээр нь таслаад, гарсан хэсгүүдийг жагсаалт болгож гардуулдаг — дэлгэцэд харагдаж буй дөрвөлжин хаалттай, таслалаар зэрэгцсэн энэ бүтцийг list гэдэг. Танил нэр биз: range-ийн хичээлд print(list(range(...))) гэж "тасалбаруудыг жагсааж үзэх" аргад нэг зөрөглөж байсан, өмнөх бүлэгт "олон утгыг нэг саванд хийж гардуулдаг сав" гэж амлаж байсан — тэр сав энэ. List бол дараагийн бүлгийн гол баатар: бүтэн ёслол нь тэнд болно, өнөөдөр бид зөвхөн "split ийм сав гардуулдаг" гэдгийг харцгаад, савыг задлахыг тэнд үлдээе. Гэхдээ нэг практик амтыг үзүүлье — len() энэ саван дээр ч ажилладаг:
python
print(len(jims))Үр дүн: 3 — гурван үг. Өгүүлбэрийн үгийн тоог тоолох жор гарч ирлээ: len(uguulber.split()) — өмнөх хичээлийн "len string-ээс өөр юуны уртыг хэмжиж чаддаг вэ" гэсэн асуултын эхний хариулт: list-ийн гишүүдийг тоолдог юм байна.
Тав дахь жишээ: дамжлага — method дээр method. Method-ын гардуулалт string тул түүн дээр дахин цэг тавьж болно — багажнууд хоорондоо хэлхэгдэнэ:
python
hariult = input("Монголын нийслэл хаана вэ? ")
tseverhen = hariult.strip().lower()
if tseverhen == "улаанбаатар":
print("Зөв!")
else:
print("Дахин бодоод үзээрэй")hariult.strip().lower() — зүүнээс баруун уншина: hariult-аас захын зай хусагдсан шинэ string гарч → тэр string-ийн авдраас lower дуудагдаж → бүгд жижиг болсон эцсийн string tseverhen-д очив. "УЛААНБААТАР " (том үсэг + далд зай) гэсэн хамгийн "бохир" орц ч одоо зөвөөр танигдана. Бүлэг 6-гийн шарх бүрэн эмчлэгдэв: хэрэглэгчийн string-ийг харьцуулахын өмнө strip + lower хийх — энэ хос бол таны бүх ирээдүйн input-тай программын стандарт "угаалга" болог.
Хүсвэл туршаад үзээрэй: тоо таах тоглоомынхоо "дахин тоглох уу?" асуултад (хэрэв өргөтгөлийг нь хийсэн бол) энэ угаалгыг суулгаарай — "Тийм", "тийм ", "ТИЙМ" бүгд ажилладаг болно. Сонирхвол өөрийн нэрийг ".upper()"-ээр "хашгируулж", нэг өгүүлбэрийнхээ үгийн тоог len(...split())-ээр тоолж, дуртай хоолныхоо нэрэн доторх нэг үсгийг replace-ээр сольж тоглоорой — таван багаж гар дээр чинь дасах хэрэгтэй.
Алдаа 1: Method-ыг "хийчихсэн" гэж бодоод гардуулалтыг нь хаях. Өнөөдрийн хамгийн том, хамгийн олон давтагддаг урхи:
python
ner = " бат "
ner.strip()
print(ner)Үр дүн:
батЗай хусагдсангүй! Учир нь ner.strip() шинэ string гардуулсан — гэхдээ түүнийг хэн ч аваагүй: type()-ийн "ганцаардсан асуулт", хаалтгүй function-ий "чимээгүй замхралт"-ын гэр бүлийн гишүүн — гардуулалт агаарт замхарч, эх string (дугтуйнууд хөндөгддөггүй!) хэвээр үлдэв. Засвар нь нэг л хөдөлгөөн: гардуулалтыг буцааж хадгал — ner = ner.strip(). Энэ хэв маяг (өөр дээр нь дарж хадгалах) бол string "өөрчлөх"-ийн стандарт хэлбэр: үнэндээ өөрчилдөггүй — шинээр гардуулуулаад хуучин шошгон дээр нь тавьдаг (Бүлэг 4: шинэ утга хийхэд хуучин нь алга болдог). Оношлогооны дүрэм: method дуудсан мөртлөө "юу ч өөрчлөгдөөгүй" бол — гардуулалтаа хадгалсан эсэхээ шалга.
Алдаа 2: Цэгний оронд function маягаар дуудах. Хоёр бичиглэлийн хэв маягийг хольвол:
python
ner = "Бат"
print(upper(ner))Python:
NameError: name 'upper' is not definedТанил NameError — учир нь upper бол len шиг бие даасан function биш: тэр зөвхөн string-ийн авдарт л амьдардаг тул "эзэнгүй" нэрээр нь дуудахад Python олсонгүй. Засвар: ner.upper(). Урвуу андуурал нь ч бий — ner.len() гэж len-ийг авдарт "оруулах" гэвэл: AttributeError: 'str' object has no attribute 'len' — шинэ төрлийн мэдэгдэл: "str-ийн авдарт len гэдэг зүйл алга" (attribute гэдэг нь "авдрын доторх зүйл" гэсэн ойролцоо утгатай — Бүлэг 14-ийн нутгийн үг). Аль нь авдрынх, аль нь бие даасан бэ гэдгийг андуурвал Python хоёр өөр мэдэгдлээр, гэхдээ хоёулаа тодорхойгоор хэлж өгнө — цээжлэлт биш туршилт: эргэлзвэл нэг Run.
Алдаа 3: Хаалтаа мартах — чимээгүй "багаж хэвлэлт". Function-ий хуучин урхи цэгэн нутагтаа шинэ дүрээр:
python
ner = "бат"
print(ner.upper)Үр дүн:
<built-in method upper of str object at 0x000001A2B3C4D5E6>Алдаа биш — гэхдээ "БАТ"-ын оронд ойлгомжгүй урт бичиг гарлаа: хаалтгүй ner.upper бол "багажийг ажиллуул" биш "багажийг өөрийг нь үзүүл" гэсэн утга болж, Python таны нүдэнд багажийн "паспортыг" (built-in method upper — "str-ийн угсралтын upper method, санах ойн ийм хаягт байгаа") хэвлэжээ. Ийм <...> хэлбэрийн гарц харагдвал оношлогоо нэг л зүйл: аль нэг дуудлагын хаалт мартагджээ — мөрөө хараад () -ээ нөх. (Function-ий хичээлийн "чимээгүй дурдлага" энд дэлгэцэнд "дуутай" болсон хувилбараараа ирлээ — print дотор орсон учраас нүдэнд ил гарч байгаа нь оношилход бүр амар тал нь.)
Method бол утгандаа харьяалагддаг function: string-ийн багажийг цэгээр залгаж дуудна — ner.upper(); цэг нь "өөрийнх нь авдраас" гэсэн тэмдэг (том яриа нь Бүлэг 14-т).
Таван багаж: upper/lower (том-жижиг), strip (захын зай хусагч), replace(юуг, юугаар) (солигч — хоосноор сольбол устгагч), split (хэсэглэгч — list гардуулдаг: дараагийн бүлгийн үүд).
String-ийн method-ууд эх string-ээ хэзээ ч өөрчилдөггүй — шинийг гардуулдаг: "өөрчлөх" бол ner = ner.strip() гэж дарж хадгалах хэв маяг.
Хэрэглэгчийн орцын стандарт угаалга: .strip().lower() хийсний дараа харьцуул — Бүлэг 6-гийн том-жижиг үсэг, далд зайн шарх ийнхүү эмчлэгдэв.
Гурван урхи гурван дүрстэй: гардуулалт хадгалаагүй бол "юу ч өөрчлөгдөхгүй", эзэнгүй дуудвал NameError/AttributeError, хаалт мартвал <built-in method...> паспорт хэвлэгдэнэ.
Дараагийн хичээлд string-ийн ертөнцийн хамгийн тансаг хэрэгсэлтэй танилцана: f-string — variable-уудаа өгүүлбэр дотроо шууд "суулгаж" бичдэг арга. Таны өдий хүртэл хэрэглэсэн хоёр аргын (таслалт print, + залгалт) зовлонг эхлээд нэг эргэж хараад — "Сайн байна уу, {ner}!" гэж бичдэг шинэ эрин рүү орно: түүнээс хойш урт залгалт бичих өдрүүд чинь ард үлдэнэ.
Бүртгэлтэй болсноор энэ сургалтын бүх хичээлд хандах эрх авна.