Арифметичні операції

 

Арифметичні операції

Знаючи типи даних та як їх перетворювати, почнемо ними оперувати. З курсу математики ви знаєте про операції додавання (+), віднімання (-), множення (*) і ділення (/). Ці операції називають арифметичними. Окрім вищевказаних, в Python доступні такі арифметичні операції:

  • Піднесення до степеня (**) — множить число саме на себе вказану кількість разів.
  • Цілочисельне ділення (//) — ділить одне число на інше, відкидаючи залишок від ділення
  • Залишок від ділення (%) — ділить одне число на інше, залишаючи лише залишок від ділення

Отримавши інформацію про операції, відтворимо їх у коді. Для цього створимо дві змінні зі значеннями 5 і 2 відповідно, а самі операції пропишемо всередині функції print():

var_1 = 5
var_2 = 2
print(var_1 + var_2)
print(var_1 - var_2)
print(var_1 * var_2)
print(var_1 / var_2)
print(var_1 ** var_2)
print(var_1 // var_2)
print(var_1 % var_2)

Отримаємо (відео 1):

Відео 1 

Але в Python частину цих операцій можна проводити не тільки з числами, а й з іншими типами даних. Ви вже знаєте, що рядки можна додавати та множити, ці ж операції можна проводити зі списками й кортежами. Але, як і у випадку з рядками, множити можна виключно на ціле число. Запишемо:

list_1 = [1,1]
list_2 = [2,2]
tuple_1 = 3,3
tuple_2 = 4,4
print(list_1 + list_2)
print(tuple_1 + tuple_2)
print(list_1 * 2)
print(tuple_1 * 2)

Результат (відео 2):

Відео 2

Умовні операції

Та на арифметичних операціях функціонал Python не закінчується. У житті ми постійно стикаємось із порівняннями, порівнюючи предмети або вигоду від потенційних рішень. Такі операції називають умовними й вони представлені таким синтаксисом:

  • операнд «>» більше — повертає значення True, якщо елемент зліва від операнда більший за елемент праворуч. В іншому випадку повертається False.
  • операнд «<»менше — повертає значення True, якщо елемент справа від операнда більший за елемент ліворуч. Інакше повертається False.
  • операнд «>=» більше або дорівнює — працює аналогічно операнду «більше», але на відміну від нього, за рівності елементів повертає True.
  • операнд «<=»менше або дорівнює — працює так само як операнд «менше», але за рівності елементів повертає True.
  • операнд «==»дорівнює — повертає значення True, якщо елементи праворуч і ліворуч повністю однакові. В інших випадках повертається False.
  • операнд «!=»не дорівнює — повертає значення True в усіх випадках, коли елементи не ідентичні одне одному.

Порівняємо числа:

var_1 = 2
var_2 = 1.1
var_3 = 3
var_4 = 3
print(var_1 > var_2)
print(var_1 < var_2)
print(var_1 >= var_2)
print(var_1 <= var_2)
print(var_3 >= var_4)
print(var_3 <= var_4)
print(var_1 != var_2)
print(var_3 == var_4)

Результат (відео 3):

Відео 3

Якщо з числами все очевидно, то як порівнюються рядки, списки, кортежі й інші? З ними ситуація дещо цікавіша. 

Порівнюючи рядки, Python порівнює перші символи. Якщо вони збігаються, порівнюються наступні аж, доки не будуть знайдені різні символи. Якщо ж усі символи будуть однакові, то й рядки будуть рівними. Кожен символ має своє числове кодування й, коли Python знаходить різні знаки, проводиться порівняння цих числових значень і видається результат операції. Щоби дізнатися код символу використовується функція ord(). Якщо ж навпаки необхідно дізнатися відповідність числа символу, використовується функція chr()

Варто зазначити, що великі й маленькі літери мають різні коди. Не варто забувати й про те, що в різних системах можуть використовуватися різні кодування. 

Запишемо:

str_1 = "F"
str_2 = "f"
print(str_1 < str_2)
print(ord(str_1))
print(ord(str_2))
print(chr(70))
print(chr(102))

Запустимо код (відео 4):

Відео 4

Очевидно, що 70 менше ніж 102, тому й "F" менша за "f".

Під час порівняння списків, кортежів, множин й frozenset, усе відбувається аналогічно. 

Зверніть увагу, якщо елементами вищевказаних типів є числа, рядки, кортежі тощо, то вони мають порівнюватися, відповідно, з числами, рядками, кортежами тощо. В іншому випадку з'явиться помилка

Але, якщо порівняння відбулося до виявлення колізії, помилки не буде (відео 5):

Відео 5

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

Крім прямого використання умовних операцій, їх часто використовують з умовним оператором if. 

У самій конструкції if задається умова, за якої буде виконано код, що знаходиться в тілі конструкції. Якщо ж умова не виконується, то не виконується код всередині тіла конструкції. Запишемо:

if 1<2:
print("Really, 1 < 2")

Запустимо код (відео 6):

Відео 6

Щоби код розмістився всередині конструкції, його необхідно почати з нового рядка й відділити від початку рядку, один раз натиснувши клавішу Tab. Конструкція буде продовжуватись, доки код не буде розміщено без використання табуляції:

if 1>2:
print("Really, 1 > 2")
print("I am Print!")

Виконаємо код (відео 7):

Відео 7

Тепер ми можемо ставити умови для виконання коду.

Логічні операції

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

В Python доступні такі логічні операції:

  • Операторand (і) дає змогу об'єднувати умови й код виконається тільки, коли всі умови будуть виконані:
var_1 = 5
if var_1 > 1 and var_1 < 10:
print(var_1 + 1)

Маємо (відео 8):

Відео 8

  • Операторor (або) дає змогу виконувати код, якщо виконується принаймні одна з умов:
var_1 = 15
if var_1 < 1 or var_1 > 10:
print(var_1 + 5)

Отримаємо (відео 9):

Відео 9

Як бачимо, вищевказані оператори працюють протилежним чином, тому запис "and or" є некоректним. Між ними обов'язково має вказуватись умова.

  • Оператор not (заперечення)змінює умову на протилежну (відео 10):

Відео 10

  • Оператор in (в) використовується для перевірки присутності елемента в масиві даних:
list_1 = [1, 2, 4, 6, 8, 12]
var_1 = 6
if var_1 in list_1:
print("Really, list_1 contains the variable var_1")

Отримаємо (відео 11):

Відео 11

  • Оператор is (є) використовується для перевірки істинності твердження:
var_1 = 1
if type(var_1) is int:
print("Really, var_1 is integer")

Результат (відео 12):

Відео 12

Розробка «Quiz»

Ознайомившись із матеріалом, закріпимо його на практиці створивши власний трек (мал. 1).

YXHXDkiRcdqUmj4Xt8i8iXKezt1WWU9p
Малюнок 1

Спочатку створимо змінні для запитань і відповідей:

question_1 = "I have 4 legs and a tail. I am very smart. I like to play with you.
             When I see a cat, I say "Woof, woof" I am…."
question_2 = "I am a pet. I am soft and furry. I like to sleep and drink milk.
             I do not like mice and dogs. I say "Meow, meow". I am…."
question_3 = "I am a big farm animal. I can be black, white or brown.
             I like to eat green grass. I give milk. I can say "Moo, moo". I am…."
question_4 = "I have four legs and a tail. I have no teeth. I can swim
             and dive underwater. I carry my house around with me. I am a…"
question_5 = "I live in the woods. I'm very big and furry. I have a big nose,
             a little tail and four legs. I like to eat fish and berries. I am a…"
answer_1 = "dog"
answer_2 = "cat"
answer_3 = "cow"
answer_4 = "turtle"
answer_5 = "bear"

Тепер лишається виводити питання на екран і, якщо користувач вводить правильну відповідь, вона йому зараховується. Тому створимо змінні, у яких буде знаходитися відповідь користувача і зберігатися його результат. Також пропишемо умови:

question_1 = "I have 4 legs and a tail. I am very smart. I like to play with you.
             When I see a cat, I say "Woof, woof" I am…."
question_2 = "I am a pet. I am soft and furry. I like to sleep and drink milk.
             I do not like mice and dogs. I say "Meow, meow". I am…."
question_3 = "I am a big farm animal. I can be black, white or brown.
             I like to eat green grass. I give milk. I can say "Moo, moo". I am…."
question_4 = "I have four legs and a tail. I have no teeth. I can swim
             and dive underwater. I carry my house around with me. I am a…"
question_5 = "I live in the woods. I'm very big and furry. I have a big nose,
             a little tail and four legs. I like to eat fish and berries. I am a…"
answer_1 = "dog"
answer_2 = "cat"
answer_3 = "cow"
answer_4 = "turtle"
answer_5 = "bear"
result = 0
print(question_1)
user_answer = input()
if user_answer == answer_1:
result+=1
print("The answer is correct")
print(question_2)
user_answer = input()
if user_answer == answer_2:
result+=1
print("The answer is correct")
print(question_3)
user_answer = input()
if user_answer == answer_3:
result+=1
print("The answer is correct")
print(question_4)
user_answer = input()
if user_answer == answer_4:
result+=1
print("The answer is correct")
print(question_5)
user_answer = input()
if user_answer == answer_5:
result+=1
print("The answer is correct")

Рядок "result+=1" реалізує додавання до попереднього значення змінної result числа 1. Тобто це те ж саме, що й "result[нове значення]=result[попереднє значення]+1". Аналогічно можна використовувати всі інші арифметичні оператори.

Залишається вивести результат, щоби користувач знав кількість правильних відповідей. Додамо:

print("Congratulations, you have typed ", result, " correct answers")

Але правильна відповідь може бути введена з використанням великих літер, та наш тест її не зарахує. Тому приведемо відповідь користувача до нижнього регістру, скориставшись методом lower():

question_1 = "I have 4 legs and a tail. I am very smart.I like to play with you.
             When I see a cat, I say "Woof, woof" I am…."
question_2 = "I am a pet. I am soft and furry. I like to sleep and drink milk.
             I do not like mice and dogs. I say "Meow, meow". I am…."
question_3 = "I am a big farm animal. I can be black, white or brown.
             I like to eat green grass. I give milk. I can say "Moo, moo". I am…."
question_4 = "I have four legs and a tail. I have no teeth. I can swim
             and dive underwater. I carry my house around with me. I am a…"
question_5 = "I live in the woods. I'm very big and furry. I have a big nose,
             a little tail and four legs. I like to eat fish and berries. I am a…"
answer_1 = "dog"
answer_2 = "cat"
answer_3 = "cow"
answer_4 = "turtle"
answer_5 = "bear"
result = 0
print(question_1)
user_answer = input()
if user_answer.lower() == answer_1:
result+=1
print("The answer is correct")
print(question_2)
user_answer = input()
if user_answer.lower() == answer_2:
result+=1
print("The answer is correct")
print(question_3)
user_answer = input()
if user_answer.lower() == answer_3:
result+=1
print("The answer is correct")
print(question_4)
user_answer = input()
if user_answer.lower() == answer_4:
result+=1
print("The answer is correct")
print(question_5)
user_answer = input()
if user_answer.lower() == answer_5:
result+=1
print("The answer is correct")
print("Congratulations, you have typed ", result, " correct answers")

Трек готовий, отже, час по ньому пройти (відео 13):

Відео 13

Сьогодні ми освоїли арифметичні, умовні й логічні операції, попрацювали з конструкцією if. Уже відчули силу нових можливостей? 

А на наступних заняттях ці можливості виростуть.