Ачааллж байна...
Тоонуудынхаа хичээлд бид дөрвөн үндсэн үйлдэлтэй танилцсан: нэмэх (+), хасах (-), үржүүлэх (), хуваах (/). Тэр дөрөв бол сургуулийн математикийн танил нөхөд — Python дээр гагцхүү тэмдэг нь өөр ( ба /) байснаас утга нь адилхан байсан. Өнөөдөр бид тооны үйлдлийн гэр бүлээ гүйцээж, гурван шинэ үйлдэл нэмж авна: бүхэл хуваалт (//), үлдэгдэл (%), зэрэг (**). Эхний хоёр нь таныг гайхшруулж магадгүй: "хуваалт байхад бүхэл хуваалт гэж юунд хэрэгтэй юм бэ? Үлдэгдэл гэж бүр юу вэ?" Гэтэл яг энэ хоёр — ялангуяа % — нь программистын өдөр тутмын хамгийн дуртай багажуудад тооцогддог юм. Хичээлийн төгсгөлд та учрыг нь ойлгоод зогсохгүй, өөрөө хэрэглэж чаддаг болсон байх болно.
Нэг зүйлийг эхэнд нь тайвшруулж хэлье: энэ хичээл "математикийн хичээл" биш. Бүлэг 1-д амласнаа саная — энэ сургалтад гүнзгий математик хэрэггүй. Өнөөдрийн гурван шинэ үйлдлийн цаана буй "математик" нь бага ангийн үлдэгдэлтэй хуваалт, аравны зэрэг хоёроос хэтрэхгүй. Шинэ зүйл нь тоо бодох арга биш — эдгээр энгийн үйлдлүүд программд ямар гайхалтай ажил хийдэг гэдгийг харах явдал юм.
Шинэ рүү орохын өмнө хуучнаа нэг мөрөнд эмхэлье:
python
print(7 + 3)
print(7 - 3)
print(7 * 3)
print(7 / 3)Үр дүн:
10
4
21
2.3333333333333335Эхний гурав нь int орцоос int гаргадаг, харин / үргэлж float өгдөг гэдгийг та мэднэ — сүүлийн мөрөнд бас нэг танил зочин байна: float-ын "төгс биш" зан (төгсгөлийн ...35 нь 0.1 + 0.2-ын хичээлийн ах дүү үзэгдэл). Энд шинэ мэдлэг байхгүй — харин 7 / 3-ын энэ урт бутархай хариу нь өнөөдрийн эхний шинэ үйлдлийн гарах гарц болно: заримдаа бидэнд бутархай хариу огт хэрэггүй байдаг юм.
Амьдралын нэг нөхцөл байдлаас эхэлье. Танд 7 ширхэг чихэр байна, 3 хүүхдэд тэнцүү хуваана. Тооны машин 7 / 3 = 2.333... гэж хэлнэ — гэтэл хүүхдэд "хоёр бүхэл гурван аравны гурван чихэр" өгч болохгүй биз дээ: чихэр бол ширхэгийн ертөнцийн иргэн. Бодит хариулт нь: хүүхэд бүрд 2 чихэр оногдоно (нэг нь үлдэнэ — түүнийг дараагийн хэсэгт хөндөнө). Энэ "хэдэн бүхэл удаа багтах вэ" гэсэн асуултыг Python-д // (хоёр налуу зураас дараалсан) үйлдэл хариулдаг:
python
print(7 // 3)Үр дүн:
2Мөрөө уншъя: 7-д 3 хэдэн бүхэл удаа багтах вэ — 2 удаа. Бутархай хэсэг таслагдаж хаягддаг (бөөрөнхийлөгддөггүй гэдгийг анзаараарай: 2.9 гарах байсан ч // нь 2 л өгнө — "гурав дахь бүтэн удаа багтаагүй л бол багтаагүй"). Хоёр int орцтой үед хариу нь int гардаг нь бас нэг тав тух: / -ын хариуг өмнөх хичээлүүдэд "float саванд" авдаг байсан бол // ширхэгийн ертөнцөд ширхэгийн хариу өгдөг. Хэрэглээ нь хаа сайгүй: 25 сурагчийг 4-ийн багуудад хуваахад хэдэн бүтэн баг гарах вэ (25 // 4 = 6), 100 төгрөгөөр 30 төгрөгийн чихэр хэдийг авч чадах вэ (100 // 30 = 3), 200 минут хэдэн бүтэн цаг вэ (200 // 60 = 3).
Одоо чихрийн бодлогынхоо "үлдсэн нэгийг" эргэж авъя. 7 чихрийг 3 хүүхдэд 2, 2-оор тараахад 6 нь тарагдаад 1 үлдэнэ. Энэ "үлдэгдлийг" олдог үйлдэл нь % (хувийн тэмдэг — гэхдээ энд хувьтай ямар ч хамаагүй, зүгээр л энэ тэмдгийг сонгосон түүхтэй):
python
print(7 % 3)Үр дүн:
1// ба % нь нэг бодлогын хоёр тал юм: 7-г 3-т хуваахад 2 удаа багтаад (7 // 3), 1 үлдэнэ (7 % 3). Бага ангийн "үлдэгдэлтэй хуваалт" яг энэ — зөвхөн хоёр хариултыг нь Python хоёр тусдаа үйлдлээр өгдөг. Хэдэн жишээгээр гараа дасгая:
python
print(10 % 3)
print(12 % 4)
print(5 % 7)Үр дүн:
1
0
5Гурвууланг нь мөшгье. 10 % 3: 3 нь 10-д гурван удаа багтаад (9 болоод) 1 үлдэнэ. 12 % 4: 4 нь 12-т яг гурван удаа багтаад юу ч үлдэхгүй — 0. Энэ "үлдэгдэл 0" гэдэг хариу дор бүр том ач холбогдолтой болно. 5 % 7: 7 нь 5-д нэг ч удаа багтахгүй тул 5 бүхэлдээ "үлдэгдэл" — хариу 5. Сүүлийнх нь эхэндээ сонин санагдаж болох ч чихрээр бодоход ойлгомжтой: 5 чихрийг 7 хүүхдэд бүтнээр тараах аргагүй тул хэнд ч юу ч өгөлгүй 5-уулаа үлдэнэ.
Тэгвэл энэ үлдэгдэл юунд ийм эрхэм хэрэгтэй юм бэ? Хоёр том хэрэглээг нь үзүүлье.
Хэрэглээ нэг: цагийн тоолол. Одоо цаг 21:00 гэж бодъё. 5 цагийн дараа хэд болох вэ? 21 + 5 = 26 — гэтэл "26 цаг" гэж байдаггүй: хоног 24-өөс хэтрэхээр тоолол эхнээсээ эргэдэг тул зөв хариулт нь 02:00. Энэ "хэтрэхээрээ эхнээсээ эргэдэг" тооллыг яг % хийдэг:
python
print((21 + 5) % 24)Үр дүн:
226-г 24-т хуваахад нэг удаа багтаад үлдэгдэл нь 2 — шинэ цаг. Долоо хоногийн өдрүүд (7-оор эргэдэг), сарын өдрүүд, тойрог замаар гүйдэг тоглоомын дүр — "тойроод эхэндээ ирдэг" бүх тоололд % ажилладаг. Цагийг харахад л % таны нүдэнд харагддаг болсон бол энэ хэсгийг ойлгосон гэсэн үг.
Хэрэглээ хоёр: тэгш, сондгойг ялгах. Ямар ч тоог 2-т хуваахад үлдэгдэл нь зөвхөн 0 эсвэл 1 байна: тэгш тоо бол 0 (яг таг хуваагддаг), сондгой бол 1. Тиймээс:
python
print(10 % 2)
print(7 % 2)Үр дүн:
0
1"Үлдэгдэл нь 0 юу?" гэсэн асуулт "энэ тоо тэгш үү?" гэсэн асуултын хариу болж хувирлаа. Одоохондоо энэ ажиглалт "сонин юм" төдий санагдаж болно — гэвч дараагийн бүлэгт программ маань асуулт асууж шийдвэр гаргаж сурмагц энэ хэв маяг (тоо % ямарнэгтоо == 0 буюу "яг хуваагддаг уу?") таны байнгын хэрэглээний багаж болно: тэгш-сондгой, гурав дахь бүрийг ялгах, тав хуваагддагийг шүүх — бүгд нэг л % дээр тогтдог.
Гурав дахь шинэ үйлдэл нь хамгийн энгийн нь: ** (хоёр од дараалсан) нь зэрэг дэвшүүлэх буюу "тоог өөрөөр нь удаа дараа үржүүлэх" үйлдэл юм:
python
print(2 ** 3)
print(10 ** 2)Үр дүн:
8
100Хүлээгээрэй — үр дүнд гурван мөр байх ёсгүй, хоёр мөр байх ёстой: 8 ба 100. (Дээрх блокт 9 гэсэн илүүц мөр орсныг үл харгалзана уу — зөв үр дүн нь 8 ба 100.) 2 3 гэдэг нь 2-ыг гурав дахин өөрөөр нь үржүүлэх: 2 × 2 × 2 = 8. 10 2 нь 10 × 10 = 100. Анхааруулах гол зүйл нь бичиглэл: хоёр од хоорондоо зайгүй наалдана — учир нь энэ хоёр од нэг үйлдлийн тэмдэг юм; салгавал (2 * 3) Python хоёр тусдаа үржүүлэх тэмдэг гэж ойлгоод SyntaxError өгнө. Зэргийн хэрэглээ өдөр тутамд //, %-аас ховор ч, квадрат талбай бодох (tal * 2), хоёрын зэргүүд (компьютерын ертөнцөд 2 ** 10 = 1024 гэх мэт тоонууд байнга тааралддаг) зэрэгт хэрэг болно.
Хүсвэл туршаад үзээрэй: өөрийн насаа 7-д хуваасан бүхэл хариу ба үлдэгдлийг хоёуланг нь хэвлээд, (нас // 7) 7 + (нас % 7) гэж бодоход яг нас чинь буцаж гардагийг шалгаарай — "багтсан нь дээрээ үлдсэнээ нэмэхэд бүтэн эргэж ирдэг" нь // ба %-ын хамтын ажиллагааны баталгаа юм. Сонирхвол 2 * 100 гэж хэвлээд үзээрэй — Python ямар ч том бүхэл тоог зовниолгүй тоолж чаддагийг нүдээрээ үзэх болно.
Алдаа 1: / ба //-г андуурах. Хамгийн түгээмэл нь алдааны мэдэгдэлгүй хувилбар:
python
sav = 7 // 2
print(sav)Үр дүн:
3Программист 3.5 хүлээж байсан бол — тэр / гэх ёстой байжээ; 3 хүлээж байсан бол бүх зүйл зөв. Хоёр үйлдэл хоёулаа "хуваалт" тул нүд алдах нь амархан: нэг зураас — жинхэнэ хуваалт, float хариу; хоёр зураас — бүхэл хуваалт, таслагдсан хариу. Хариу чинь "яг таг дугуй" гарч эргэлзүүлбэл эхлээд зураасаа тоол. Урвуу төөрөгдөл нь бас амьдардаг: тоолуур, ширхэг бодож байгаа газар / хэрэглэчихээд хариу нь 3.0 маягийн "сүүлтэй" гарч гайхах — ширхэгийн бодлогод // зохино.
Алдаа 2: Тэгд хуваахын гурван нүүр. Тэг хуваарьт / зогсдогийг та мэднэ — шинэ хоёр үйлдэл маань ч мөн адил:
python
print(7 % 0)Python:
ZeroDivisionError: integer modulo by zeroОрчуулбал: "бүхэл тооны үлдэгдэл олохдоо тэгд хуваалаа." Мэдэгдлийн үг өөр (division гэхийн оронд modulo — үлдэгдэл үйлдлийн албан нэр) боловч ZeroDivisionError гэр бүл нь нэг: % бол мөн чанартаа хуваалт тул тэг хуваарийг тэвчдэггүй. 7 // 0 ч мөн ижил төрлийн алдаа өгнө. Танигдах ганц дүрэм: хуваарь нь 0 болж болзошгүй газарт / ч бай, // ч бай, % ч бай — бүгд нэг эрсдэлтэй. Хамгаалах арга нь Бүлэг 6-гийн шийдвэр гаргалт (хуваахаасаа өмнө шалгах) болон Бүлэг 11-ийн аюулгүйн тор байх болно — хоёулаа замдаа хүлээж байгаа.
Алдаа 3: Үйлдлийн дарааллыг мартах. Python сургуулийн математикийн адил үйлдлийн дараалал баримталдаг — үржүүлэх, хуваах нь нэмэх, хасахаас түрүүлдэг:
python
print(2 + 3 * 4)Үр дүн:
14"Зүүнээс баруун тийш" гэж уншсан хүн 20 хүлээнэ (2+3=5, 5×4=20) — гэвч Python эхлээд 3 4 = 12-оо бодоод дараа нь 2-ыг нэмж 14 гаргадаг. Шинэ үйлдлүүд ч энэ шатлалд байр сууриа эзэлдэг (* хамгийн түрүүнд, дараа нь / // %, эцэст нь + -) — гэхдээ энэ шатлалыг цээжлэх шаардлага байхгүй: хаалт хэрэглэ. (2 + 3) 4 гэж бичвэл хүссэн 20-оо гарцаагүй авна — хаалтан доторх эхэлж бодогддог гэдгийг та Бүлэг 3-аас мэднэ. Программистуудын дадал ч яг ийм: дараалал нь өчүүхэн ч эргэлзээ төрүүлж болзошгүй илэрхийлэлд хаалт тавьж санаагаа ил бичдэг — хаалт бол уншигчид зориулсан "би яг ингэж бодуулах санаатай" гэсэн тэмдэглэл юм.
Python-ы тоон үйлдлүүд долоо: + - / гэсэн танил дөрөв, дээр нь // (бүхэл хуваалт), % (үлдэгдэл), * (зэрэг).
// нь "хэдэн бүхэл удаа багтах вэ" — бутархайг таслаад хаядаг; ширхэгийн бодлогод / биш // зохино.
% нь "хуваагаад юу үлдэх вэ" — цагийн эргэдэг тоолол, тэгш-сондгой ялгалт зэрэг "тойрдог, шүүдэг" бүх бодлогын багаж; x % y == 0 бол "яг хуваагддаг" гэсэн үг.
нь зэрэг: 2 3 = 8; хоёр од зайгүй наалдана.
% ба // ч тэг хуваарьт ZeroDivisionError өгнө; үйлдлийн дараалалд эргэлзвэл хаалтаар санаагаа ил бич.
Дараагийн хичээл бол энэ бүлгийн оргил бөгөөд таны программуудын амьдралын шинэ эрин: input() — хэрэглэгчээс мэдээлэл авах. Өдийг хүртэл таны программууд өөрсдийнхөө "мэддэгийг" л ажиллуулдаг байсан бол тэндээс хойш хэрэглэгчтэйгээ ярилцдаг болно — тэгээд яг тэр ярианы дундаас энэ бүлгийн бүх төрлийн мэдлэг чинь (ялангуяа "5" ба 5-ын ялгаа) гэнэт амин чухал болж босч ирэх болно.
Бүртгэлтэй болсноор энэ сургалтын бүх хичээлд хандах эрх авна.