Ачааллж байна...
Өнөөдрийн хичээл онцгой төрлийн баяртай өдөр. Бүлэг 6-гийн төгсгөлд бид Тоо таах тоглоом барьж байхдаа нэг шударга тохиролцоо хийсэн: "тоглогч ганцхан удаа таана — олон оролдлоготой болгоход давталт хэрэгтэй бөгөөд бид Бүлэг 7-д энэ тоглоомдоо эргэж ирнэ." Тэр өдөр ирлээ. Та одоо while, break, тоолуур гурвыг гартаа барьчихсан байгаа — өнөөдөр бид хуучин тоглоомоо нээгээд, шинэ мэдлэгээ дээр нь угсарч, түүнийг жинхэнэ тоглоом болгоно: тоглогч онотлоо таасаар байх бөгөөд онсон үед нь программ хэдэн оролдлого зарцуулснаа хэлж өгнө.
Энэ мөчийг зориуд тодотгоё, учир нь энд программчлалын нэг гүн үнэн нуугдаж байна: программист хүний ажил ихэвчлэн шинийг бүтээх биш — байгаагаа сайжруулах байдаг. Дэлхийн бүх том программ яг ингэж өссөн: жижиг ажилладаг хувилбар → шинэ чадвар нэмэх → дахин нэмэх. Таны хоёр бүлгийн өмнө бичсэн 12 мөр өнөөдөр "хуучирсан хог" биш — суурь нь: бид түүнийг хаяхгүй, мөр мөрөөр нь дахин ашиглана. Шинэ мэдлэг хуучин бүтээлээ үнэгүйдүүлдэггүй, харин өсгөдөг гэдгийг өнөөдөр та гараараа мэдрэх болно. Ажлын горим маань танил: би тайлбарлаж бичнэ, та дагаж бичээд заасан цэгүүдэд ажиллуулж шалгана — даалгавар биш, хамтын барилга.
VS Code дээрээ too_taah.py файлаа нээгээрэй — Бүлэг 6-гийн бүрэн хувилбар дотор нь байгаа:
python
# Тоо таах тоглоом — нэг удаагийн хувилбар
nuuts_too = 7
print("Би 1-ээс 10-ын хооронд нэг тоо бодлоо")
taamag = int(input("Таамгаа хэлээрэй: "))
if taamag == nuuts_too:
print("Оноов! Та мундаг таагч байна")
elif taamag > nuuts_too:
print("Их байна — миний тоо үүнээс бага")
else:
print("Бага байна — миний тоо үүнээс их")
print("Тоглосонд баярлалаа!")(Хэрэв файл олдохгүй бол дээрхийг шинээр бичихэд болно — хоёр минутын ажил.) Шинэчлэхийн өмнө "юуг өөрчлөх вэ" гэдгээ инженер хүн шиг тодорхойлъё. Тоглоомын юу нь хэвээр үлдэх вэ: нууц тоо, зарлалын мөр, таамаг авах мөр, гурван замт шүүлт, үдэлт — үнэндээ бүгд үлддэг. Юу нэмэгдэх вэ: (1) таамаг авах + шүүх хэсэг давтагддаг болно — онотол; (2) оролдлогын тоолуур. Өөрчлөлтийн зураг маань ийм тодорхой болохоор барилга маань хурдан явна.
Гол шийдвэрээс эхэлье: аль давталтыг сонгох вэ? Дүрмээ саная — давталтын тоо урьдчилан мэдэгдэж байвал for, нөхцөлөөр дуусах бол while. Тоглогч хэдэн оролдлогоор онохыг хэн ч мэдэхгүй, давталт "оносон үед" дуусна — нөхцөлөөр. While. Тэгвэл ямар while? Өмнөх хичээлд танилцсан хамгийн цэвэрхэн хэв маяг энд яг таарна: while True + break — "онотлоо мөнхөд эргэлд, онолт нь break-ээр гарна." Файлаа ингэж өөрчилье (өөрчлөгдсөн хэсэг нь: таамаг авахаас эхлээд шүүлт хүртэлх хэсэг while True-гийн биед орж, нэг шат дотогш шигдэнэ; онолтын салаанд break нэмэгдэнэ):
python
# Тоо таах тоглоом — онотол таадаг хувилбар
nuuts_too = 7
print("Би 1-ээс 10-ын хооронд нэг тоо бодлоо")
while True:
taamag = int(input("Таамгаа хэлээрэй: "))
if taamag == nuuts_too:
print("Оноов! Та мундаг таагч байна")
break
elif taamag > nuuts_too:
print("Их байна — миний тоо үүнээс бага")
else:
print("Бага байна — миний тоо үүнээс их")
print("Тоглосонд баярлалаа!")Өөрчлөлтүүдийг нэг бүрчлэн ярья. while True: мөр таамаг авахын өмнө орж ирлээ — "дараах багцыг дахин дахин хий." Шигдэлтийн шилжилт — энэ бол өнөөдрийн барилгын хамгийн "гар шаардсан" ажил: input-ын мөр, if/elif/else бүхэлдээ while-ын биед орсон тул бүгд нэг шатаар дотогшилсон: input болон if/elif/else толгойнууд нэг шат (4 зай), тэдгээрийн биеийн print/break хоёр шат (8 зай) дээр очив. VS Code дээр олон мөрийг зэрэг шигдүүлэх арга: мөрүүдээ идэвхжүүлээд (хулганаар бүгдийг нь будаад) Tab дар — бүгд нэг шат дотогшилно (буцаах нь Shift+Tab). break онолтын салаанд орлоо: оносон мөчид магтаалын мөр хэвлэгдээд, давталт бүрмөсөн хаагдаж, шигдээгүй үдэлтийн мөрөнд очно. Их/бага салаанууд break-гүй гэдгийг ажигла: тэдгээрийн дараа биеийн төгсгөлд хүрмэгц while True толгой руугаа эргэж, дахин таамаг асууна — чиглүүлэгтэй хариултууд маань ("их байна — миний тоо үүнээс бага") Бүлэг 6-д "ирээдүйд утгаа олно" гэж амлаж байсан шүү дээ: одоо тоглогч тэр чиглүүлгээр таамгаа шат шатаар нарийсгах боломжтой боллоо.
Ажиллуулж шалгая. Run дараад зориуд хэд дахин алдаж, дараа нь оноорой:
Би 1-ээс 10-ын хооронд нэг тоо бодлоо
Таамгаа хэлээрэй: 5
Бага байна — миний тоо үүнээс их
Таамгаа хэлээрэй: 9
Их байна — миний тоо үүнээс бага
Таамгаа хэлээрэй: 7
Оноов! Та мундаг таагч байна
Тоглосонд баярлалаа!Тоглоом "амьд" боллоо — асуулт дахин дахин ирж, онолтод зогсож байна. Хоёр бүлгийн ялгааг мэдэрч байна уу: яг ижил шүүлтийн тархи — зөвхөн давталтын хүрээнд орсноор тоглоом болж хувирав.
Одоо хоёр дахь шинэчлэл. Тоглогчид "5 оролдлогоор онолоо" гэж хэлэх нь тоглоомд өрсөлдөөний амт нэмдэг — гэр бүлээрээ "хэн цөөн оролдлогоор онох вэ" гэж уралдаж болно шүү дээ. Тоолуурын хэв маягаа саная — гурван хэсэгтэй: эхлүүлэлт (давталтын өмнө), өсгөлт (биеийн дотор), хэрэглээ (хэрэгтэй цэг дээрээ). Гурвууланг нь суулгая:
python
# Тоо таах тоглоом — онотол таадаг хувилбар
nuuts_too = 7
oroldlogo = 0
print("Би 1-ээс 10-ын хооронд нэг тоо бодлоо")
while True:
taamag = int(input("Таамгаа хэлээрэй: "))
oroldlogo = oroldlogo + 1
if taamag == nuuts_too:
print("Оноов! Та", oroldlogo, "оролдлогоор таалаа")
break
elif taamag > nuuts_too:
print("Их байна — миний тоо үүнээс бага")
else:
print("Бага байна — миний тоо үүнээс их")
print("Тоглосонд баярлалаа!")Гурван шинэ зүйлээ мөшгье. oroldlogo = 0 — эхлүүлэлт, давталтын гадна: биед нь тавьчихвал тойрог бүрд 0 болж "мартагдана" (энэ бол тоолуурын сонгодог урхи — эхлүүлэлт давталтын дотор орчихсон тоолуур үргэлж 1 гэж хариулдаг). oroldlogo = oroldlogo + 1 — Бүлэг 4-ийн "оньсого мөр" маань жинхэнэ гэртээ орлоо: таамаг авсны яг дараа байрлаж байгаа нь "асуусан бүр — нэг оролдлого" гэсэн утга. Онолтын мөр өөрчлөгдөв: print("Оноов! Та", oroldlogo, "оролдлогоор таалаа") — таслалт хэлбэрийг сонгосон нь (Бүлэг 5-ын төгсгөлд танилцуулсан) int-ийг str() дугтуйлалтгүйгээр шууд хэвлэх боломж: таслал төрөл холихыг зөвшөөрч, зай нь өөрөө тавигддаг.
Ажиллуулж шалгая. Гурван оролдлогоор оновол:
Таамгаа хэлээрэй: 7
Оноов! Та 3 оролдлогоор таалаа
Тоглосонд баярлалаа!Нэг чанарын шалгалт нэмж хийгээрэй — хилийн тохиолдол: эхний оролдлогоороо шууд оночихвол "Та 1 оролдлогоор таалаа" гэж гарч байна уу? (Тоолуурын өсгөлт if-ээс өмнө байгаа учраас гарна — өсгөлтийг if-ийн дараа тавьсан бол эхний онолт "0 оролдлого" гэж гарах байсан: мөрийн байрлал бол утга гэдгийн бас нэг жишээ.)
Дээрх код бол аль хэдийн эцсийн хувилбар — дахин нэг бүтнээр нь харцгаая, энэ удаад "археологийн" нүдээр: мөр бүрийн хажууд аль бүлгийн мэдлэг ажиллаж байгааг тэмдэглэе (эдгээр comment-ыг файлдаа хуулах шаардлагагүй — энэ бол уншлагын зураглал):
python
# Тоо таах тоглоом — онотол таадаг хувилбар
nuuts_too = 7 # Бүлэг 4: variable
oroldlogo = 0 # Бүлэг 4: тоолуурын эхлүүлэлт
print("Би 1-ээс 10-ын хооронд нэг тоо бодлоо") # Бүлэг 3: print
while True: # Бүлэг 7: зориудын төгсгөлгүй давталт
taamag = int(input("Таамгаа хэлээрэй: ")) # Бүлэг 5: input + int
oroldlogo = oroldlogo + 1 # Бүлэг 4: оньсого мөр
if taamag == nuuts_too: # Бүлэг 6: шүүлт
print("Оноов! Та", oroldlogo, "оролдлогоор таалаа")
break # Бүлэг 7: гарах хаалга
elif taamag > nuuts_too:
print("Их байна — миний тоо үүнээс бага")
else:
print("Бага байна — миний тоо үүнээс их")
print("Тоглосонд баярлалаа!") # үндсэн замын үдэлтАрван зургаан мөр — таны бүх аяллын толь: долоон бүлгийн мэдлэг нэг жижиг тоглоомд мөр мөргүй ажиллаж байна. Бүлэг 6-гийн хувилбараа устгалгүй хадгалж үлдээхийг зөвлөе (файлаа too_taah_v2.py гэж шинэ нэрээр хадгалж болно — File цэсний Save As) — хоёр хувилбараа зэрэгцүүлж харах нь өөрийн өсөлтийг хэмждэг шугам болно. Мөн нэг өр үлдэж байгааг тэмдэглэе: нууц тоо кодонд бичээстэй хэвээр — кодоо харсан хүн хариуг мэднэ. Жинхэнэ "таагдашгүй" болгох random багаж Бүлэг 13-т хүлээж байгаа бөгөөд бид энэ тоглоомдоо гурав дахь удаагаа эргэж ирнэ: тэр үед энэ файл чинь бэлэн байх учиртай.
Бүгд сайн дурын — алгассан ч дараагийн хичээлүүдэд саадгүй.
Нэг: Оролдлогын дээд хязгаар. "Хамгийн ихдээ 5 оролдлого" гэсэн дүрэм нэмж үзээрэй: тоолуурын өсгөлтийн дараа if oroldlogo >= 5: гэсэн шинэ салаа нэмээд "Оролдлого дууслаа! Миний тоо" гэж нууцаа дэлгээд break хийвэл — тоглоом "ялагдал"-тай боллоо. (Энэ салааг хаана байрлуулах вэ — онолтын шалгалтын өмнө үү, хойно уу? Хойно нь: тав дахь оролдлогоороо онссон хүн ялагдахгүй байх ёстой — дарааллын сургамжаа энд өөрөө хэрэглэж үзээрэй.)
Хоёр: Хүрээний шалгалт continue-тэй. Бүлэг 6-гийн өргөтгөлд санал болгосон "1-10-ын гаднах таамгийг" энэ удаад continue-ээр шийдээрэй: input-ын дараа if taamag < 1 or taamag > 10: гээд анхааруулга хэвлээд continue — гэхдээ нэг нарийн асуулт: энэ шалгалт тоолуурын өсгөлтийн өмнө үү, хойно уу байх ёстой вэ? ("Хүрээний гаднах таамаг оролдлогод тооцогдох уу" гэдгийг тоглоомын дизайнер та өөрөө шийд — хоёр хувилбар хоёулаа "зөв", гэхдээ байрлал нь шийдвэрээ дагах ёстой: өмнөх хичээлийн нэвтрэлтийн жишээг эргэж хараарай.)
Гурав: Дахин тоглох уу? Тоглоом дуусмагц "Дахин тоглох уу? (тийм/үгүй)" гэж асуугаад, тийм бол бүх тоглоомыг эхнээс нь эхлүүлдэг болгож үзээрэй — үүнд давталт дотор давталт хэрэгтэй болно: гаднах while True нь "тоглолт бүр", доторх while True нь "таамаг бүр". Энэ бол өмнөх хичээлийн "break = нэг давхарга" сануулгыг амьдаар шалгах туршилт: доторх break таамгийн давталтаас л гаргана, тоглолтын давталт үргэлжилнэ. Давхар давталт жаахан толгой эргүүлбэл — хэвийн: Бүлэг 10-т бид түүнийг ёсоор нь үзнэ, энэ бол зүгээр л урьдчилсан амталгаа.
Та анхны "сайжруулалтын" төслөө хийлээ: ажиллаж байсан программ дээр шинэ чадвар угсрах — программистын өдөр тутмын жинхэнэ ажил.
Онотол таалгах = while True + break: шүүлтийн тархи хэвээрээ, зөвхөн давталтын хүрээнд орж, онолтын салаанд break нэмэгдсэн.
Олон мөрийг зэрэг шигдүүлэх: идэвхжүүлээд Tab (буцаах нь Shift+Tab) — бүтцийн өөрчлөлтийн гол гар ажиллагаа.
Тоолуурын гурван хэсгийн байрлал бол утга: эхлүүлэлт давталтын гадна, өсгөлт "тоолох үйл явдлын" яг ард, хэрэглээ хэрэгтэй цэг дээрээ.
Энэ тоглоом Бүлэг 13-т (random) гурав дахь шинэчлэлээ хүлээж байна — файлаа хадгалж үлдээ.
Ингээд Давталтын бүлэг өндөрлөлөө. Дараагийн бүлэг Түвшин 2-ын хоёр дахь том материал руу орно: function — кодоо нэр өгч "багцлаад", хэрэгтэй үедээ нэрээр нь дуудаж ажиллуулдаг чадвар. Та үнэндээ function-уудтай анхны хичээлээсээ хойш өдөр бүр ажиллаж ирсэн — print(), input(), int(), type(), range() бүгд function — одоо тэдний "ард талд" орж, өөрийн гараар function бүтээж сурна.
Бүртгэлтэй болсноор энэ сургалтын бүх хичээлд хандах эрх авна.