Функції


Функція - це виокремлений блок коду, до котрого можна неодноразово звертатись під час роботи програми Функція може приймати певні значення (аргументи) та повертати результати.


Ми створюємо програми на певній мові програмування, користуючись командами, визначеними творцями цієї мови. Саме тому ми пишемо input (щось у дужках) а не question чи zapyt, чи ще якось інакше. Є деякі слова, визначені як команди. Це своєрідні цеглинки для побудови програми.

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


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

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

Функції зручні для покращення організації, спрощення та можливості повторного використання коду.

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


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

build()

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

def build(): 

    print(“Вітання з новосіллям!”)

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

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

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


Функція без параметрів (аргументів)

def druk():
    print ("Успішно виконана операція" )


Функція з параметром 

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



def druk(m): 
print (m)


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

Параметрів, фактичних і формальних, у функції в принципі може бути кілька, основне – чітка відповідність між фактичними та формальними параметрами при визначенні та виклику функції.


Функція, яка повертає значення 

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

import random

def build(k):

    print("Вітання з новосіллям!")

    print("Стіни буде пофарбовано у",k,"колір")

    return (random.random())


def suma(x, y):
    return x + y

Якщо функція повертає кілька параметрів, у програмі можна виконати відповідне присвоєння значень кільком змінним.


Задача 1. Створимо функцію, яка одночасно визначає цілу частину та остачу від ділення


Задача 2. Надрукувати привітання з днем народження за допомогою функції: 

Happy birthday to you!
Happy birthday to you!
Happy birthday , dear Oksana
Happy birthday to you!


Задача 3. Уроки починаються о 9:00. Перерви після 1,2,5 уроку по 10 хвилин, після 3,4 уроку 15 хвилин, після 6 уроку 5 хвилин. Надрукувати розклад дзвінків. Скористатися функцією додавання N хвилин до певного часу та визначення години завершення періоду часу.



Геометрія

Задача 1. Дано координати 2 точок. Яка з них є ближчою до початку координат?


Відстань від точки з координатами (3,4) до початку координат можна знайти за теоремою Піфагора.

Інша формула дозволяє знайти відстань між двома точками на координатній площині (цією функцією можна скористатись для розв'язку наступної задачі):



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

Скористайтесь формулою Герона:



Задача 3. Чи належить точка фігурі? http://informatics.mccme.ru/mod/statements/view3.php?id=3962&chapterid=3792


Архітектура

Задача 1. Визначимо функції “побудови” панелі будинку: одна функція будує горизонтальні лінії (по кутах символ +, між ними визначена кількість символів - ). Друга функція будує рядок за схемою: | визначена кількість пробілів |

Побудова панелі передбачає виклик першої функції, кілька викликів другої, і знову виклик першої.

Наприклад, якщо потрібно побудувати панель розміром 3: спочатку виконується побудова +---+ . Далі три побудови |     |. І знову побудова +---+

Зверніть увагу, що для коректної роботи проекту потрібно встановити моноширинний шрифт, наприклад Consolas. (меню Oprions - Configure IDLE)




Задача 2. Збудувати дім з панелей на основі функцій попереднього прикладу.
Підказка: якщо в кінці команди print залишити кому, то виведення продовжиться у тому ж рядку



Алгебра

Задача 1. Скоротити дріб http://dn.hoippo.km.ua:8889/problem/1102

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

НСД (14, 21) = НСД (14, 7) = НСД (0, 7) = 7

def nsd(a,b):
    while b!=0: //поки менше число не стане рівне нулю
        if a > b: // якщо більшим є перше число
            a=a-b // замінюємо його різницею чисел
        else:
            b=b-a // інакше замінюємо різницею чисел друге число
    return a


Задача 2. Виконайте додавання звичайних дробів. Задаємо чисельник і знаменник першого та другого дробу (чотири числа). Результат додавання цих дробів виведіть у вигляді нескоротного дробу. http://dn.hoippo.km.ua:8889/problem/1103


Задача 3. Сума дробів, що рівні даному: для заданого k(k>0) знайти усі такі x та y (x≥y), для яких: 1/k = 1/x + 1/y http://dn.hoippo.km.ua:8889/problem/1317


Цікаві задачі

Задача 1. Перевірити гіпотезу Коллатца (проблема Сіракуз) для всіх чисел від 20 до 30


Візьмемо будь-яке натуральне число. Якщо воно парне – розділимо його навпіл. Якщо непарне – помножимо на 3, додамо 1 і розділимо навпіл. Повторимо ці дії з новоутвореним числом.
Гіпотеза стверджує, що незалежно від початкового числа, рано чи пізно ми отримаємо 1.

Задача 2. Равлик рухається по дереву висотою h метрів, піднімаючись за день на а метрів, та опускаючись за ніч на b метрів. На який день равлик дістанеться вершини дерева?



Задача 3.Клавіатура містить три ряди символів:


Надрукувати сусідню праворуч букву клавіатури. Вважаємо, що кожен з рядів замкнутий: p після q; lпісля a; m після z. Створити функцію знаходження літери в ряду і застосувати її до кожного з трьох рядів клавіш


Розв'язки самостійних задач:
def check(bukva, ryad):
    if a in ryad:
        n=ryad.find(a)
        if n==len(ryad)-1:
            n=-1
        print(ryad[n+1])

ryad1="qwertyuiop"
ryad2="asdfghjkl"
ryad3="zxcvbnm"
a=input()
check(a, ryad1)
check(a, ryad2)
check(a, ryad3)

Остання зміна: понеділок 13 липня 2020 4:22