Оногдуулах мэдэгдлийн нийтлэг загвар нь хувьсагчийн шинэ утга нь хуучнаасаа хамаарах хувьсагчийг шинэчилдэг оногдуулах мэдэгдэл юм:
x = x + 1
Энэ нь "х-ийн одоогийн утгыг авч, 1-ийг нэмээд x-г шинэ утгаар шинэчилнэ" гэсэн үг юм.
Хэрэв та байхгүй хувьсагчийг шинэчлэх гэж оролдвол Python нь x-д утга өгөхөөс өмнө баруун талыг үнэлдэг тул алдаа гарна.
>>> x = x + 1
NameError: name 'x' is not defined
Хувьсагчийг шинэчлэхийн өмнө та үүнийг ихэвчлэн энгийн даалгавартайгаар эхлүүлэх хэрэгтэй:
>>> x = 0
>>> x = x + 1
1-ийг нэмэх замаар хувьсагчийг шинэчлэхийг increment нэмэгдэл гэж нэрлэдэг; 1-ийг хасахыг decrement бууралт гэнэ.
Компьютерүүд ихэвчлэн давтагдах даалгаврыг автоматжуулахад ашиглагддаг. Адил төстэй даалгаврыг алдаагүйгээр давтах нь компьютерийн сайн хийдэг, харин хүний муу хийдэг зүйл юм. Давталт нь маш түгээмэл учраас Python үүнийг хялбар болгох олон функцүүдийг агуулдаг.
"Python дахь давталтын нэг хэлбэр бол while мэдэгдэл юм. Энд тавын тоог буурах дарааллаар тоолж, дараа нь "Blastoff!" гэж хэлэх энгийн програм байна.
n = 5
while n > 0:
print(n)
n = n - 1
print('Blastoff!')
While мэдэгдлийг та бараг англи хэл шиг уншиж болно. Энэ нь "n тоо 0-ээс их байх үед n-ийн утгыг харуул, дараа нь n-ийн утгыг 1-ээр бууруул. 0-д хүрэхэд while мэдэгдлээс гарч 'Blastoff!' гэдэг үгийг харуул" гэсэн утгатай.
Илүү албан ёсоор while loop-ийн гүйцэтгэлийн үйл явцыг энд харуулав:
Догол мөрөнд бичигдсэн бүх ĸод нь while-ын body юм.
Гурав дахь алхам нь дээд тал руугаа буцааж явуулдаг тул энэ төрлийн урсгалыг loop (гогцоо) гэж нэрлэдэг. Бид loop-ийн body-ийг гүйцэтгэх бүрийг iteration (давталт) гэж нэрлэдэг.
Давталтын body нь нэг буюу хэд хэдэн нөхцөлдүүлэгч хувьсагчийн утгыг өөрчлөх ёстой бөгөөд ингэснээр нөхцөл нь худал болж, давталт дуусгавар болно.Дээрх тохиолдолд n хувьсагч while-ыг true эсвэл false болгодог нөхцөлдүүлэгч хувьсагч юм. body биелэгдэх бүрт n=n-1 гэж хувьсагчаа өөрчилж байснаар n > 0 нөхцөлрүү ойртуулсаар байгааг ойлсосон байх.
Хэрэв давталтын хувьсагч байхгүй бол давталт үүрд давтагдах бөгөөд төгсгөлгүй давталт үүснэ.
Заримдаа та body нь хэдэн удаа биелэгдэх ёстойг мэддэхгүй тохиолдол гарна. Энэ тохиолдолд та infinite loop (хязгааргүй, дуусашгүй, төгсгөлгүй үргэлжлэх давталт) зориудаар бичиж, дараа нь давталтаас үсэрч гарахын тулд break мэдэндлийг ашиглаж болно.
example:
while True:
line = input('> ')
if line == 'done':
break
print(line)
print('The End!')
return:
> hello there
hello there
> finished
finished
> done
The End!
infinite loop бичих ийм арга нь нийтлэг байдаг, учир нь та нөхцөлийг давталтын аль ч хэсэгт
шалгаж болно(зөвхөн дээд талд нь биш), мөн зогсолтын нөхцөлийг "энэ нөхцөл бүрдээгүй бол
үргэлжлүүл" хэмээн сөрөг байдлаар илэрхийлэхээс илүүтэй "энэ нөхцөл бүрдвэл зогсоох" гэх нь
илүү тохиромжтой үе байдаг.
Гэхдээ infinite loop-ыг үүсгэхдээ маш болгоомжтой хэрэглэх
хэрэгтэй, давталтаас гарах нөхцөл зааж өгөөгүй тохиолдолд ĸомпьютерийг зогсолтгүй мөнхийн
ачаалж улмаар гацаах аюултай.
Заримдаа та loop давталтад байх үедээ одоогийн давталтыг дуусгаад дараагийн давталт руу шууд шилжихийг хүсдэг. Энэ тохиолдолд та одоогийн давталтын гол хэсгийг дуусгахгүйгээр дараагийн давталт руу шилжихийн тулд continue мэдэгдлийг ашиглаж болно.
Хэрэглэгч "done" гэж бичих хүртэл оролтыг хуулж авдаг давталтын жишээг эндээс харж болно, гэхдээ # тэмдэгтээр эхэлсэн бол мөрүүдийг хэвлэхгүй алгасдаг болгосон байна:
example:
while True:
line = input('> ')
if line[0] == '#':
continue
if line == 'done':
break
print(line)
print('The End!')
return:
> hello there
hello there
> # don't print this
> print this!
print this!
> done
The End!
Заримдаа бид үгсийн жагсаалт, файлын мөр, тоонуудын жагсаалт зэрэг олон зүйлд хандахдаа давталтыг ашиглах шаардлагатай болно. Бид давтагдах зүйлсийн жагсаалттай бол for мэдэгдлийг ашиглан definitte (тодорхой) loop үүсгэж болно. Бид while мэдэгдлийг indefinite (тодорхойгүй) давталт гэж нэрлэдэг, учир нь энэ нь зүгээр л ямар нэг нөхцөл худал болох хүртэл давтагддаг, харин for loop нь мэдэгдэж буй утгатай тэнцүү тоотой давтагддаг.
For давталтын бичиглэл нь while давталттай төстэй бөгөөд for мэдэгдэл болон давталтын их бие гэсэн хэсгүүдтэй:
friends = ['Joseph', 'Glenn', 'Sally']
for friend in friends:
print('Happy New Year:', friend)
print('Done!')
Python-ы хувьд friends хувьсагч нь гурван текстээс бүрдсэн жагсаалт бөгөөд for давталт нь жагсаалтаар явж, жагсаалт дахь гурван текст тус бүрийн хувьд их биеийг нэг удаа гүйцэтгэнэ. Үүний үр дүнд дараах гаралт үүснэ:
Happy New Year: Joseph
Happy New Year: Glenn
Happy New Year: Sally
Done!
Тодруулбал, friend нь for loop-ын давталтын хувьсагч нь юм. friend хувьсагч нь давталт бүрт өөрчлөгдөж, for loop дууссан эсэхийг хянадаг. Давталтын хувьсагч нь friends хувьсагч дотор хадгалагдсан гурван string мөр болгон дээгүүр дараалан гүйдэг гэж ойлгож болно.
Бид ихэвчлэн for эсвэл while давталтыг ашиглан элементүүдийн жагсаалт эсвэл файлын агуулгаар явж, уншиж байгаа өгөгдлийн хамгийн их эсвэл хамгийн бага утга гэх мэт зүйлийг хайдаг.
Эдгээр давталтууд ерөнхийдөө дараах байдлаар бүтээгддэг:
жагсаалтад хэдэн зүйл байгааг тоолохын тулд бид дараахь for loop үүсгэе:
count = 0
for element in [3, 41, 12, 9, 74, 15]:
count = count + 1
print('Count: ', count)
Бид loop эхлэхээс өмнө нийт тоог агуулах тоолуурын хувьсагчийн утгыг тэг болгож зарласан. Дараа нь тоонуудын жагсаалтад орохын тулд for loop бичихдээ давталтын хувьсагчийг element гэж нэрлэсэн бөгөөд энэ element хувьсагчийг өөрийг нь шууд ашигладахгүй байгаа ч энэ нь давталтыг удирдаж, жагсаалтад байгаа утгууд тус бүрийн хувьд давталтын биеийг нэг удаа гүйцэтгэхэд ашиглаж байгаа хэрэг юм.
count = 0
for element in [3, 41, 12, 9, 74, 15]:
count = count + 1
print('Count: ', count)
Өөрөөр хэлбэл element байх болгонд count хувьсагчийг 1-ээр нэмэгдүүлж байна.
Тэгвэл жагсаалтад байгаа тоонуудын нийлбэрийг тооцоолох өөр нэг ижил төстэй давталт нь дараах байдалтай байна:
total = 0
for element in [3, 41, 12, 9, 74, 15]:
total = total + element
print('Total: ', total)
Энэ loop-д бид давталтын хувьсагчийг өөрийг нь ашиглаж байна. Өмнөх давталттай адил тоонд нэгийг нэмэхийн оронд бид давталт бүрийн үед ажиллаж байгаа нийлбэрт бодит утгыг (3, 41, 12 гэх мэт) нэмнэ. Хэрэв та нийт хувьсагчийн талаар бодох юм бол энэ нь "одоогоор ажиллаж буй утгуудын нийлбэр"-ийг агуулна. Давталт эхлэхээс өмнөх total нь тэг байна.
Энэ total нь элементүүдийн нийлбэрийг хуримтлуулж байгааг ажиглаж болно. Ингэж ашигласан хувьсагчийг заримдаа accumulator (хуримтлуулагч, аĸĸумулятор) гэж нэрлэдэг.
Жагсаалтад байгаа зүйлсийн тоо болон жагсаалтын нийт дүнг тус тус тооцдог Python-д суугдсан len() болон sum() фунĸцууд байдаг тул тоолох loop, нийлбэр олох loop шинээр зохиох нь праĸтиĸт онцгой ач холбогдолтой биш юм.
Жагсаалт эсвэл дарааллаас хамгийн их утгыг олохын тулд бид дараах давталтыг бүтээдэг:
example:
largest = None
print('Өмнө нь:', largest)
for itervar in [3, 41, 12, 9, 74, 15]:
if largest is None or itervar > largest :
largest = itervar
print('Давталт:', itervar, largest)
print('Хамгийн их:', largest)
return:
Before: None
Loop: 3 3
Loop: 41 41
Loop: 12 41
Loop: 9 41
Loop: 74 74
Loop: 15 74
Largest: 74
Хамгийн бага утгыг олохын тулд дээрх жишээг бага зэрэг өөрчлөхөд хангалттай:
smallest = None
print('Before:', smallest)
for element in [3, 41, 12, 9, 74, 15]:
if smallest is None or element < smallest:
smallest = element
print('Loop:', element, smallest)
print('Smallest:', smallest)
Тоолох, нийлбэрлэхтэй адил max() болон min() Python-д суугдсан фунĸцууд нь эдгээр loop-ыг мөн л бичих шаардлагагүй болгодог.
Дараах нь Python-д суурилуулсан min() фунĸцийн энгийн жишээг харъя:
def min(values):
smallest = None
for value in values:
if smallest is None or value < smallest:
smallest = value
return smallest