Ачааллж байна...
Өмнөх хичээлд бид салааны самбарт бичих анхны асуултаа сурсан: == буюу "тэнцүү юү?". Гэхдээ амьдралын шийдвэрүүд зөвхөн тэнцэтгэл дээр тогтдоггүй биз дээ: "нас нь 18-аас их үү", "үнэ нь мөнгөнөөс минь бага уу", "хариулт нь зөв хариултаас ялгаатай юу" — шийдвэр бүр өөрийн төрлийн асуулт шаарддаг. Өнөөдөр бид тэр асуултуудын бүрэн цуглуулгыг авна: Python-ы харьцуулах операторууд гэж нэрлэгддэг зургаан тэмдэг. Оператор гэдэг нь "үйлдэл гүйцэтгэдэг тэмдэг" гэсэн программчлалын ерөнхий нэр томьёо юм — та үнэндээ операторуудтай аль хэдийн ажиллаж байгаа: + - * / бол тооны операторууд. Өнөөдрийн зургаа нь тэднээс нэг л зүйлээрээ ялгаатай: тооны операторууд тооноос тоо гаргадаг бол харьцуулах операторууд юунаас ч bool гаргадаг — тэд бол "асуултын тэмдгүүд" бөгөөд хариулт нь үргэлж True эсвэл False байдаг.
Мөн энэ хичээлд бид нэг том өртэй тооцоо хийнэ. Өмнөх хичээлд "== ба = хоёрын ялгаа маш чухал тул дараагийн хичээл бүхэлдээ үүнд зориулагдана" гэж амласан — үнэндээ "бүхэлдээ" гэдэг нь хэтрүүлэг биш: энэ хоёр тэмдгийг андуурах нь энэ бүлгийн, магадгүй бүхэл сургалтын хамгийн олон давтагддаг ганц алдаа юм. Дэлхийн ямар ч хэл дээр, ямар ч түвшний программист энэ алдааг амьдралдаа олон удаа гаргадаг — ялгаа нь зөвхөн хэр хурдан таньж засдагт л байдаг. Тиймээс бид энэ хоёр тэмдэгт тусгай хэсэг зориулж, андуурлын үндсийг нь тас цохино.
Харьцуулах операторуудыг хоёр тавагтай жинлүүр гэж төсөөлөөрэй. Хоёр таваг дээр хоёр зүйл тавина — жинлүүр ганцхан төрлийн хариулт өгнө: асуусан чинь үнэн үү, худал уу. "Зүүн таваг хүнд үү?" — тийм/үгүй. "Хоёр таваг тэнцүү юү?" — тийм/үгүй. Жинлүүр хэзээ ч "бараг тэнцүү", "мэдэхгүй" гэж хариулдаггүй, мөн таваг дээрх зүйлсийг өөрчилдөггүй — зөвхөн хэмжээд хариугаа хэлдэг. Энэ сүүлийн чанар нь маш чухал: харьцуулах оператор бол ажиглагч юм. score > 50 гэж асуухад score-ын доторх утга ямар ч байдлаар хөндөгдөхгүй — type() шиг л "хараад хэлдэг". Харин = тэмдэг бол огт өөр ертөнцийн иргэн: тэр ажиглагч биш үйлдэгч — хайрцаг руу юм хийдэг, өөрчилдөг, хуучин утгыг устгадаг. Жинлүүр ба ачигч хоёр шиг: нэг нь хэмждэг, нөгөө нь зөөдөг. Гадаад төрхөөрөө төстэй (= ба ==) мөртлөө мөн чанараараа эсрэг тэсрэг энэ хоёрын будилаан яг эндээс эхэлдэг тул зургийг нь одооноос тод хадгалаарай.
Эхлээд бүгдийг нэг дор харъя, дараа нь нэг бүрчлэн ажиллуулна:
python
print(5 == 5)
print(5 != 3)
print(7 > 3)
print(2 < 9)
print(5 >= 5)
print(4 <= 3)Үр дүн:
True
True
True
True
True
FalseМөр бүрийг уншъя. == ("тэнцүү юү?"): 5 нь 5-тай тэнцүү тул True. != ("ялгаатай юу?"): анхаарын тэмдэг нь программчлалд "үгүй, биш" гэсэн утга тээдэг тул != нь "тэнцүү биш үү?" гэсэн асуулт — 5 ба 3 ялгаатай тул True. > ("их үү?"): 7 нь 3-аас их — True. < ("бага уу?"): 2 нь 9-өөс бага — True. >= ("их буюу тэнцүү юү?"): 5 нь 5-аас их биш ч тэнцүү тул True — энэ оператор "их" эсвэл "тэнцүү" хоёрын аль нэг нь л биелвэл True өгдөг. <= ("бага буюу тэнцүү юү?"): 4 нь 3-аас бага ч биш, тэнцүү ч биш тул — цуглуулгын ганц False.
Бичиглэлийн хоёр нарийн ширийн зүйл. Нэгд: >= ба <= дотор тэнцүүгийн тэмдэг үргэлж ард нь бичигдэнэ — => гэж бичвэл SyntaxError (санахад амар арга: уншдагтайгаа ижил дараалал — "их буюу тэнцүү" гэж хэлдэг шиг > эхэлж = дагадаг). Хоёрт: != ба == ба >= бүгд хоёр тэмдэгт нэг оператор — дунд нь зай тавьж болохгүй (! = гэвэл алдаа), яг ** шиг наалдмал хос юм.
Bool хичээлд "5 > 5 юу гарах бол" гэсэн туршилт санал болгосныг санаж байвал — одоо хариулт нь албан ёсоор: False, учир нь "их" гэдэгт "тэнцүү" багтдаггүй; тэнцүүг оруулъя гэвэл >= гэж шууд хэлэх ёстой. Энэ жижиг ялгаа (> ба >=) бодит программд том үр дагавартай: "18 ба түүнээс дээш насныхан нэвтэрнэ" гэдгийг nas > 18 гэж бичвэл яг 18 настай хүн гадаа хоцорно — зөв нь nas >= 18. Нөхцөл бичихдээ хилийн яг цэг дээрх тохиолдлыг ("яг 18 бол яах вэ?") үргэлж нэг бодож үзэх дадал энэ ангиллын алдаанаас хамгаалдаг.
Хоёр дахь жишээ: if-тэй хамт — жинхэнэ хэрэглээ. Операторууд ганцаараа биш, өмнөх хичээлийн салаатай хоршиж хүчээ авдаг:
python
nas = int(input("Та хэдэн настай вэ? "))
if nas >= 13:
print("Та өсвөр насанд хүрсэн байна")
if nas < 13:
print("Та хараахан өсвөр насанд хүрээгүй байна")
print("Баярлалаа")12 гэж хариулбал хоёр дахь салаа, 15 гэвэл эхнийх нь биелнэ — 13 гэвэл? Хилийн цэгээ шалгая: 13 >= 13 нь True (тэнцүү багтдаг), 13 < 13 нь False — эхний салаа биелнэ. Хоёр нөхцөл маань хоорондоо "нөхөж" байгааг ажигла: ямар ч тоонд яг аль нэг нь л True гардаг (нэг нь >= 13, нөгөө нь < 13 — дундаа завсар ч, давхцал ч алга). Ийм хос нөхцөлийг гараар тааруулах нь болгоомж шаарддаг ажил — азаар дараагийн хичээлийн else яг энэ ажлыг автоматаар хийдэг: "үлдсэн бүх тохиолдолд" гэсэн салаа. Өнөөдөртөө хоёр if-ээ гараар нөхөж бичиж байгаа нь else-ийн ачийг маргааш мэдрэх бэлтгэл гэж бодоорой.
Гурав дахь жишээ: string-үүдийг харьцуулах. Жинлүүр дээр тоо төдийгүй дугтуй ч тавьж болно:
python
hariult = input("Монголын нийслэл хаана вэ? ")
if hariult == "Улаанбаатар":
print("Зөв!")
if hariult != "Улаанбаатар":
print("Дахин бодоод үзээрэй")== ба != string дээр төгс ажиллана: хоёр string-ийн тэмдэгт бүр нь байрандаа таарч байвал тэнцүү. Гэхдээ энд string хичээлийн хоёр сануулга шинэ хүчээр эргэн ирнэ. Нэгд — том жижиг үсэг: "Улаанбаатар" ба "улаанбаатар" бол Python-д ялгаатай string-үүд (У ба у өөр тэмдэгт) тул жижгээр бичсэн хэрэглэгч "Дахин бодоод үзээрэй" гэсэн хариу авна — утгаараа зөв мөртлөө. Хоёрт — үл үзэгдэх зай: "Улаанбаатар " (ард нь санамсаргүй зай дарсан) мөн л тэнцэхгүй. Энэ бол алдааны мэдэгдэлгүй, "программ ажиллаад л байгаа юм чинь" гэж харагддаг ангиллын зальтай зан тул одооноос мэдэж аваарай: хэрэглэгчийн бичсэн string-ийг харьцуулж байгаа бол бичиглэлийн өчүүхэн зөрүү нөхцөлийг унагадаг. (String-ийг харьцуулалтад "бэлддэг" цэвэрлэгч аргууд бий — том жижгийг нэгтгэх, захын зайг хусах — тэдгээр нь Бүлэг 9-ийн эзэд; тэнд очоод энэ жишээгээ бид "хатуужуулна".)
Дөрөв дэх жишээ: хайрцаг хайрцгийн эсрэг. Жинлүүрийн хоёр таваг дээр хоёулан дээр нь variable тавьж болно:
python
minii_ono = 87
niiziin_ono = 92
if minii_ono > niiziin_ono:
print("Би түрүүллээ")
if minii_ono < niiziin_ono:
print("Найз минь түрүүллээ")
if minii_ono == niiziin_ono:
print("Тэнцлээ")Үр дүн:
Найз минь түрүүллээPython нөхцөл бүр дээр хоёр хайрцгийг хоёуланг нь онгойлгож, 87 ба 92-оо жинлүүртээ тавьж хариу гаргана. Гурван if гурван боломжит харьцааг (их, бага, тэнцүү) бүрэн хамарч байна — аль ч хоёр тооны хувьд яг нэг нь True гарна. Мөшгилтийн дадлаа мартуузай: гурван нөхцөлийг тус бүрд нь 87 ? 92 болгож "орлуулаад" уншвал программын зан ил болно. (Нэрэн дэх жижиг зүйлийг анзаарсан уу — minii_ono, niiziin_ono гэсэн нэрс "оноо" гэдгээ хэлээд өгч байгаа нь нэрийн хичээлийн дадал ажилдаа орж буй хэрэг.)
Хүсвэл туршаад үзээрэй: хоёр тоо асуугаад аль нь их болохыг хэлдэг программ бичээрэй — дөрөв дэх жишээний бүтэц шууд суурь болно. Сонирхвол string-үүдийг > операторт тавиад үзээрэй: print("алим" > "банана") — алдаа гарахгүй, ямар нэг bool гарна: Python string-үүдийг "толь бичгийн дарааллаар" жинлэж чаддаг юм (аль нь толь бичигт түрүүлж ирэхийг). Энэ чадвар одоо хэрэг болохгүй ч "жинлүүр string-ээс айдаггүй" гэдгийг мэдэж аваарай.
Одоо амласан гол хэсэг. Хоёр тэмдгээ зэрэгцүүлж, нэг мөрөнд тодорхойлъё:
= (дан) — үйлдэл: "баруун талынхыг зүүн талын нэрэнд хадгал." Хайрцаг руу юм хийдэг. Асуулт биш, хариулт өгдөггүй.
== (давхар) — асуулт: "хоёр тал тэнцүү юү?" Юуг ч өөрчилдөггүй, True/False хариулдаг.
Андуурал хоёр чиглэлд гардаг — хоёуланг нь Python-ы хариутай нь үзье.
Чиглэл нэг: асуух гэж байгаад хадгалчих. If-ийн нөхцөлд дан = бичвэл:
python
nuuts_ug = input("Нууц үгээ оруулна уу: ")
if nuuts_ug = "naran":
print("Нэвтэрлээ!")Python:
SyntaxError: invalid syntax. Maybe you meant '==' or ':=' instead of '='?Орчуулбал: "буруу бичиглэл. Магадгүй та '=' биш '==' эсвэл ':=' гэх гэсэн юм болов уу?" (Санал болгож буй := гэдэг нь Python-ы нэг ховор хэрэглээний тусгай оператор — энэ сургалтад хэрэглэхгүй тул үл ойшоож болно; танд хамаатай санал нь ==.) Энд нэг сайхан мэдээ нуугдаж байна: Python if-ийн нөхцөлд дан = тавихыг бичиглэлийн түвшинд хориглодог — учир нь нөхцөлийн байранд "үйлдэл" утгагүй, зөвхөн "асуулт" л байж болно. Хориотой учраас энэ чиглэлийн андуурал хэзээ ч чимээгүй урхи болдоггүй: гарвал шууд, тодоор, бүр зөв засварыг нь санал болгоод гарна. Type()-ийн хичээлийн Алдаа 3-т энэ мэдэгдлийн "Maybe you meant '=='" хэсэгтэй та нэг зөрөглөж байсан — одоо утга нь бүрэн тодорлоо.
Чиглэл хоёр: хадгалах гэж байгаад асуучих. Урвуу тохиолдол — энгийн мөрөнд == бичвэл:
python
score == 100
print(score)Python:
NameError: name 'score' is not definedЮу болов? Эхний мөр "score хайрцаг үүсгэе" гэсэн санаатай бичигдсэн ч == нь асуулт тул юу ч үүсгээгүй — Python "score нь 100-тай тэнцүү юү?" гэж асуух гэж оролдоод, score гэдэг хайрцаг олдоогүй тул NameError өглөө. Хэрэв score өмнө нь үүссэн байсан бол бүр ч зальтай хувилбар тохиолдоно: асуулт чимээгүй асуугдаад, хариулт нь type()-ийн ганцаардсан хариу шиг агаарт замхарч, хадгалалт болоогүй атал ямар ч алдаа гарахгүй — программ "ажиллаад л" утга нь хуучнаараа үлдсэн variable-тай цааш явна. Тиймээс энэ чиглэлийн дүрэм: хадгалах санаатай мөрөндөө давхар тэмдэг орчихсон эсэхийг засварлалтын үедээ нүдээрээ шалгаж сур.
Хоёр чиглэлээ нэг амны уншлагаар түгжье: дан = — "хий", давхар == — "үү?". Мөр бичих бүрдээ "би одоо хийлгэх гэж байна уу, асуух гэж байна уу" гэж өөрөөсөө асуувал зөв тэмдэг нь өөрөө гарч ирнэ.
Алдаа 1: != -ийн оронд =! эсвэл <> бичих. "Тэнцүү биш"-ийг санаанаасаа урвуулж бичих нь элбэг:
python
if hariult =! "тийм":Python:
SyntaxError: invalid syntax=! гэсэн дараалал Python-д ямар ч утгагүй (энэ нь "= тэгээд !" гэсэн хоёр тусдаа тэмдэг болж уншигдана) тул бичиглэлийн алдаа. Зөв дараалал: ! түрүүлж, = дагана — санахад: != гэдэг нь "not equal" гэсэн үгсийн дараалалтай ижил (not нь !, equal нь =). Мөн зарим өөр хэлэнд "тэнцүү биш" нь <> гэж бичигддэгийг дуулсан хүн Python дээр туршвал мөн SyntaxError — Python-д ганцхан хэлбэр нь != юм.
Алдаа 2: Өөр төрлүүдийг == -оор тулгаад "үргэлж False" авах. Хоёр дахь жишээн дээр нэг сөхсөн урхиа албан ёсоор бичье:
python
nas = input("Та хэдэн настай вэ? ")
if nas == 18:
print("Яг 18 настай юм байна!")Хэрэглэгч 18 гэж бичсэн ч салаа хэзээ ч биелэхгүй — алдааны мэдэгдэл ч гарахгүй. Учир нь int() мартагдсан тул nas дотор "18" гэсэн string байгаа бөгөөд "18" 18 гэдэг нь дугтуйг гэрэл зурагтай нь тулгаж буй хэрэг: string ба int хэзээ ч тэнцдэггүй, Python зүгээр л False гээд өнгөрдөг (TypeError ч өгдөггүй — бол "тэнцүү юү" гэсэн асуулт тул "өөр төрлийнх юм чинь мэдээж тэнцэхгүй" гэсэн хууль ёсны хариулттай). Энэ бол input + == хослолын хамгийн аюултай хувилбар: бүх зүйл ажиллаж байгаа мэт харагдана. Оношлогоо: нөхцөл чинь "ямар ч үед биелэхгүй" бол хоёр талынхаа төрлийг type()-ээр шалга — оношийг таны гарт өгсөн багаж мөн л энэ бүлгийн өмнөх хичээлүүдэд бий.
Алдаа 3: Тэнцүүг >= -ийн дотор давхар шалгах гэж оролдох. Санаагаа тэмдэгт буулгахдаа "нэмж угсрах" оролдлого гардаг:
python
if nas > = 13:Python:
SyntaxError: invalid syntax= гэж зай тавьж салгаснаас хос тэмдэг эвдэрчээ — Python "их үү?" асуулт дуусаад ард нь ганцаардсан = ирснийг ойлгохгүй гацна. >= бол нэг бүтэн оператор: наалдмал, зай хүлээдэггүй. Мөн урвуу дараалал => -ийн тухай дээр хэлсэн — хоёуланг нь нэг дүрэмд нэгтгэвэл: хоёр тэмдэгтэй операторууд (==, !=, >=, <=) бол салгаж, урвуулж болдоггүй нэг цул тэмдэг.
Харьцуулах зургаан оператор: == (тэнцүү юү), != (ялгаатай юу), > (их үү), < (бага уу), >= (их буюу тэнцүү юү), <= (бага буюу тэнцүү юү) — бүгд bool хариулдаг ажиглагчид.
Хилийн цэгээ бод: > ба >= хоёрын ялгаа "яг 18 настай хүн" дээр илэрдэг.
Дан = — "хий" (хадгалах үйлдэл), давхар == — "үү?" (асуулт); if дотор дан = бичвэл Python өөрөө зөв засварыг санал болгосон SyntaxError өгдөг.
String-үүдийг == -оор тулгахад том жижиг үсэг, далд зай нөхцөлийг унагадаг; string-ийг int-тэй тулгавал үргэлж False — int() -ээ бүү март.
Хос тэмдэгт операторууд наалдмал нэг цул: салгаж (> =), урвуулж (=>, =!) болохгүй.
Дараагийн хичээлд бид салаа замаа жинхэнэ утгаар нь сэрээнэ: elif ба else — "эхнийх нь биш бол энийг шалга", "аль нь ч биш бол ингэ" гэсэн холбоотой салаалалт. Хоёр дахь жишээний "гараар нөхөж бичсэн хос нөхцөл" маань тэнд нэг эмхэтгэлтэй, найдвартай бүтэц болж хувирахыг харах болно.
Бүртгэлтэй болсноор энэ сургалтын бүх хичээлд хандах эрх авна.