Урок № 41. Логічне І.
Оператор and повертає True(правду) тільки тоді, коли оба операнди рівні True.
Наприклад, ця програма
a = 10
print(a > 1 and a < 20)
виведе на екран
True
А ця
a = 10
print(a > 1 and a < 10)
виведе
False
Порядок операндов для and важливий. Першим перевіряється лівий операнд і тільки в тому випадку, якщо він істинний, буде перевірений правий операнд. Оскільки якщо лівий операнд хибний, то і весь результат буде хибним, тобто правий операнд перевіряє немає ніякої необхідності.
Попробуйте запустити ось такий код
a = 1
if a > 1 and b == 2:
print('Добре')
Використання змінної b не викликає помилки, тому що до перевірки правого операнда справа навіть не дійде.
А ось такий код
a = 1
if a > 0 and b == 2:
print('Добре')
закінчиться помилкою, тому що лівий операнд істинний і Пітон намагається перевірити правий операнд.
Урок № 42.Тест.
Відмітьте висловлювання, які повернуть True, якщо а=6.
a > 1 and a < 10
a > 1 and a < 6
a > 1 and a <= 6
a > 1 and a <= 3
Урок № 43. Логічне АБО.
Оператор orповертає True(правду) тоді, коли хоча б один із операндів рівний True.
Ось ця програма
b = 5
print(b > 1 or b < 3)
виведе на екран
True
А ця
b = 5
print(b > 10 or b < 5)
виведе на екран
False
Якщо обидва операнда рівні True результатом також будеTrue
Як і в разі з and, порядок операндів для оператора or важливий, але умови для перевірки правого операнда відрізняються.
Першим перевіряється лівий операнд і тільки в тому випадку, якщо він хибний, буде перевірений правий операнд. Оскільки якщо лівий операнд істинний, то і весь результат буде істинним, тобто правильний операнд перевіряти немає ніякої необхідності.
Цей код не викликає помилку, тому що до перевірки правого операнда справа навіть не дійде.
a = 1
if a > 0 or b == 2:
print('Добре')
А ось такий код
a = 1
if a != 1 or b == 2:
print('Добре')
закінчиться з помилкою, тому що лівий операнд хибний і Пітон спробує перевірити правий операнд.
Урок № 44.Тест
Відмітьте висловлювання, які повернуть True, якщо b=3.
b > 1 or b < 1
b > 10 or b < 1
b > 10 or b < 1 or b == 3
b == 5 or b == 10
Програма з логічними операторами 5
Напишіть програму, яка описує одним словом температуру, введену користувачем. Програма повинна зберегти введену температуру в змінну t.
Якщо число менше −4 , програма повинна вивести «морозно».
Якщо число менше 0 і більше рівно 4 , програма повинна вивести на екран «холодно».
Якщо число більше рівно 0 і менше 12 — «прохолодно».
Якщо більше рівно 12 і менше 27 — «тепло».
Якщо більше або рівно 27 — «жарко».
При написанні програми використовуйте оператори if, elif, else, and а також оператори порівняння.
t = int(input("Введіть температуру: "))
if t < -4:
print("морозно")
elif t < 0 and t >= -4:
print("Холодно")
elif t >= 0 and t < 12:
print("прохолодно")
elif t >= 12 and t < 27:
print("тепло")
else:
print("жарко")
Урок № 45. Логічне представлення данных.
До рядків і чисел також можуть бути застосовані поняття істини і хибності. Істиною Пітон вважає будь-яке число, відмінне від нуля. Тобто 0 — це хиба, а будь-яке інше число — істина.
З рядками трохи інша історія. Будь-який рядок, в якому є хоча б один символ, Пітон вважає істиною. А ось порожний рядок для нього буде хибним.
Спробуйте виповнити ось такий код, змінюючи значення змінних a і z
a = 0
if a != 0:
print('Добре')
z = ''
if z != '':
print('Непогано')
if z != '' and a != 0:
print('Дуже добре :-)')
Пізніше попробуйте виконати ось цей код, а також змінити змінні
a = 0
if a:
print('Добре')
z = ''
if z:
print('Непогано')
if z and a:
print('Дуже добре :-)')
Перший і другий варіант працюють цілком одинаково, але другий читається краще і виглядає аккуратно.
Урок №46. Логічне заперечення.
У Пітоні є ще один логічний оператор — not. Він перетворює правду в хиба, а хибу — в правду.
Наприклад, ця програма виводить на екран True
a = 10
print(a == 10)
Якщо ж перед умовою поставити оператора not — на екрані буде введено False
a = 10
print(not a == 10)
До речі, точно такий же результат ми отримаємо, якщо напишем умову трохи по-іншому — без оператора not
a = 10
print(a != 10)
Звичайно, оператор not можна використовувати і зі складними логічними висловлюваннями. Наприклад, ця програма виводить на екран False , негативне істинне висловлювання всередині дужок.
a = 10
print(not (a > 1 and a < 20))
Цю програму теж можна переписати по‑іншому
a = 10
print(a <= 1 or a >= 20)
А ось так, використовуючи логічне представлення рядка і оператора not, можна зробити перевірку користувацького входу.
anything = input("Напишіть що-небудь")
if not anything:
print('Так не можна. Треба що-небудь написати!')
Якщо користувач нічого не введе, змінна anythingа буде порожнім рядком, Пітон буде вважати її хибою. Використавши оператор not, ми перетворили хибу в істину і умовний оператор if спрацює.
Урок № 58. Тест.
Відмітьте вичловлювання, які повернуть True(правду), якщо z=3.
not (z > 1 or z < 1)
z > 10 or z < 1
z > 10 or z < 1 or not z == 3
z == 1 or not z == 4
Урок № 47. Пріоритети логічних операторів.
Як і у арифметичних, у логічних операторів є свій пріоритет у виконанні. Найвищий пріоритет у дужок. Після йдуть оператори порівняння, за ними оператор not, оператор and і оператор or.
Якщо запустити такий код
x = 0
y = 2
result = x > 1 and x == 10 or y < 5
print(result)
result = x > 1 and (x == 10 or y < 5)
print(result)
то в першому висловлюванні спочатку буде обчислений результат роботи оператора порівняння > і так як цей результат буде хибним, то і результат роботи оператора and буде хибним. Цей хибний результат стане іншим операндом для оператора or. Потім буде обчислений результат роботи оператора зрівняння <. Виходить, що лівий операнд для оператора or — хиба, а правий — правда. В підсумку результатом всього висловлювання буде істина.
У другому варіанті, за допомогою дужок, ми змінили пріоритети виконання. Тому спочатку будуть виконані операції порівняння і or.
Урок № 48. Тест.
Выдмітьте висловлювання, які повернуть True(правду), якщо змінна а= 1, а змінна b= 2.
a == 1 and not b == 2 or a > 0
a == 1 and not (b == 1 or a == 2)
not a or b == 1 and a == 2
not a and b
Урок № 49. Перепустка оператора.
Оператор pass — це оператор, який нічого не робить.
Він може використовуватися як заглушка в технічних програмах, де це синтаксично необхідно.
Наприклад, за правилами Пітона , не можна написати так:
foo = input("Введить що-небудь")
if foo:
else:
print(foo)
Така програма завершиться з помилкою:
IndentationError: expected an indented block
Все тому, що оператор if вимагає обов'язкового «тіла», тобто коду, який буде виконано при виконанні if.
Використовуючи оператор pass, можна написати так:
foo = input("Введіть що-небудь")
if foo:
pass
else:
print(foo)
Тобто, ми пишем по правилах мови, але в то же час нічого не робимо при виконні if.
Оператори if, else і elif не всі оператори, які вимагають обов'язкового «тіла». Пізніше ви ознайомитеся з такими операторами, а поки просто запам'ятайте, що існує оператор pass, який може виявитися корисним у процесі програмування на Пітоні .
Наприклад, спочатку ви можете «накинути» скелет програми:
t = input("Температура тіла:")
t = float(t)
if t == 36.6:
pass
else:
print("Викликайте лікаря!")
А вже потім, подумавши над тим, що робити, якщо все в порядку, написати:
t = input("Температура тіла:")
t = float(t)
if t == 36.6:
print("Тіштеся, що все добре!")
else:
print("Викликайте лікаря!")
Обов’язково попробуйте писати ці програми поступово. Тобто, спочатку напишіть загальний скелет, розставте заглушки, а потім деталізуйте блоки. У процесі опису ви можете без проблем запустити програму в частковому чи готовому стані, тому що помилок синтаксису у вас не буде.
Звичайно, це не обов'язково, але у багатьох завданнях такий підхід може допомогти.
Урок № 50. Умова в один рядок.
Якщо при виконанні умов потрібно виконати тільки одну операцію, можна записати її в тому ж рядку, що і умова, без відступів
a = int(input("Введіть число"))
if a > 10: print("Число більше 10")
Для elif і else такий запис теж буде працювати.
a = int(input("Введіть число"))
if a > 10: print("Число більше 10")
elif a < 10: print('Число менше 10')
else: print('Це 10!')
Також можна написати один умовний оператор з відступом, а парний йому оператор в один рядок, наприклад так:
a = int(input("Введіть число"))
if a > 10: print("Число більше 10")
else:
print('Число менше або рівно 10')
Відступ для if, elif або else записаних в одному рядку з дією робити не можна. Наприклад, ось такий код не запрацює
a = int(input("Введіть число"))
if a > 10: print("Число більше")
print('10')
else:
print('Число менше або рівно 10')
Такий запис варто використовувати з обережністю, він може погіршити читання вашої програми.
Урок № 51. Тернарний оператор.
У програмах часто потрібно присвоїти змінній різні величини в залежності від певних умов. Зазвичай виглядає це якось так
confirm = input('Введіть "так" або "ні"')
if confirm == 'так':
message = 'Ви погодились'
else:
message = 'Ви відмовились'
Для того, щоб запис подібних частин програм був більш лаконічним та красивим, в Python є спеціальний тернарний оператор. Тернарним (від лат. ternarius — «потрійним») він називається через наявність трьох операндів. Другий операнд цього оператора — умова, в залежності від істинності якої визначається, буде застосовано перший чи третій операнд. confirm = input('Введіть "так" або "ні"')
message = 'Ви погодились' if confirm == 'так' else 'Ви відмовились'
print(message)
Другий рядок буквально можна сприймати так: присвоїти змінній message значення 'Ви погодились', якщо змінна confirm дорівнює 'так', інакше присвоїти змінній значення 'Ви відмовились'.
Зверніть увагу, що двокрапки в тернарному операторі ставить не потрібно — if і else в цьому випадку потрібно сприймати як один оператор. Такой код, без else, призведе до помилки.
confirm = input('Введіть "так" або "ні"')
message = 'Ви погодились' if confirm == 'так'
Умови, звичайно, можуть бути складнішими, а в якості значень для істинної та хибної умов можуть бути цілі вирази
name = input('Введіть ваше ім’я')
age = input('Введіть ваш вік')
message = 'Проходьте, ' + name if int(age) >= 18 else 'Вам поки рано, ' + name
print(message)
Спробуйте запустити ці програми і подивіться, як вони працюють.
Робити умови і вирази в тернарному операторі занадто складними не варто. Так можна погіршити програму, а це нам зовсім не потрібно.
Урок № 52. Вкладені умови.
Можливо, ви вже догадалися, що умовні оператори можуть бути введеними і замість використання оператора and можна зробити ось так
a = int(input("Введіть число"))
if a > 10:
if a < 20:
print('Це число більше 10, але менше 20')
Друга умова в цьому прикладі буде перевірятися тільки якщо спрацює перша. Відступ для функції виводу тексту на екран буде вже не чотири, а восім пробілів.
Варто, однак, пам'ятати, що зайві вкладки погіршують читання програми. І, швидше всього, використання and буде більш правильним
a = int(input("Введіть число"))
if a > 10 and a < 20:
print('Це число більше 10, але менше 20')
Можливо, у певних випадках «викрутитися» за допомогою and не вийде, і тоді з спокійною душею можна використовувати вкладені один в одного умовні оператори.
Урок № 53.Методи рядків.
З попередніх уроків ви вже знаєте, що рядок — це окремий тип даних у Пітоні для зберігання текстової інформації. Рядки, які містять тільки цифри, можна перевворити в число, а будь-яке число можна перетворити в рядок. Так само рядки можна конкатенувати, тобто склеювати.
Крім цього у рядків є методи, за допомогою яких можна робити різні корисні дії: знаходити слова в рядку, замінювати одне слово на інше або, наприклад, перептворювати букви одного регістру в інший.
Щоб викликати метод, потрібно відразу після рядка поставити крапку і написати назву методу. Наприклад, ця програма
print("Привіт, світ!".upper())
виведе на екран вихідний рядок, всі букви, які перетворені в великі.
ПРИВІТ, СВІТ!
При виклику методу, як і при виклику функції, потрібно обов'язково поставити дужки, навіть якщо аргументів у методу немає. Ось такий код
print("Привіт, світ!".upper)
не викликає метод upper, а просто виводить на екран рядкове представлення методу
<built-in method upper of str object>
Звичайно, що методи рядків можна використовувати і із змінними. Ось ця програма
my_string = "Ще раз привіт!"
my_string = my_string.upper()
print(my_string)
теж зробить всі букви рядка великими.
ЩЕ РАЗ ПРИВІТ!
Урок № 54.Программа з методами рядків. 67
Напишіть програму, в якій змінній string присвоєно значення, введене користувачем. Тип змінної string — рядок.
Програма повинна перетворити рядок, введений користувачем у верхній регістр за допомогою методу upper та вивести на екран перетворений рядок.
У цьому уроці можна використовувати додаткові змінні за своїм бажанням.
string = input('Введіть рядок: ')
string = string.upper()
print(string)
Урок № 55.В нижній регістр.
Ця програма повинна робити майже саме, що і попередня. В загальному, напишіть програму, в якій змінній string присвоєно значення, введене користувачем. Тип змінної string — рядок.
Програма повинна перетворити рядок, введений користувачем у нижній регістр за допомогою методу та вивести на екран перетворений рядок.
У цьому уроці можна використовувати додаткові змінні за своїм бажанням.
Урок № 55. Покращений міні-калькулятор.
У одному з попередніх уроків ви написали міні-калькулятор, який додавав два числа і виводив результат на екран. Якщо користувач замість цифр ввів букви, робота калькулятора закінчувалася помилкою. В цьому уроці треба буде усунути цей недолік.
За допомогою функціїєю input присвойте змінним a aі b значення, введене користувачам. Не поспішайте перетворювати змінні a і b в числа.
Потом програма повинна перевірити, чи є змінні рядками, що містять тільки цифри. Зробити це треба за допомогою методу рядків isdigit(). Якщо в рядку є тільки цифри — виклик метода завершиться True. Якщо є букви або рядок порожній — False. Щоб перевірити рядки, використовуйте логічний оператор and.
Якщо змінні — рядкики, які містять тільки цифри, перетворіть їх у числа за допомогою функції int , додайте їх і виведіть на екран результат конкатенації рядків «Сума=» і перетвореної в рядок суму змінних a і b, інакше введіть на екран текст «Ви ввели не число».
a = input()
b = input()
if a.isdigit() and b.isdigit():
print("Сума = " + str(int(a) + int(b)))
else:
print("Ви ввели не число")
Урок № 56. Довжина рядка.
Для визначення довжини рядка в Пітоне є функція len. Достатньо викликати її, в якості аргумента передавши рядок, довжину якої ми хочемо дізнатися. Наприклад, ця програма
string = input()
string_length = len(string)
print(string_length)
виведе на екран довжину рядка, який ввів користувач.
Для перевірки мінімальної довжини рядка, введеного користувачем, можна написати
string = input()
if len(string) < 5:
print("Помилка! Введіть більше п’яти символів!")
Якщо потрібно перевірити, чи ввів користувач хоча б один символ, краще написати ось так:
string = input()
if not string:
print("Помилка! Введіть хоч що-небудь!")
Зрозуміло, що така перевірка теж буде працювати:
string = input()
if len(string) == 0:
print("Помилка! Введіть хоч що-небудь!")
Однак перший варіант перевірки на порожній рядок лаконічніший і красивіший.
Такий код, як у першому варіанті перевірки, спрацьовує із-за логічного представлення рядка. Пітон вважає, що порожній рядок — це False, а рядок, в якому є хоч один символ — True.
Урок № 57.Індекси рядка.
У Пітоне можна отримати символ із рядка по його індексу. Нумерація індексів починається з нуля.
Для отримання символу рядка необхідно написати самий рядок або ім'я змінної, відкриваючи квадратну дужку[, , індекс символу — це його номер у рядку та закриваючу квадратну дужку ].
Наприклад, ця програма виведе на екран букву «П»
foo = "Привіт!"
print(foo[0])
Якщо же вказати неіснуючий індекс
foo = "Привіт"
print(foo[999])
програма видасть помилку
IndexError: string index out of range
Для того, щоб таких помилок не було, потрібно робити перевірку довжини рядка в програмі.
Також в Пітоне підтримуються негативні індекси. В цьому випадку нумерація йде з кінця рядка. Тобто −1 — останній символ рядка, −2 — попередній і так далі до початку рядка. Наступна програма виведе на екран «і» — попередню букву слова «Привіт»
foo = "Привіт"
print(foo[-2])
Вказання неіснуюго негативного індексу також приведе до помилки IndexError .
Також індекс можна вказувати не напряму, а за допомогою змінної або навіть за допомогою арифметичного виразу.
foo = "Привіт"
i = 0
print(foo[i], foo[i + 1])
Однак, потрібно пам’ятати, що індексом може бути тільки ціле число. Тому використання змінної не цілого типу призведе до помилки.
Урок № 57. Перша і остання буква.
Напишіть програму, яка записує у змінну string рядок, введену користувачам. Програма повинна перевірити довжину рядка. Якщо довжина рядка >=2 — програма повинна вивести перший і останній символ цієї цього рядка. Інакше — програма повинна вивести «Помилка»
string=input()
if len(string)>=2:
print(string[0],string[-1])
else:
print("Помилка")
Урок № 58. Зрізи рядків.
Звертатися можна не тільки до окремим символам рядка, але і до його частини. Це робиться з допомогою зрезів рядків.
Для отримання зрезу рядка необхідно написати сам рядок або ім'я змінної , відкриваючи квадратну дяжку [, індекс початку зрізу, двокрапку, індекс кінця зрізу та закриваючу квадратну дужку ]. Як і при доступі до окремого символу рядка, індекси можуть бути негативними — Пітон розуміє, що в такому випадку індекс рахується з кінця рядка.
Наприклад, ця програма виводить на екран «сві»
foo = "Привіт, світ!"
print(foo[8:11])
А ця — «віт,»
foo = "Привіт, світ!"
print(foo[-10:-6]
Зверніть увагу, що символ з індексом початку зрізу включається в результат, а символ з індексом закінчення — ні.
Індекс початку зрізу можна не показати — в цьому випадку Пітон буде рахувати початок зрізу від початку самого рядка. Ось ця програма вивела на екран «Привіт» — це є перші 6 символів вихідної рядка.
foo = "Привет, мир!"
print(foo[:6])
Індекс кінця зрезу також можна не вказувати. Концем зрезу в цьому випадку буде кінець самого рядка. Наприклад, ця програма виводить на екран «світ!» — останні 4 символи вихідного рядка.
foo = "Привіт, світ!"
print(foo[-4:])
Вказання несумісних індексів у зрізах не призведе до помилки, як це було при доступі до окремого символу рядка. Наприклад, ця програма виводить на екран «Привет, світ!» — тобто весь рядок.
foo = "Привіт, світ!"
print(foo[:100])
А ця не виведе нічого, тому що індекси зрезу більші довжини рядка
foo = "Привіт, світ!"
print(foo[200:300])
Як і в разі з індексом, початок і кінець зрізу можна вказати за допомогою змінних і арифметичних дій. У програмі нижче на екран буде виведено 3 символи рядка, що починаються з символу, зазначеного користувача.
i = int(input())
foo = "Привіт, світ!"
print(foo[i:i+3])
Як і для індексів, це можуть бути тільки цілі числа, а використання змінних інших типів призводить до помилки.
Урок № 59. Програма із зрізами.
Напишіть програму, яка записує рядок, введений користувачам у змінну string. Програма повинна перевірити довжину рядка. Якщо довжина рядка больше >=5 — програма повинна вывести перші три і останні три символи введеного рядка. Інакше — програма повинна вивести «Помилка»
string = input()
if len(string) >= 5:
print(string[:3], string[-3:])
else:
print("Помилка")
Урок № 60. Кроки зрізів.
Крім початку і кінця, в зрізі можна задати крок. Наступна програма виводить на екран кожен другий символ вихідної рядка.
foo = "Привіт, світ!"
print(foo[::2])
Пиі,сі!
У цьому прикладі ми не вказуємо початок і кінець зрізу і берем кожен другий символ вихідної рядка вцілому. Якщо ж вказати в якості початку другий символ
foo = "Привіт, світ!"
print(foo[1::2])
то результатом буде кожен другий символ, що починається з другого
Якщо вказати негативний крок, символи будуть іти в зворотному порядку. Ось так, наприклад, можна перевернути вихідну строку
foo = "Привіт, світ!"
print(foo[::-1])