Дайте відповіді на запитання
1. Для чого використовують прапорці, а для чого – перемикачі?
Прапорці використовують, щоб можна було вибрати один, декілька або жодного варіанта з запропонованих. Перемикачі ж потрібні для вибору лише одного варіанта з кількох можливих.
2. Як визначити стан прапорця у проєкті мовою Python?
Щоб визначити стан прапорця, потрібно пов’язати його зі спеціальною змінною типу BooleanVar(). Потім, щоб дізнатися, чи вибраний прапорець, використовують метод .get() для цієї змінної. Він поверне True, якщо прапорець вибрано, і False, якщо ні.
3. Як потрібно записувати команди розгалуження, у яких перевіряється, вибрано прапорець чи ні?
Для кожного прапорця пишуть окрему, незалежну команду розгалуження if, яка перевіряє стан відповідної змінної. Наприклад: if choice1.get():.
4. Як визначити, який перемикач вибрано у проєкті мовою Python?
Щоб визначити, який перемикач вибрано, використовують метод .get() для змінної типу IntVar(), яка є спільною для всієї групи перемикачів. Цей метод повертає значення value того перемикача, який наразі обраний.
5. Як доцільно записувати команди розгалуження, у яких перевіряється, вибрано перемикач чи ні?
Для перевірки, який саме перемикач вибрано, доцільно використовувати команду багатоальтернативного розгалуження if-elif-else. У ній послідовно перевіряється значення, яке повертає метод .get(), зі значеннями value кожного з перемикачів.
Обговоріть і зробіть висновки
1. Чи можна для прапорців використати команду багатоальтернативного розгалуження?
Ні, для прапорців не доцільно використовувати команду багатоальтернативного розгалуження (if-elif-else). Оскільки прапорці дозволяють вибрати кілька варіантів одночасно, їхні стани незалежні один від одного. Команда if-elif-else виконає лише один блок коду, що відповідає першій істинній умові, і проігнорує решту вибраних прапорців. Тому для прапорців використовують послідовні, незалежні команди if для кожного прапорця окремо.
2. Чи можна для перемикачів замість команди багатоальтернативного розгалуження використати команди розгалуження, вкладені одна в одну?
Так, технічно це можливо. Вкладені команди if-else можуть відтворити логіку багатоальтернативного розгалуження. Однак такий код буде громіздким і значно складнішим для читання та розуміння порівняно з конструкцією if-elif-else, яка спеціально призначена для вибору одного варіанту з кількох можливих.
3. Чи можна для перемикачів замість команди багатоальтернативного розгалуження використати команди розгалуження, записані послідовно, одна за одною?
Ні, це неефективно. Якщо використовувати послідовні команди if, програма буде перевіряти умову для кожного перемикача, навіть якщо потрібний вже знайдено. Оскільки з групи перемикачів можна вибрати лише один, конструкція if-elif-else є кращою, бо вона припиняє перевірку після знаходження першої ж істинної умови, що робить програму швидшою.
Виконайте завдання
1. Створіть блок-схему та поясніть хід виконання послідовності команд: if choice1.get(): <команди 1> if choice2.get(): <команди 2> де choice1 і choice2 – змінні логічного типу, пов’язані з прапорцями.

Пояснення ходу виконання:
Програма послідовно перевіряє кожен прапорець. Спочатку вона дивиться на choice1. Якщо він вибраний, то виконується перший блок команд. Незалежно від того, чи був вибраний перший прапорець, програма переходить до перевірки choice2. Якщо він також вибраний, виконується і другий блок команд. Таким чином, можуть виконатись обидва блоки команд, або тільки один з них, або жоден.
2. Створіть блок-схему та поясніть хід виконання послідовності команд: if choice.get() == 1: <команди 1> elif choice.get() == 2: <команди 2> else: <команди 3> де choice – змінна цілого типу, пов’язана з групою перемикачів.

Пояснення ходу виконання:
Програма перевіряє умови по черзі, але виконує лише один блок команд. Спочатку перевіряється, чи вибраний перемикач зі значенням 1. Якщо так, виконуються <команди 1> і вся конструкція if-elif-else завершує роботу. Якщо ні, перевіряється перемикач зі значенням 2. Якщо він вибраний, виконуються <команди 2>, і на цьому все. Якщо ж і він не вибраний, виконується блок else (<команди 3>). Завжди виконується тільки один з трьох блоків команд.
3. Поясніть відмінності у виконанні команд розгалуження із завдання № 1 та із завдання № 2.
Основна відмінність у тому, що в першому завданні (з прапорцями) можуть виконатися кілька блоків команд, бо кожна if перевірка є незалежною. У другому завданні (з перемикачами) завжди виконується лише один блок команд, оскільки конструкція if-elif-else призначена для вибору одного варіанта з кількох взаємовиключних.
4. Сформулюйте життєву задачу, у проєкті для розв’язування якої можна використати фрагмент із завдання № 1.
Задача: Вибір додаткових послуг при купівлі квитка в кіно.
Проєкт: Програма, де користувач купує квиток і може за допомогою прапорців вибрати додаткові опції: “попкорн”, “окуляри 3D”, “VIP-місце”. Програма перевірить кожен прапорець і додасть вартість обраних послуг до загальної суми.
5. Сформулюйте життєву задачу, у проєкті для розв’язування якої можна використати фрагмент із завдання № 2.
Задача: Вибір способу доставки товару з інтернет-магазину.
Проєкт: Програма, де користувач може вибрати лише один спосіб доставки за допомогою перемикачів: “самовивіз” (безкоштовно), “доставка кур’єром” (+50 грн) або “доставка поштою” (+30 грн). Програма визначить обраний варіант і розрахує кінцеву вартість замовлення.
6. Створіть математичну модель і проєкт, у якому можна обчислити суму, різницю, добуток, частку від ділення двох довільних чисел залежно від установлених позначок прапорців.
Математична модель:
- Вхідні дані: два числа
aіb, та чотири логічні змінніc_sum,c_diff,c_prod,c_div, що відповідають станам прапорців. - Вихідні дані: результати операцій, які будуть виведені.
- Процес:
- Якщо
c_sumістинне, обчислитиS = a + b. - Якщо
c_diffістинне, обчислитиD = a - b. - Якщо
c_prodістинне, обчислитиP = a * b. - Якщо
c_divістинне іb != 0, обчислитиQ = a / b.
- Якщо
Проєкт (код мовою Python):
from tkinter import *
def calculate():
a = float(entry_a.get())
b = float(entry_b.get())
result_text = ""
if sum_var.get():
result_text += f"Сума: {a + b}\\n"
if diff_var.get():
result_text += f"Різниця: {a - b}\\n"
if prod_var.get():
result_text += f"Добуток: {a * b}\\n"
if div_var.get():
if b != 0:
result_text += f"Частка: {a / b}\\n"
else:
result_text += "На нуль ділити не можна\\n"
result_label.config(text=result_text)
root = Tk()
root.title("Калькулятор з прапорцями")
sum_var = BooleanVar()
diff_var = BooleanVar()
prod_var = BooleanVar()
div_var = BooleanVar()
Label(root, text="Число a:").pack()
entry_a = Entry(root)
entry_a.pack()
Label(root, text="Число b:").pack()
entry_b = Entry(root)
entry_b.pack()
Checkbutton(root, text="Сума", variable=sum_var).pack()
Checkbutton(root, text="Різниця", variable=diff_var).pack()
Checkbutton(root, text="Добуток", variable=prod_var).pack()
Checkbutton(root, text="Частка", variable=div_var).pack()
Button(root, text="Обчислити", command=calculate).pack()
result_label = Label(root, text="Результати:")
result_label.pack()
root.mainloop()
7. Створіть математичну модель і проєкт, у якому можна обчислити або суму, або різницю, або добуток, або частку від ділення двох довільних чисел залежно від вибраного перемикача.
Математична модель:
- Вхідні дані: два числа
aіb, та одна цілочисельна зміннаoperation(1 для суми, 2 для різниці, 3 для добутку, 4 для частки). - Вихідні дані:
result— результат однієї обраної операції. - Процес:
- Якщо
operation == 1, тоresult = a + b. - Інакше якщо
operation == 2, тоresult = a - b. - Інакше якщо
operation == 3, тоresult = a * b. - Інакше якщо
operation == 4іb != 0, тоresult = a / b.
- Якщо
Проєкт (код мовою Python):
from tkinter import *
def calculate():
a = float(entry_a.get())
b = float(entry_b.get())
op = operation_var.get()
result = ""
if op == 1:
result = f"Результат: {a + b}"
elif op == 2:
result = f"Результат: {a - b}"
elif op == 3:
result = f"Результат: {a * b}"
elif op == 4:
if b != 0:
result = f"Результат: {a / b}"
else:
result = "На нуль ділити не можна"
result_label.config(text=result)
root = Tk()
root.title("Калькулятор з перемикачами")
operation_var = IntVar()
operation_var.set(1)
Label(root, text="Число a:").pack()
entry_a = Entry(root)
entry_a.pack()
Label(root, text="Число b:").pack()
entry_b = Entry(root)
entry_b.pack()
Radiobutton(root, text="Сума", variable=operation_var, value=1).pack()
Radiobutton(root, text="Різниця", variable=operation_var, value=2).pack()
Radiobutton(root, text="Добуток", variable=operation_var, value=3).pack()
Radiobutton(root, text="Частка", variable=operation_var, value=4).pack()
Button(root, text="Обчислити", command=calculate).pack()
result_label = Label(root, text="Результат:")
result_label.pack()
root.mainloop()
8. Робітник виготовляє деталі… Створіть математичну модель і проєкт з використанням перемикачів, який визначає суму грошей, зароблену робітником за місяць.
Математична модель:
- Вхідні дані:
quantity(кількість деталей),price(вартість деталі),plan(місячний план),status(цілочисельна змінна, пов’язана з перемикачами: 1 – не виконав, 2 – виконав, 3 – перевиконав). - Вихідні дані:
total_salary(загальна заробітна плата). - Процес:
- Обчислити базовий заробіток:
base_salary = quantity * price. - Визначити премію
premiumзалежно відstatus:- Якщо
status == 2(виконав план),premium = base_salary * 0.10. - Інакше якщо
status == 3(перевиконав план),premium = base_salary * 0.30. - Інакше (не виконав план),
premium = 0.
- Якщо
- Обчислити загальний заробіток:
total_salary = base_salary + premium.
- Обчислити базовий заробіток:
Проєкт (код мовою Python):
from tkinter import *
def calculate_salary():
try:
quantity = int(entry_quantity.get())
price = float(entry_price.get())
status = status_var.get()
base_salary = quantity * price
premium = 0
if status == 2:
premium = base_salary * 0.10
elif status == 3:
premium = base_salary * 0.30
total_salary = base_salary + premium
result_label.config(text=f"Зароблено: {total_salary:.2f} грн")
except ValueError:
result_label.config(text="Будь ласка, введіть числа")
root = Tk()
root.title("Розрахунок зарплати")
status_var = IntVar()
status_var.set(1)
Label(root, text="Кількість деталей:").pack()
entry_quantity = Entry(root)
entry_quantity.pack()
Label(root, text="Вартість 1 деталі:").pack()
entry_price = Entry(root)
entry_price.pack()
Label(root, text="Статус виконання плану:").pack()
Radiobutton(root, text="Не виконав", variable=status_var, value=1).pack()
Radiobutton(root, text="Виконав", variable=status_var, value=2).pack()
Radiobutton(root, text="Перевиконав", variable=status_var, value=3).pack()
Button(root, text="Розрахувати", command=calculate_salary).pack()
result_label = Label(root, text="Зароблено:")
result_label.pack()
root.mainloop()
9. Робітниця має фіксовану заробітну плату… Створіть математичну модель і проєкт з використанням прапорців, який визначає суму грошей, зароблену робітницею за місяць.
Математична модель:
- Вхідні дані:
base_salary(фіксована заробітна плата).has_children(логічна змінна:True, якщо є діти, інакшеFalse).has_violations(логічна змінна:True, якщо були порушення, інакшеFalse).
- Вихідні дані:
final_salary(підсумкова заробітна плата).
- Процес:
- Початкова зарплата дорівнює фіксованій:
current_salary = base_salary. - Якщо
has_childrenєTrue, додати доплату:current_salary = current_salary + base_salary * 0.20. - Якщо
has_violationsєTrue, відняти штраф:current_salary = current_salary - base_salary * 0.15. final_salary = current_salary.
- Початкова зарплата дорівнює фіксованій:
Проєкт (код мовою Python для файлу завдання 4.7.9.py):
from tkinter import *
def calculate_salary():
try:
base = float(entry_salary.get())
children = var_children.get()
violations = var_violations.get()
result = base
if children:
result += base * 0.20
if violations:
result -= base * 0.15
label_result.config(text=f"Підсумкова зарплата: {result:.2f} грн")
except ValueError:
label_result.config(text="Будь ласка, введіть числове значення зарплати")
root = Tk()
root.title("Розрахунок зарплати робітниці")
root.geometry("350x200")
Label(root, text="Введіть фіксовану зарплату:").pack(pady=5)
entry_salary = Entry(root)
entry_salary.pack()
var_children = BooleanVar()
Checkbutton(root, text="Є діти (доплата 20%)", variable=var_children).pack(anchor="w")
var_violations = BooleanVar()
Checkbutton(root, text="Були порушення (-15%)", variable=var_violations).pack(anchor="w")
Button(root, text="Розрахувати", command=calculate_salary).pack(pady=10)
label_result = Label(root, text="Підсумкова зарплата:")
label_result.pack()
root.mainloop()
10. Створіть проєкт з використанням двох груп перемикачів і кнопки. Перемикачі першої групи визначають колір, у який зафарбовується вікно, а перемикачі другої групи визначають, якими мають стати розміри вікна.
Проєкт (код мовою Python для файлу завдання 4.7.10.py):
from tkinter import *
def apply_settings():
# Встановлення кольору
color_choice = color_var.get()
if color_choice == "red":
root.config(bg="red")
elif color_choice == "green":
root.config(bg="green")
elif color_choice == "blue":
root.config(bg="blue")
# Встановлення розміру
size_choice = size_var.get()
if size_choice == "400x300":
root.geometry("400x300")
elif size_choice == "600x400":
root.geometry("600x400")
elif size_choice == "800x600":
root.geometry("800x600")
root = Tk()
root.title("Налаштування вікна")
root.geometry("300x250")
# Змінні для зберігання вибору
color_var = StringVar()
color_var.set("red") # Початкове значення
size_var = StringVar()
size_var.set("400x300") # Початкове значення# Перша група перемикачів: колір
Label(root, text="Виберіть колір фону:").pack(anchor="w")
Radiobutton(root, text="Червоний", variable=color_var, value="red").pack(anchor="w")
Radiobutton(root, text="Зелений", variable=color_var, value="green").pack(anchor="w")
Radiobutton(root, text="Синій", variable=color_var, value="blue").pack(anchor="w")
# Друга група перемикачів: розмір
Label(root, text="Виберіть розмір вікна:").pack(anchor="w", pady=(10, 0))
Radiobutton(root, text="400x300", variable=size_var, value="400x300").pack(anchor="w")
Radiobutton(root, text="600x400", variable=size_var, value="600x400").pack(anchor="w")
Radiobutton(root, text="800x600", variable=size_var, value="800x600").pack(anchor="w")
# Кнопка для застосування змін
Button(root, text="Застосувати", command=apply_settings).pack(pady=10)
root.mainloop()
Готуємось до вивчення нового матеріалу
1. Які процеси азиваються циклічними? Наведіть приклади.
Циклічними називають процеси, в яких певна послідовність дій повторюється кілька разів.
- Приклади з життя:
- Зміна пір року (весна, літо, осінь, зима).
- Розпорядок дня школяра (підйом, сніданок, уроки, обід, домашнє завдання, вечеря, сон).
- Ходіння по сходах, де кожен крок є повторюваною дією.
- Полив кімнатних рослин, коли ми по черзі поливаємо кожну квітку.
- Приклади в програмуванні:
- Виведення на екран таблиці множення.
- Пошук потрібного слова в тексті.
- Нарахування зарплати для всіх працівників фірми.
2. Які ви знаєте команди циклу?
У програмуванні для створення циклічних процесів найчастіше використовують дві основні команди циклу:
- Цикл
for(цикл з лічильником) — використовується, коли ми наперед знаємо, скільки разів потрібно виконати певну дію. - Цикл
while(цикл з умовою) — використовується, коли кількість повторень невідома, і цикл має виконуватися доти, доки залишається істинною певна умова.
