Єдина Країна!

Головне меню

Наша кнопка

Українські уроки про ІТ

Друзі

Підтримка української армії


Головна Програмування - Python Засоби керування логікою (умовна інструкція if, цикли while,for) в Python

Засоби керування логікою (умовна інструкція if, цикли while,for) в Python
Написав Invader   
Середа, 26 грудня 2012 18:29
Переглядів: 8627

Вступне слово

У програмах, що ми писали до цього часу завжди була послідовність інструкцій, яку Python чистосердечно виконував саме в тому порядку в якому вони з’являлися в тексті програми. Що якщо ти хочеш змінити послідовність роботи програми? Наприклад, ти хочеш щоб програма приймала певні рішення і робила різні речі в залежності від ситуації. Наприклад, виводила "Добрий ранок" чи "Добрий вечір" в залежності від часу доби. Як ти вже мабуть здогадався цього можна досягти, використовуючи інструкції керування потоком виконання програми. В Python існує три таких інструкції — if, while, for.

Умовна інструкція if в Python

Інструкція if використовується для перевірки якої-небудь умови (і саме тому називається умовною інструкцією) і якщо дана умова вірна, ми запускаємо відповідний блок інструкцій на виконання, інакше (якщо вираз який перевіряється поверне логічне "не істинно") запускається інший блок виразів. Запам’ятай що блок інакше (else) необов’язковий.

Отже, поїхали. Програма

#!/usr/bin/python
# Filename: if.py

number = 23
guess = int(input('Введи число : '))

# це частина if з виразом перевірки умови (до двокрапки)
if guess == number:
 print('Вітаю, ти вгадав.')#новий блок починається тут
 print('(але ти не виграв жодних призів!)')#а тут закінчується
#необов’язкова частина "else if" (інакше, якщо). Тут теж перевіряється
#певна умова
elif guess < number: #читається як інакше, якщо guess < number, то
#виконати цей блок коду
#який асоційований саме з цим elif за допомогою відступів
 print('Ні, воно трохи більше за це')
#якщо всі попередні перевірки повернули не істинно
else:
 print('Ні, воно трохи менше за це')

#ця остання команда завжди виконується в незалежності від того чи ти
#вгадав чи ні
print('Програму виконано')

 

виведе:

$ python if.py
Введи число : 50
Ні, воно трохи менше за це

Програму виконано

$ python if.py
Введи число : 22
Ні, воно трохи більше за це

Програму виконано

$ python if.py
Введи число : 23
Вітаю, ти вгадав.
(але ти не виграв жодних призів!)

Програму виконано

Як це працює:

В цій програмі користувач мусить вгадувати число. Ми отримуємо від нього число і перевіряємо чи це те число яке ми маємо. Спочатку відбувається привласнення змінній number числа 23. Потім, за допомогою функції input() отримуємо число від користувача. Функція це просто шматок коду, який можна повторно використовувати (виконувати) просто написавши ім’я функції (тобто викликавши функцію, яка запустить певний програмний код на виконання). Більше інформації про функції ти дізнаєшся з наступного розділу.

В рядку з цим кодом: guess = int(input('Введи число : ')), ми передаємо функції input текст, який вона виводить на екран і чекає данних від користувача. Як тільки ти щось введеш і натиснеш Enter — функція поверне те що ти ввів як дані рядкового типу. Потім ми конвертуємо ці дані в тип integer користуючись іще однією функцією — int(). Як я вже писав input() поверне дані від користувача назад в програму, в цьому випадку у змінну guess. Насправді int це клас, але все що тобі потрібно знати на даний момент так це те що за допомогою неї можна перетворювати дані типу string в тип int (звісно ж припускаючи те, що ти зібрався конвертувати можна привести до числового типу, тобто "якийсь текст" ти не зможеш перетворити в число).

Далі ми порівнюємо дані у змінній guess з числом, яке нами було вибрано (23). Якщо ці дві величини рівні між собою, на екран виводиться повідомлення про успіх. Зауваж, що відступи у рядках використовуються для того, щоб інтерпретатор Python міг розподіляти інструкції за блоками. Тобто ті рядки які розташовані на одному рівні вкладеності (мають однакові відступи) вважаються єдиним блоком операторів. Тому у Python правильні відступи є дуже важливими. Сподіваюся, вам подобаються правила узгоджених з блоками коду відступів, чи не так?

Зверни увагу на те що інструкція if містить в кінці двокрапку — таким чином ми кажемо інтерпретатору, що далі буде йти блок інструкцій.

Потім перевіряємо чи змінна guess менша за число від користувача, і якщо так, то ми інформуємо його що потрібне число дещо більше.
Тут я дещо відійду від "Byte of Python" оскільки наведені там пояснення відносно синтаксису if…else дещо плутані

Загальна форма if…else

Згідно синтаксису мови Python спершу записується частина if з умовним виразом. Після умовного виразу ставиться двокрапка. Перед двокрапкою пробіл не ставиться. Далі може бути скільки завгодно НЕОБОВ'ЯЗКОВИХ частин elif зі своїми умовними виразами, і в кінці може стояти, теж необов’язкова частина else. Блок else виконується тоді, коли жодна попередня умова не є істинною. Умовні інструкції і частина else мають асоційовані з ними блоки вкладених інструкцій, з відступом відносно основної інструкцї.
В загальному випадку форма запису if має такий вигляд:

 
if <test1>:
<statements1>
elif <test2>:
 <statetements2>
else:
 <statements3> 
 

Повертаємося до "Byte of Python"
Інструкція if може мати інший if-блок коду вкладений в основний if. Виглядає це так:

if someExpression:
	if anotherExpression:
		if 
andAnoteher:
			if andOneMore:
				print('Всі попередні умови повернули істинно')

 

Запам’ятай, що мінімально достатньою формою конструкції if є така:

#замість True можна написати число 1.
#Число один також є логічною істиною
if True:
 print('Так, істинно') 
 

Зауваження для програмістів на C/C++
В Python не існує конструкції switch. Ти можеш замінити її конструкцією if…elif…else для того, щоб робити ті ж самі речі (і у деяких випадках викор. словник для того, щоб робити це швидко)

Керуюча конструкція while (цикл з передумовою)

Даний цикл дозволяє багаторазово виконувати блок виразів. Циклом з передумовою він називається тому, що умова перевіряється на істинність ДО початку виконання тіла циклу, отже, воно може жодного разу не виконатися. Асоційований блок коду буде виконуватися доти, доки умовний вираз повертає істинно (true) . Як і if конструкція while теж має необов’язкову інструкцію else.

Розглянемо приклад:

#!/usr/bin/python
# Filename: while.py
number = 23
running = True
while running:

	guess = int(input('Введи число : '))
	if guess == number:
		print('Вітаю, ти його вгадав.')
		running = False#тут цикл зупиниться
	elif guess < number:
		print('Ні, воно трохи більше за це.')
	else:
		print('Ні, воно трохи менше за це.')
else:
	print('Цикл while закінчив роботу.')

print('Програму виконано')

 

Виведе:
$ python while.py
Введи число : 50
Ні, воно трохи менше за це.
Введи число : 22
Ні, воно трохи менше за це.
Введи число : 23
Вітаю, ти його вгадав.
Цикл while закінчив роботу.
Програму виконано

Як це працює

В цій програмі ми все ще граємо у гру "вгадай число", але ця програма має велику перевагу — користувач може вгадувати доти доки не вгадає число і при цьому програма не завершує роботу. Йому не потрібно заново запускати програму кожного разу коли число невірне.

Ми перемістили if та input всередину циклу while і надали змінній running значення істинно ПЕРЕД циклом while. Спершу ми перевіряємо чи змінна running дорівнює True і потім виконуємо відповідний блок while. Після того як блок інструкцій while виконано, знову перевіряється умова. Якщо умова повертає True, ми виконуємо блок while знову, в протилежному випадку переходимо до опціонального виразу else (це до того де міститься код print('Цикл while закінчив роботу.').) циклу while а потім далі, до кінця програми.

Блок else циклу while виконується тоді, коли умова циклу набуває значення False — це може статися навіть при першій перевірці умови. Якщо присутня інструкція else, то вона завжди буде виконана, якщо ти не перервеш цикл (не вийдеш із циклу) за допомогою інструкції break.

True і False називаються Булевими типами даних і ти можеш вважати їх еквівалентами числам 1 і 0 відповідно.

Цикл for

Інструкція for…in це інший вид циклу який є універсальним ітератором послідовностей об’єктів, іншими словами в даному циклі відбувається обхід елементів всередині послідовності. Ми дізнаємося більше про послідовності в наступних статтях. Що тобі потрібно знати зараз так це те, що послідовність це просто впорядкована колекція (впорядкований набір) елементів.

Приклад:

#!/usr/bin/python
# Filename: for.py
for i in range(1, 5):
 print(i)
else:
 print('The for loop is over')

Виведе:
$ python for.py

1

2

3

4

The for loop is over

Як це працює:
В цій програмі ми виводимо послідовності чисел. Послідовність чисел генерується вбудованою функцією range. Функції range передається два параметри — два числа. Функція повертає послідовність чисел яка починається з першого числа і закінчується другим, НЕ ВКЛЮЧАЮЧИ ЙОГО. Наприклад, range(1, 5) створить послідовність [1, 2, 3, 4]. Типово, range приймає крок рівний 1. Якщо ми передамо третє число функції тоді воно буде вказувати на те який крок слід використовувати. Наприклад, range(1, 5, 2) виведе [1,3]. Запам’ятай, що послідовність розширюється до другого числа, НЕ включаючи його.

Далі цикл for проводить ітерацію через цю послідовність (здійснює перебір послідовності) — for i in range(1,5) еквівалентно i in [1, 2, 3, 4]. Це ніби привласнення кожного числа (об’єкта) в послідовності змінній i, одне число за раз; потім виконується блок операторів для кожного значення змінної i (змінній i було присвоєно число, над ним виконується певний код, по заверешенні цього коду змінній привласнюється наступне число і над ним теж виконується код, і так до кінця послідовнсості).

Запам’ятай що цикл for…in працює для будь-якої послідовності.

Даний цикл може бути вкладеним:

items = ["ааа", 111, D, 5), 2.01] #множина об’єктів
tests = [D, 5), 3.14]#ключі які треба відшукати

for key in tests:
	for item in items:
		if item == key
			print(key, "was found")

Зауваження для програмістів на C/C++/Java/C#
Цикл for в Python кардинально відрізняється від такого в C/C++. Програмісти на C# зауважать що Python`овський цикл є подібним до foreach. У C/C++ ти пишеш for (int i=0,i<5;i++), але в Python потрібно писати for i in range(0, 5). Як ти бачиш цикл for в Python простіший, більш виразний і менш небезпечний в плані помилок.

 

Інструкція break
Використовується для виходу (примусового завершення) з циклу. Цикл припинить виконання навіть якщо умова не набула значення False.

Важливе зауваження: якщо ти примусово завершуєш цикл for чи while відповідний блок else не буде виконано.

Приклад:

#!/usr/bin/python
# Filename:
 break.py
while True:
	s = (input('Введи щось : '))
	if s == 'quit':
		break
	print('Довжина рядка', len(s))
print('Готово')

 

Виведе:

$ python break.py
Введи щось : Programming is fun
Довжина рядка 18
Введи щось : When the work is done
Довжина рядка 21
Введи щось : if you wanna make your work also fun:
Довжина рядка 37
Введи щось :
use Python!
Довжина рядка 12
Введи шось : quit
Готово

Як це працює:

В цій програмі ми багаторазово приймали від користувача дані і виводили на екран довжину кожного рядка який ввів користувач. В програмі є спеціальна умова, в разі виконання якої цикл примусово завершується інструкцією break. Довжина рядка (к-ть символів в ньому) з’ясовується використовуючи функцію len. Інструкція break може бути використана і в циклі for.

 

Інструкція continue
Дана інструкція говорить інтерпретатору пропустити решту інструкцій в поточному циклі і продовжити з наступної ітерації циклу.

Приклад:

#!/usr/bin/python
# Filename: continue.py

while True:
	s = input('Enter something : ')
	if s == 'quit':
		break
	if len(s) < 3:
		print('Too small')
		continue
	print('Input is of sufficient length')

Виведе:
$ python test.py
Enter something : a
Too small
Enter something : 12
Too small
Enter something : abc
Input is of sufficient length
Enter something : quit

Як це працює:

В цій програмі ми приймаємо дані від користувача, але ми опрацьовуємо їх тільки тоді, коли вони мають довжину принаймні 3 символи. Отже, ми користуємося функцією len для визначення довжини і якщо довжина менша за три символи, ми пропускаємо решту інструкцій в блоці користуючись інструкцією continue. В протилежному випадку решта інструкцій в циклі виконуються.

Як і break інструкція continue може використовуватися з циклом for.

 

Підсумок

Ми побачили як користуватися умовною інструкцією if, двома видами циклів і інструкціями break та continue. Це найбільш часто використовувана частина Python, тому дуже важливо це все добре вивчити.

Далі ми побачимо як створювати і користуватися функціями.

 

 

Переклад з книги -  Byte of Python

Автор перекладу - Дмитро Юрченко


( 5 Проголосувало )
Коментарі
Добавити новий
Залишити коментар
Ім`я:
e-mail:
 
Тема:
 
:angry::0:confused::cheer:B):evil::silly::dry::lol::kiss::D:pinch:
:(:shock::X:side::):P:unsure::woohoo::huh::whistle:;):s
:!::?::idea::arrow:
 
Введіть цей настирливий код
Русская редакция: www.freedom-ru.net & www.joobb.ru

3.26 Copyright (C) 2008 Compojoom.com / Copyright (C) 2007 Alain Georgette / Copyright (C) 2006 Frantisek Hliva. All rights reserved."

 

Підписка

Хто онлайн?

Немає
На даний момент 33 гостей на сайті

Український рейтинг
TOP.TOPUA.NET