Python / for давталт

for давталт

Нэг ажлыг олон удаа хийх шаардлага програмд байнга гардаг — жагсаалтын бүх элемент дээр үйлдэл хийх, 1-ээс 100 хүртэл тоолох гэх мэт. Үүнд давталт (loop) ашигладаг. Python-ийн for давталт нь ямар нэг дарааллыг (жагсаалт, string, тоо) элемент бүрт нь давтан боловсруулдаг.

Үндсэн бүтэц

python
жимснүүд = ["алим", "гүйлс", "үзэм"]

for жимс in жимснүүд:
    print(жимс)

# алим
# гүйлс
# үзэм

Бүтэц:

  • for — давталт эхлэх түлхүүр үг
  • жимс — одоогийн элементийг хадгалах түр variable
  • in жимснүүд — аль дарааллыг давтах
  • : — блок эхлэх тэмдэг
  • Биелүүлэх код 4 зайгаар догол оруулагдана

range() — тоон давталт

range() функц нь тоон дараалал үүсгэдэг — тоолоход хамгийн их хэрэглэгддэг:

python
# range(төгсгөл) — 0-оос эхэлнэ
for i in range(5):
    print(i)
# 0, 1, 2, 3, 4

# range(эхлэл, төгсгөл)
for i in range(1, 6):
    print(i)
# 1, 2, 3, 4, 5

# range(эхлэл, төгсгөл, алхам)
for i in range(0, 20, 5):
    print(i)
# 0, 5, 10, 15

# Буурах дараалал
for i in range(10, 0, -1):
    print(i)
# 10, 9, 8, ... 1

String дээр давталт

String нь тэмдэгт тус бүрт давтагддаг:

python
үг = "Python"

for тэмдэгт in үг:
    print(тэмдэгт)
# P
# y
# t
# h
# o
# n

# Хэдэн эгшиг байгааг тоолох
эгшиг_тоо = 0
for т in "Улаанбаатар":
    if т in "аэиоуАЭИОУ":
        эгшиг_тоо += 1
print(f"Эгшгийн тоо: {эгшиг_тоо}")

enumerate() — индекстэй давталт

Элементийн утга болон дугаарыг хамт авахад enumerate() ашигладаг:

python
хичээлүүд = ["Python үндэс", "Функцүүд", "Жагсаалт", "Толь бичиг"]

for дугаар, хичээл in enumerate(хичээлүүд, start=1):
    print(f"{дугаар}. {хичээл}")

# 1. Python үндэс
# 2. Функцүүд
# 3. Жагсаалт
# 4. Толь бичиг

break ба continue

break — давталтыг зогсоох

python
тоонууд = [3, 7, 2, 9, 1, 5]

for тоо in тоонууд:
    if тоо == 9:
        print("9 олдлоо — зогслоо")
        break
    print(тоо)

# 3
# 7
# 2
# 9 олдлоо — зогслоо

continue — одоогийн давталтыг алгасах

python
for i in range(1, 11):
    if i % 2 == 0:     # тэгш тоог алгасах
        continue
    print(i)

# 1, 3, 5, 7, 9  — зөвхөн сондгой тоо

Давхар for давталт (nested loop)

python
# Үржвэрийн хүснэгт — 3x3
for мөр in range(1, 4):
    for багана in range(1, 4):
        print(f"{мөр * багана:3}", end="")
    print()

#   1  2  3
#   2  4  6
#   3  6  9

Бодит жишээ — оюутны оноо шинжлэх

python
оюутнууд = [
    {"нэр": "Болд", "оноо": 92},
    {"нэр": "Сарнай", "оноо": 78},
    {"нэр": "Төгс", "оноо": 85},
    {"нэр": "Анар", "оноо": 64},
]

нийт = 0
тэнцсэн = 0

for оюутан in оюутнууд:
    нийт += оюутан["оноо"]
    if оюутан["оноо"] >= 70:
        тэнцсэн += 1
        print(f"✓ {оюутан['нэр']}: {оюутан['оноо']}")
    else:
        print(f"✗ {оюутан['нэр']}: {оюутан['оноо']}")

дундаж = нийт / len(оюутнууд)
print(f"\nДундаж оноо: {дундаж:.1f}")
print(f"Тэнцсэн: {тэнцсэн}/{len(оюутнууд)}")

Гаралт:

код
✓ Болд: 92
✓ Сарнай: 78
✓ Төгс: 85
✗ Анар: 64

Дундаж оноо: 79.8
Тэнцсэн: 3/4

JavaScript-тэй харьцуулбал

javascript
// JavaScript
const fruits = ["алим", "гүйлс", "үзэм"];
for (const fruit of fruits) {
  console.log(fruit);
}

for (let i = 0; i < 5; i++) {
  console.log(i);
}
python
# Python
жимснүүд = ["алим", "гүйлс", "үзэм"]
for жимс in жимснүүд:
    print(жимс)

for i in range(5):
    print(i)

Python-д for...of ба for (i=0; i<n; i++) хоёрыг нэгтгэж for...in ба range() болгосон — илүү товч, уншихад хялбар.

Дараагийн хичээлд:

for давталтыг сайн эзэмшлээ! Дараа нь while давталтыг сурна — нөхцөл хангагдаж байх хугацаанд үргэлжлэн давтадаг, тоо тодорхойгүй давталтад хамгийн тохиромжтой хэрэгсэл.