Ачааллж байна...
Шинэ бүлэгт тавтай морил — энэ бол таны программчлалын аяллын хамгийн том эргэлтүүдийн нэг. Өнгөрсөн бүлгүүдэд таны бичсэн бүх программ нэг нийтлэг шинжтэй байсныг эргэн бодоорой: мөр бүр нь үргэлж, заавал биелдэг байсан. Бүлэг 3-т бид "Python дээрээс доош, мөр мөрөөр уншдаг" гэж үзсэн — тэгээд таны программ бүр тэр цуваагаараа, эхнээсээ дуустлаа, нэг ч мөр алгасалгүй гүйдэг байлаа. Хэрэглэгч юу ч хариулсан программ ижилхэн замаар л явдаг байсан — хариулт нь зөвхөн хэвлэгдэх үгсийг өөрчилдөг болохоос программын замыг өөрчилдөггүй байв. Өнөөдөр энэ хязгаар арилна: if гэдэг үг таны программд "энэ хэсгийг зөвхөн тодорхой нөхцөлд л биелүүл" гэж хэлэх чадвар өгнө. Программ чинь анх удаа шийдвэр гаргана.
Энэ яагаад ийм том эргэлт вэ гэдгийг амьдралын нүдээр харъя. Таны утас нууц үг зөв бол онгойдог — буруу бол онгойдоггүй. Тоглоом амь чинь дуусвал л "Game Over" гэдэг. Банкны апп үлдэгдэл хүрэлцэж байвал шилжүүлдэг. "Ухаалаг" гэж бидний нэрлэдэг бүх зан үнэндээ нэг л хэв маяг: нөхцөл шалгаад, үр дүнгээс нь хамаарч өөр өөр үйлдэл хийх. Bool хичээл дээр бид "энэ хоёрхон утгат төрөл бол Бүлэг 6-гийн том хаалганы түлхүүр" гэж амласан — одоо хаалгаа онгойлгоё: if гэдэг нь яг тэр True/False хариултуудыг зам сонголт болгож хувиргадаг үг юм.
if-ийг ойлгох сонгодог зураг бол замын салаа юм. Төсөөлөөрэй: та шулуун замаар алхаж явна — энэ бол таны программын ердийн, дээрээс доош урсдаг цуваа. Гэнэт зам хоёр салаад, салааны дэргэд самбар зогсож байна. Самбарт үйлдэл биш, асуулт бичээстэй: "Бороо орж байна уу?" Хэрэв хариулт тийм бол та зүүн салаагаар орно — тэнд "шүхрээ ав" гэсэн нэмэлт үйлдэл хийгээд, зам чинь буцаад үндсэн замтайгаа нийлнэ. Хэрэв үгүй бол та салаа руу орохгүй — үндсэн замаараа шууд үргэлжлүүлнэ. Хоёр тохиолдолд хоёулад нь та эцэст нь нэг л зам дээр гарна — ялгаа нь ганцхан: замын тэр нэмэлт тойрог биелсэн үү, алгасагдсан уу гэдэгт байгаа юм.
Энэ зургийг Python-ы хэлэнд буулгавал гурван эд анги харагдана. Самбар дээрх асуулт бол нөхцөл — bool хичээлийн "асуулт -> True/False хариу" хэв маягийн яг тэр асуултууд. Салааны нэмэлт хэсэг бол if-ийн бие — нөхцөл True үед л биелэх мөрүүд. Тэгээд нэг чухал асуулт үлдэнэ: Python юугаар салааны хэсэг хаанаас эхэлж хаана дуусахыг мэдэх вэ? Хүн замын салааг нүдээрээ хардаг — Python-д "нүд" нь юу вэ? Энэ асуултын хариулт бол өнөөдрийн хичээлийн хоёр дахь том сэдэв бөгөөд Python хэлний хамгийн онцлог, хамгийн болгоомжтой хандах шаардлагатай дүрэм юм. Эхлээд бүтцээ харцгаая.
Нууц үг шалгагч бичье. Нөхцөлд маань нэг шинэ тэмдэг хэрэг болно: == (хоёр тэнцүү дараалсан) — энэ бол "тэнцүү юү?" гэсэн асуулт юм. type()-ийн хичээлийн төгсгөлд энэ тэмдэг нэг гарч байсныг санаж магадгүй; бүрэн хичээл нь дараагийн удаад бий, өнөөдөр бидэнд ганцхан энэ асуулт хангалттай. (Яагаад нэг биш хоёр тэнцүү вэ? Учир нь дан = аль хэдийн эзэнтэй — "хадгал" гэсэн үйлдэл. Энэ хоёрын ялгаа маш чухал тул дараагийн хичээл бүхэлдээ үүнд зориулагдана.)
python
nuuts_ug = input("Нууц үгээ оруулна уу: ")
if nuuts_ug == "naran":
print("Нэвтэрлээ!")
print("Программ дууслаа")Хэрэглэгч naran гэж бичвэл:
Нууц үгээ оруулна уу: naran
Нэвтэрлээ!
Программ дууслааХэрэглэгч өөр юм бичвэл:
Нууц үгээ оруулна уу: sar
Программ дууслааХоёр гүйлтийг зэрэгцүүлж хараарай: "Нэвтэрлээ!" гэсэн мөр нэг удаад биелж, нөгөө удаад алгасагдлаа — таны программын түүхэн дэх анхны "заримдаа биелдэг" мөр энэ. Одоо if-ийн мөрийг тэмдэгт бүрээр нь задалъя. Эхэнд if гэдэг үг — Python-ы нөөцөлсөн үгсийн (нэрийн хичээлд дурдсан тэр жагсаалтын) анхны төлөөлөгчтэй та албан ёсоор танилцаж байна: энэ үгийг variable-ийн нэр болгож болохгүй, VS Code түүнийг тусгай өнгөөр будна. Дараа нь нөхцөл: nuuts_ug == "naran" — "nuuts_ug доторх утга "naran"-тай тэнцүү юү?" гэсэн асуулт, хариулт нь True эсвэл False. Мөрийн төгсгөлд хоёр цэг (:) — энэ бол "асуулт дууслаа, True үед хийх зүйлс одоо эхэлнэ" гэсэн зарлалын тэмдэг. Хоёр цэгийг мартах нь эхлэгчдийн байнгын бүдрэлт тул дүрэм болгож тогтоо: if-ийн мөр үргэлж хоёр цэгээр төгсдөг.
Тэгээд дараагийн мөрийг хараарай: print("Нэвтэрлээ!") мөр баруун тийш шигдсэн байна. Энэ бол гоо сайхны сонголт биш — Python хэлний амин чухал дүрэм бөгөөд одоо түүнд бүтэн хэсэг зориулъя.
Дээрх асуултаа эргэн саная: Python салааны хэсэг хаанаас эхэлж хаана дуусахыг юугаар мэдэх вэ? Хариулт: догол мөрөөр (indentation — мөрийн эхэнд орхисон зайгаар). If-ийн доорх, баруун тийш шигдсэн мөрүүд бол салааны "бие" — нөхцөл True үед биелэх хэсэг; шигдэлт дуусмагц салаа дуусаж, программ үндсэн замдаа эргэн ордог. Дээрх жишээн дээр print("Нэвтэрлээ!") шигдсэн тул if-д харьяалагдаж "заримдаа" биелдэг, харин print("Программ дууслаа") шигдээгүй тул үндсэн зам дээр байж үргэлж биелдэг — хоёр гүйлтийн аль алинд нь гарсан нь тийм учиртай.
Догол мөрийг хэрхэн хийх вэ: Tab товч (гарын зүүн захад, Q үсэгний хажууд) нэг дарна. VS Code үүнийг дөрвөн зай болгож хөрвүүлдэг — Python ертөнцийн тогтсон хэмжээ нь яг энэ "дөрвөн зайны нэг шат" юм. Бүр амар нь: if-ийн мөрөө хоёр цэгээр төгсгөөд Enter дарахад VS Code дараагийн мөрийг өөрөө шигдүүлчихдэг — эдитор чинь Python-ы энэ дүрмийг мэддэг тул таны өмнөөс догол тавьдаг. Салаанаас "гарахдаа" Backspace нэг дарж шигдэлтээ буцаана.
Олон мөртэй салаа ч мөн ижил зарчмаар — шигдсэн бүх мөр биед нь багтана:
python
if nuuts_ug == "naran":
print("Нэвтэрлээ!")
print("Тавтай морил")
print("Программ дууслаа")Нөхцөл True бол шигдсэн хоёр мөр хоёулаа биелнэ; False бол хоёулаа алгасагдана; сүүлийн мөр ямар ч үед биелнэ. Нэг түвшинд шигдсэн дараалсан мөрүүд нэг багц — энэ л бүх дүрэм. Бусад олон хэл салааны хилийг тусгай хаалтуудаар тэмдэглэдэг бол Python "код нүдэнд яаж харагдаж байна, яг тэгж ажилла" гэсэн зарчим сонгосон юм — тиймээс Python код гоё цэгцтэй харагдахаас өөр аргагүй байдаг: цэгц нь заавал биелэх дүрэм нь өөрөө болохоор тэр. Гэхдээ энэ нь нэг хариуцлага дагуулдаг: зай бол Python-д утга тээдэг тэмдэгт — өмнөх хэлнүүдэд "зүгээр л агаар" байсан зүйл энд дүрмийн гишүүн болсон тул түүнтэй холбоотой шинэ төрлийн алдаа мэндэлдэг. Алдаануудын хэсэгт бид түүнтэй нүүр тулна.
Хоёр дахь жишээ: тоон нөхцөл. Тоглоомын оноо шалгая:
python
score = int(input("Оноогоо оруулна уу: "))
if score == 100:
print("Төгс оноо!")
print("Тоглолт дууслаа")Хэрэглэгч 100 гэвэл "Төгс оноо!" гараад "Тоглолт дууслаа" дагана; өөр ямар ч тоо бичвэл зөвхөн "Тоглолт дууслаа". Мөшгилтөд нэг шинэ давхарга нэмэгдэж байгааг анзаараарай: score 100 гэдэг нөхцөл биелэх мөчид Python юу хийдэг вэ — эхлээд score хайрцгаа онгойлгож утгыг нь авна, дараа нь 100-тай тулгаж True/False гаргана, тэгээд тэр bool-ээр салаагаа шийднэ. Өмнөх бүлгүүдийн бүх эд анги (хайрцаг, int() хувиргалт, асуулт-хариу) нэг л мөрөнд нийлж ажиллаж байна. Мөн int() хийснийг ажигла: input-ын хариу string тул хувиргаагүй бол "100" 100 гэсэн тулгалт болж, string int хоёр хэзээ ч тэнцэхгүй тул нөхцөл үргэлж False гарах байсан — алдааны мэдэгдэлгүй, зүгээр л "хэзээ ч нэвтэрдэггүй" программ. Өмнөх хичээлийн урхи энд шинэ дүрээр эргэн ирлээ.
Гурав дахь жишээ: хоёр бие даасан салаа. Нэг программд хэдэн ч if байж болно — салаа бүр өөрийн асуулттай, бие даасан:
python
ug = input("Нэг үг бичнэ үү: ")
if ug == "python":
print("Энэ сургалтын гол баатар!")
if ug == "бууз":
print("Амттай сонголт")
print("Баярлалаа")python гэж бичвэл эхний салаа биелнэ, бууз гэвэл хоёр дахь нь, огт өөр үг бичвэл аль нь ч биелэхгүй — гурван тохиолдолд бүгдэд нь "Баярлалаа" гарна. Хоёр if бие биенээсээ хамааралгүй: Python эхний салааг бүрэн шийдээд (орох уу, алгасах уу), дараа нь үндсэн замаараа хоёр дахь самбарт ирж дахин шийддэг — дээрээс доош урсгал хэвээрээ, зөвхөн зарим "тойрог" нь нээгдэж хаагдаж байгаа юм. Нэг зүйл нүдэнд өртөж магадгүй: ug нь "python" бол "бууз" мөн эсэхийг шалгах нь илүүц ажил мэт — тийм ээ, "хэрэв эхнийх нь биш бол..." гэсэн холбоотой салаалалт илүү оновчтой бөгөөд яг түүнд зориулагдсан else, elif гэсэн үгс бий: тэд энэ бүлгийн гуравдугаар хичээлийн эзэд. Өнөөдөр бид if-ийн "ганцаараа" хэлбэрийг бат сууриар тавьж байна.
Хүсвэл туршаад үзээрэй: өөрөөсөө нууц асуулт асуудаг программ бичээрэй — "Миний дуртай амьтан юу вэ?" гээд, зөв хариулбал магтдаг. Сонирхвол if-ийнхээ биед гурав, дөрвөн мөр хийгээд бүгд нэг түвшинд шигдсэн үед л нэг багц болдгийг нүдээрээ шалгаарай — нэг мөрийнх нь шигдэлтийг зориуд алдуулаад юу болохыг ч харж болно (дараах хэсэг таныг тэнд угтана).
Алдаа 1: Догол мөрөө мартах. If бичээд биеэ шигдүүлэхгүй орхивол:
python
if score == 100:
print("Төгс оноо!")Python:
IndentationError: expected an indented block after 'if' statement on line 1Шинэ гэр бүлийн алдаа — IndentationError (догол мөрийн алдаа). Орчуулбал: "1-р мөрийн if-ийн дараа шигдсэн багц байхыг хүлээж байсан." Python if-ийн хоёр цэгийг хараад "одоо салааны бие ирнэ" гэж хүлээтэл дараагийн мөр шигдээгүй — "самбар байна, салаа зам нь алга" гэсэн гомдол юм. Засвар: биеийн мөрөө дөрвөн зайгаар (Tab-аар) шигдүүл. Энэ алдаа SyntaxError-ын ойрын садан (бичиглэлийн түвшний алдаа — программ ажиллаж ч эхлээгүй унадаг) боловч өөрийн нэртэй байдаг нь Python-д догол мөр хэр том суудалтайг илтгэнэ.
Алдаа 2: Учиргүй шигдэлт. Урвуу тохиолдол — салаа байхгүй газар догол тавьчихвал:
python
print("Сайн байна уу")
print("Энэ мөр учиргүй шигдсэн")Python:
IndentationError: unexpected indentОрчуулбал: "гэнэтийн догол мөр." Шигдэлт бол Python-д "би дээрх ямар нэг бүтцийн (if гэх мэт) бие нь" гэсэн мэдэгдэл — гэтэл дээр нь хоёр цэгээр төгссөн ямар ч мөр байхгүй тул Python "чи юуны бие юм бэ?" гэж гацлаа. Энэ нь ихэвчлэн хуулж буулгах, мөр зөөх үед санамсаргүй үлдсэн зайнаас үүсдэг. Хоёр алдааг нийлүүлж харвал дүрэм тодорхой: шигдэлт бол дур зоргын хэрэглэл биш — хоёр цэгтэй мөрийн дараа заавал байх, бусад газарт байж болохгүй бүтцийн тэмдэглэгээ юм.
Алдаа 3: Хоёр цэгээ мартах. If-ийн мөрөө хоёр цэггүй төгсгөвөл:
python
if score == 100
print("Төгс оноо!")Python:
SyntaxError: expected ':'Орчуулбал: "хоёр цэг байхыг хүлээж байсан." Орчин үеийн Python-ы хамгийн "эелдэг" мэдэгдлүүдийн нэг — юу дутууг шууд хэлээд өгч байна. Хоёр цэг бол if-ийн бичиглэлийн салшгүй хэсэг: асуулт хэзээ дуусаж, бие хэзээ эхлэхийг зарладаг цорын ганц тэмдэг тул түүнгүйгээр Python мөрийг гүйцэд уншиж чадахгүй. Энэ гурван алдаа гурвуулаа программ эхлэхээс нь өмнө илэрдэг (бичиглэлийн давхаргын алдаанууд) тул нэг сайн мэдээ дагалдана: тэд хэзээ ч "чимээгүй" урхи болдоггүй — гарвал шууд, тодоор гарна, засвар нь ч механик шинжтэй: догол шалга, хоёр цэг шалга.
if нь программд салаа зам нээдэг: нөхцөл True бол шигдсэн бие биелж, False бол бүхэлдээ алгасагдаад программ үндсэн замаараа үргэлжилдэг.
Бүтэц нь: if нөхцөл**:** — асуулт, хоёр цэг, дараа нь дөрвөн зайгаар шигдсэн биеийн мөрүүд; нэг түвшинд шигдсэн дараалсан мөрүүд нэг багц.
== нь "тэнцүү юү?" гэсэн асуулт (= хадгалах үйлдлээс тэс өөр — дараагийн хичээлийн гол сэдэв).
Догол мөр бол Python-д гоо сайхан биш дүрэм: дутвал IndentationError: expected an indented block, илүүдвэл unexpected indent.
if-ийн мөрийн хоёр цэг мартагдвал SyntaxError: expected ':' — Python юу дутууг өөрөө хэлдэг.
Дараагийн хичээлд бид самбар дээрээ бичиж болох асуултуудын бүрэн цуглуулгыг авна: тэнцүү, ялгаатай, их, бага, ба тэдгээрийн хосолсон хэлбэрүүд — харьцуулах операторууд. Тэр дундаа == ба = хоёрын ялгаа — энэ бүлгийн хамгийн олон хүн бүдэрдэг ганц чулуу — бүтэн тайлбараа тэнд авах болно.
Бүртгэлтэй болсноор энэ сургалтын бүх хичээлд хандах эрх авна.