цыкл while у Python. Як гэта працуе, прыклады выкарыстання

Цыклы - адзін з асноўных інструментаў любой мовы. У Python ёсць два асноўныя цыклы, адзін з якіх - while. Разгледзім яго, а таксама для лепшага разумення карціны яшчэ адзін. Сапраўды, у параўнанні з чымсьці падобным, нашмат прасцей зразумець любы матэрыял, ці не праўда?

Паняцце аб цыкле

Цыкл патрэбен, калі пэўнае дзеянне неабходна выканаць некалькі разоў. Гэта вельмі спрошчана, таму што на самой справе спектр прымянення цыклаў нашмат шырэй. У Python ёсць два асноўных тыпу цыклаў: for і while. Самы папулярны - для.

У дадатак да пэўных дзеянняў, вы можаце зацыкліваць розныя фрагменты кода да пэўнага моманту. Гэта можа быць пэўную колькасць разоў або пакуль выконваецца пэўная ўмова.

Перш чым мы пачнем разумець тыпы цыклаў і while, у прыватнасці, нам яшчэ трэба зразумець, што такое ітэрацыя. Гэта адно паўтарэнне дзеяння або паслядоўнасці дзеянняў падчас бягучага цыкла ў рамках бягучага запуску прыкладання.

Цыкл Для

Наш цыкл For не з'яўляецца лічыльнікам, як у многіх іншых мовах. Яго задача - пералічыць пэўную паслядоўнасць значэнняў. Што гэта значыць? Дапусцім, у нас ёсць спіс элементаў. Спачатку цыкл займае першы, другі, трэці і гэтак далей.

Перавага гэтага цыклу ў Python у тым, што вам не трэба вызначаць індэкс элемента, каб ведаць, калі выйсці з цыкла. Усё будзе зроблена аўтаматычна.

>>> спісак = [10, 40, 20, 30]

>>> для элемента ў спісе:

… друк(элемент + 2)

...

12

42

22

32

У нашым прыкладзе мы выкарыстоўвалі зменную элемент пасля каманды for. Увогуле, імя можа быць любым. Напрыклад, папулярнае абазначэнне i. І пры кожнай ітэрацыі гэтай зменнай будзе прысвойвацца пэўны аб'ект са спісу, які мы назвалі адпаведным словам.

У нашым выпадку спіс уяўляе сабой паслядоўнасць лікаў 10,40,20,30. Пры кожнай ітэрацыі ў зменнай з'яўляецца адпаведнае значэнне. Напрыклад, як толькі пачынаецца цыкл, зменная элемент прысвойваецца значэнне 10. На наступнай ітэрацыі дзесятка ператвараецца ў лічбу 40, у трэці раз яна ператвараецца ў лічбу 20 і, нарэшце, на апошняй ітэрацыі цыкла, яна ператвараецца ў 30.

Сігналам аб заканчэнні цыкла з'яўляецца канец элементаў у спісе.

Калі вам патрэбен цыкл для выканання класічнага пераліку значэнняў, як і ў іншых мовах праграмавання, вам варта стварыць спіс з паслядоўнасцю натуральных лікаў да патрэбнага нам значэння.

>>> спісак = [1,2,3,4,5]

Або скарыстайцеся функцыяй len(), каб вызначыць даўжыню спісу. Але ў гэтым выпадку лепш выкарыстоўваць пятлю пакуль, таму што няма неабходнасці выкарыстоўваць зменную.

Калі вам трэба змяніць паслядоўнасць значэнняў у спісе, цыкл для і тут прыходзіць на дапамогу. Для гэтага на кожнай ітэрацыі кожнаму элементу спісу павінна быць прысвоена адпаведнае значэнне.

Пакуль пятля

У адрозненне ад цыкла для, які проста перабірае значэнні паслядоўнасці, цыкл у той час як мае больш ужыванняў. Назва гэтага віду цыклаў перакладаецца як «пакуль». Гэта значыць «пакуль».

Гэта універсальны цыкл, які ёсць ва ўсіх мовах праграмавання. І чымсьці нагадвае ўмоўны аператар ціс, які выконвае праверку, ці выконваецца пэўная ўмова. Толькі ў адрозненне ад умоўнага аператара, у той час як выконвае праверку на кожнай ітэрацыі, а не толькі адзін раз. І толькі калі ўмова ілжывая, цыкл завяршаецца і выконваецца каманда, якая ідзе за ім. Простымі словамі, калі сітуацыя, у якой ён працуе, ужо не актуальная.

Калі мы малюем цыкл у той час як спрошчана гэта робіцца па такой схеме.цыкл while у Python. Як гэта працуе, прыклады выкарыстання

Асноўная галіна праграмы (якая праходзіць па-за цыклам) намаляваная на гэтым малюнку сінімі прастакутнікамі. Бірузовы сімвалізуе цела цыкла. У сваю чаргу, ромб - гэта ўмова, якое правяраецца на кожнай ітэрацыі.

Цыкл у той час як можа прывесці да двух выключэнняў:

  1. Калі ў пачатку цыкла лагічны выраз не вяртае ісціну, то ён проста не пачынаецца, завяршыўшыся перад выкананнем. У цэлым такая сітуацыя нармальная, бо пры пэўных абставінах прыкладанне можа не прадугледжваць наяўнасць выразаў у целе цыкла.
  2. Калі выраз заўсёды праўдзівы, гэта можа прывесці да цыклу. Гэта значыць да бясконцай пракруткі цыкла. Такім чынам, у такіх праграмах заўсёды павінен быць аператар выхаду з цыкла або праграмы. Аднак такая сітуацыя ўзнікне, калі праграма змагла вызначыць праўдзівасць або памылковасць канкрэтнага ўмовы. Калі ёй гэта не ўдалося зрабіць, то вяртаецца памылка з завяршэннем праграмы. Ці вы можаце апрацаваць памылку, і тады, калі яна ўзнікае, пэўны код будзе выкананы.

Варыянтаў апрацоўкі памылкі можа быць велізарная колькасць. Напрыклад, праграма можа папрасіць карыстальніка правільна ўвесці дадзеныя. Так, калі чалавек указаў адмоўнае лік там, дзе яно можа быць толькі дадатным, або ўвёў літары там, дзе павінны быць толькі лічбы, праграма можа пра гэта сказаць.

Прыклады цыкла while

Вось прыклад кода, які апрацоўвае памылку ў гэтым выпадку.

n = input(“Увядзіце цэлы лік: “) 

у той час як type(n) != int:

    спроба:

        n = int(n)

    за выключэннем ValueError:

        print(“Няправільны запіс!”)

        n = input(“Увядзіце цэлы лік: “) 

калі n % 2 == 0:

    друк ("Нават")

яшчэ:

    друк (“Няцотны”)

Майце на ўвазе, што Python выкарыстоўвае двукроп'е для дэкларацыі складаных канструкцый кода.

У прыведзеным вышэй кодзе мы вызначылі ў якасці ўмовы, што мы павінны праверыць, ці з'яўляецца лік цэлым. Калі так, то вяртаецца false. Калі не, то праўда.

У другой частцы кода, дзе выкарыстоўваецца аператар if, мы выкарыстоўвалі аператар %, каб знайсці рэшту пасля аперацыі дзялення. Наступны крок - праверыць, ці цотны лік. Калі няма, то астатак у гэтым выпадку адзін. Адпаведна, лік няцотны. 

Прасцей кажучы, прыведзены вышэй код спачатку правярае, ці з'яўляецца радок, уведзены карыстальнікам, лікам. Калі так, то праводзіцца другая праверка, ці ёсць астатак ад дзялення на два. Але другі блок не будзе выкананы, пакуль значэнне, уведзенае карыстальнікам, не стане лікавым.

Гэта значыць, цыкл будзе рэгулярна выконвацца, пакуль не наступіць умова. У гэтай сітуацыі гэта працуе так. 

Гэта значыць можна пайсці ад наадварот: зацыкліваць пэўнае дзеянне, пакуль падзея не стане ілжывым.

Разбор кода

Зараз давайце паглядзім больш падрабязна, як працуе гэты код. Для гэтага мы прааналізуем яго паэтапна.

  1. Спачатку карыстальнік уводзіць радок, які прымаецца зменнай n. 
  2. З дапамогай пятлі у той час як тып гэтай зменнай правяраецца. Пры першым запісе ён не роўны INT. Такім чынам, у выніку тэсту выяўляецца, што гэта ўмова адпавядае рэчаіснасці. Такім чынам, уводзіцца цела цыкла.
  3. З дапамогай аператара старацца мы спрабуем пераўтварыць радок у лік. Калі гэта зроблена, памылак не ўзнікае. Адпаведна, апрацоўваць яго не трэба. Такім чынам, інтэрпрэтатар вяртаецца ў пачатак цыклу, і па выніках праверкі аказваецца, што ён стаў цэлым лікам. Такім чынам, пяройдзем да кроку 7
  4. Калі пераўтварэнне было няўдалым, выдаецца памылка ValueError. У гэтым выпадку паток праграмы адпраўляецца ў апрацоўшчык акрамя.
  5. Карыстальнік уводзіць новае значэнне, якое прысвойваецца зменнай n.
  6. Інтэрпрэтатар вяртаецца да кроку 2 і зноў правярае. Калі гэта цэлае значэнне, перайдзіце да кроку 7. Калі не, то пераўтварэнне робіцца паўторна ў адпаведнасці з крокам 3.
  7. З дапамогай аператара if Вызначае, ці ёсць рэшта пасля дзялення ліку на 2. 
  8. Калі няма, вяртаецца тэкст "нават".
  9. Калі не, вяртаецца тэкст "няцотны".

Разгледзім цяпер такі прыклад. Паспрабуйце вызначыць, колькі разоў будзе праходзіць гэты цыкл?

усяго = 100 

я = 0

пакуль я <5:

    n = int(уваход())

    сумарны = агульны — н

    i = i + 1 

print(“Засталося”, усяго)

Правільны адказ - 5. Першапачаткова значэнне зменнай i – нуль. Інтэрпрэтатар правярае, ці роўная зменная i 4 або менш. Калі так, то вяртаецца значэнне. праўда, і цыкл выконваецца адпаведна. Значэнне павялічваецца на адзінку.

Пасля першай ітэрацыі значэнне зменнай становіцца 1. Праводзіцца праверка, і праграма разумее, што гэты лік зноў менш 5. Адпаведна, цела цыклу выконваецца другі раз. Паколькі крокі падобныя, значэнне таксама павялічваецца на адзінку, і зменная цяпер роўная 2.

Гэта значэнне таксама менш за пяць. Затым цыкл выконваецца ў трэці раз, дадаецца да зменнай i 1 і яму прысвойваецца значэнне 3. Гэта зноў менш за пяць. І так справа даходзіць да шостай ітэрацыі цыклу, на якой значэнне зменнай i роўна 5 (у рэшце рэшт, першапачаткова ён быў нулем, наколькі мы памятаем). Адпаведна, гэта ўмова не праходзіць праверку, і цыкл аўтаматычна спыняецца і ажыццяўляецца пераход да наступнага кроку, які знаходзіцца па-за ім (або завяршэнне праграмы, калі наступныя крокі не прадугледжаны).

Цыкл можа адбывацца і ў адваротным кірунку. Вось прыклад кода, у якім пры кожнай наступнай ітэрацыі адзінка адымаецца з бягучага значэння зменнай. 

усяго = 100 

пакуль агульная сума > 0:

    n = int(уваход())

    сумарны = агульны — н 

print(“Рэсурс вычарпаны”)

Паспрабуйце адгадаць, што робіць гэтая праграма! Уявіце, што ў зменнай агульны захоўваецца інфармацыя аб рэсурсе праграмы. Кожны раз перакладчык правярае, ці існуе рэсурс. Калі няма, то адлюстроўваецца тэкст «Рэсурс вычарпаны» і праграма зачыняецца. І з кожнай ітэрацыяй цыкла рэсурс памяншаецца на лічбу, якую паказвае карыстальнік.

А цяпер хатняе заданне. Паспрабуйце змяніць прыведзены вышэй код так, каб зменная фізічна не магла стаць адмоўнай. 

4 Каментары

Пакінуць каментар