Складання програм з розгалуженнями

Тренуємося, відшліфовуємо навички, складаючи програми з використанням розгалужень

ЗАВДАННЯ 12

Дано дві сторони прямокутника. Перевірити. чи є він квадратом.

Дане завдання буде легким. якщо ви вчитаєтеся в умову і зрозумієте, що варіантів вибору тут тільки ДВА: квадрат, або НЕ квадрат. Тому, в даному випадку, нам потрібна ПОВНА форма розгалуження. Потрібно отримати одну сторону a, потім другу b. Після цього "вмикаємо" розгалуження на перевірку того факту, чи a=b, чи ні. Якщо умова виконується - виводимо повідомлення про те, що наш прямокутник є квадратом, якщо не виконується - виводимо повідомлення про те, що прямокутник НЕ є квадратом. Усе.

Напишіть програму самостійно, а потім перевірте за зразком.

a,b = map(float, input('Введіть сторони через пробіл: ').split(' '))

if a == b:

print('Квадрат')

else:

print('Не квадрат')

ЗАВДАННЯ 13

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

Ця програма повинна вже містити "обробник помилок", адже ділити на 0 не можна, тому перш ніж обчислювати значення усього виразу потрібно спочатку переірити, чи при таких значеннях a і b, які було отримано, значення знаменника a-2b дорівнює нулю, чи ні. Якщо це так, то нема чого рахувати далі, потрібно виводити повідомлення про неможливість обчислення значення виразу. Ну а якщо знаменник не перетворюється на нуль - тоді обчислюємо значення виразу "по повній програмі" й виводимо відповідь.

Розгляньте скріншот готової програми і розберіться в її елементах:

Зверніть увагу на те, як організоване введення даних (рядок 1), а також на те, що знаменник дробу (рядок 5) взято у дужки, оскільки інакше (якщо записати без дужок c/a-2*b) відповідно до прийнятого в математиці порядку дій (спочатку виконується ділення і множення, а потім віднімання) значення змінної c буде розділено на значення змінної a, а потім від результату буде віднято 2*b, що призведе до помилки.

ЗАВДАННЯ 15

Обчислити значення виразу

Це завдання аналогічне до попереднього, тож спробуйте впоратися з ним самостійно

x,y = map(float, input('Введіть значення змінних x та y через кому: ').split(','))

if x-y == 0:

print('Ділення на нуль!')

else:

y = (x+y)/(x-y)

print(y)

ЗАВДАННЯ 16

Обчислити значення складеної функції

Як бачимо, в даному випадку формула, за якою буде обчислюватися значення функції y, залежить від того, яким було значення аргумента x. Якщо цей аргумент менший від 5, тоді потрібно піднести його до квадрата, якщо більше або дорівнює 5, тоді просто відняти 5. Оскільки варіантів тільки ДВА, то знову використаємо повну форму розгалуження:

x = float(input('Введіть аргумент x: '))

if x < 5:

y = x**2

else:

y = x-5

print('y=',y)

ЗАВДАННЯ 17

Обчислити значення складеної функції

Самостійні зусилля - шлях до успіху!

x = float(input('Введіть аргумент x: '))

if x < 0:

y = 7+abs(x**3-10)

else:

y = 15-x**2

print('y=',y)

Можливий і інший варіант:

from math import fabs

x = float(input('Введіть аргумент x: '))

if x >= 0:

y = 15-x**2

else:

y = 7+fabs(x**3-10)

print('y=',y)

Ну й наостанок, застосуємо наші знання до розв'язання дещо складнішої задачі

ЗАВДАННЯ 18

Скласти програму для обчислення суми, різниці, добутку або частки двох чисел, в залежності від вибору користувача

Ну, вводимо з клавіатури два числа, а далі... Як розрізнити ЯКУ ДІЮ слід виконувати?

А дуже просто! Відведемо для знака арифметичої дії окрему змінну типу string (рядок) і будемо перед виконанням дії перевіряти, що ж там за символ. Якщо там + - будемо виконувати додавання, якщо * - будемо множити і т.д.

1. print('Ця програма виконує будь-яку з чотирьох арифметичних дій над двома числами')

2. print('Введіть перше число, потім знак дії (+,-,*,/), потім друге число')

3. print('Після кожного введення натискайте клавішу Space')

4. a,op,b = input('Ваш приклад: ').split(' ')

5. a = float(a)

6. b = float(b)

7. if op == '+':

8. print(a+b)

9. if op == '-':

10. print(a-b)

11. if op == '*':

12. print(a*b)

13. if op == '/':

14. print(a/b)

Розберемося, як це працює.

Рядки 1-3 - це просто виведення на екран текстового повідомлення-інструкції користувачеві програми про те, як нею користуватись.

Найцікавіше починається з рядка 4. У цьому рядку ми оголошуємо про створення трьох змінних, дві з яких a i b призначені для компонентів дій, а змінна op (operator) - для зберігання знаку (+, -, *, /). Увесь введений користувачем рядок "розподіляється" по трьох змінних: перше число - в змінну a, знак дії - в змінну op, друге число - в змінну b. Щоб програма розрізнила. де закінчилося перше число і де почався оператор і т.д. використовуємо .split(' ').

Зверніть увагу, що на відміну від Завдання 13 тут ми не використовуємо map. Це тому, що в Завданні 13 ми застосовували до введених з клавіатури змінних одну й ту саму функцію float(), а тут конвертувати потрібно не усі три введених з клавіатури величини, а тільки дві: a і b, змінна op повинна так і залишатися в текстовому форматі, бо в ній міститиметься не число, а символ арифметичної дії. Ось тому використання map у даній ситуації неправильне, бо якщо ми його запишемо, то програма намагатиметься знаки +, -, *, / розпізнати як числа і виникне помилка, бо це ж ніякі не числа!

А от в рядках 5 і 6 якраз і відбувається конвертація потрібних величин (двох з трьох введених!) в числовий формат.

Далі ж стандартно. Варіантів вибору більше. ніж 2, тож використовуємо неповні розгалуження, щоб не заплутатися. Перевіряємо, який символ міститься в змінній op і, в залежності від отриманого результату порівняння, спрямовуємо обчислення на виконання потрібної арифметичної дії й виведення результату.

Результат роботи програми:

Для тих, хто хоче знати більше

Для задач такого типу, де потрібно вибрати щось з великого переліку можливих варіантів, кожний з яких залежить від співпадіння з певним шаблонним значенням, у Python 3.10 з'явився новий оператор match (англ. - співпадіння). Ось як з його використанням можна переписати нашу програму:

...

a,op,b = input('Ваш приклад: ').split(' ')

a = float(a)

b = float(b)

match op: #вибрати значення змінної op зі списку варіантів (case)

    case '+':

        print(a+b)

    case '-':

        print(a-b)

    case '*':

        print(a*b)

    case '/':

        print(a/b)

ВИСНОВКИ

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

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

ДОМАШНЄ ЗАВДАННЯ

Скласти програму для обчислення за даними сторонами площі або периметра прямокутника за вибором користувача.

Підказки

  1. За основу цієї програми можна взяти те, що ви вже робили раніше, доповнивши його формулою обчислення периметра прямокутника P=(a+b)∙2. Отже, нехай програма запитує у користувача одну сторону, потім другу, а після цього просить вибрати, що обчислювати. Якщо користувач введе S, то програма обчислюватиме площу, якщо P, то периметр.

  2. Розрізнити вибір користувача можна аналогічно до способу, використаного в Завданні 18. Тільки тут доречнішим буде спочатку запитати у користувача сторони прямокутника a,b = map(float, input(...).split(...)), а потім уже наступною командою запитати, що треба обчислювати (цей op конвертувати уже не треба, він повинен залишитися у текстовому вигляді)

  3. Відомо, що Python розрізняє велику й малу літери. Спробуйте, при тестуванні програми замість великої букви S ввести маленьку s. Що відбулося?