Created
December 19, 2024 19:36
-
-
Save Ruthenus/b57132cc01d53a2e17227d81ad6489c2 to your computer and use it in GitHub Desktop.
Week 3 Homework in IT STEP Academy (conditions tasks)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Задачі на if-else, if-elif-else | |
# ПОЧАТОК КОДУ ЗАДАЧІ | |
print("\tЗАВДАННЯ II.1\n") | |
# Ввести три числа і знайти найменше серед них. | |
try: | |
number_one = float(input("Введіть перше число: ")) | |
number_two = float(input("Введіть друге число: ")) | |
number_three = float(input("Введіть третє число: ")) | |
minimum = number_one | |
if minimum > number_two: | |
minimum = number_two | |
if minimum > number_three: | |
minimum = number_three | |
if number_one == number_two == number_three: | |
print("Усі числа рівні між собою!") | |
elif number_one == number_two == minimum: | |
print("Перші два числа рівні між собою та менші третього!") | |
elif number_two == number_three == minimum: | |
print("Останні два числа рівні між собою та менші першого!") | |
elif number_one == number_three == minimum: | |
print("Перше та третє число найменші.") | |
elif minimum == number_one: | |
print("Очевидно, перше число найменше серед трьох чисел!") | |
elif minimum == number_two: | |
print("Саме друге число найменше!") | |
else: | |
print("Отже, трєтє число і є найменше.") | |
except ValueError: | |
print("ERROR: введено не число!") | |
print("–" * 80 + "\n") | |
# КІНЕЦЬ КОДУ ЗАДАЧІ | |
# ПОЧАТОК КОДУ ЗАДАЧІ | |
print("\tЗАВДАННЯ II.3\n") | |
# Вводиться ціле число (не більше 4 розрядів!). Визначити кількість | |
# цифр у ньому. | |
# Цілі числа бувають від'ємними, тому візьмемо за модулем. | |
number = abs(int(float(input("Введіть число: ")))) | |
if 0 <= number <= 9: | |
print("Це число 1-го розряду — має 1 цифру.") | |
elif 10 <= number <= 99: | |
print("Це число 2-го розряду — має 2 цифри.") | |
elif 100 <= number <= 999: | |
print("Це число 3-го розряду — містить 3 цифри.") | |
elif 1000 <= number <= 9999: | |
print("Це число 4-го розряду — містить аж 4 цифри.") | |
else: | |
print("ВІДМОВА У СПРАЦЮВАННІ") | |
print("–" * 80 + "\n") | |
# КІНЕЦЬ КОДУ ЗАДАЧІ | |
# ПОЧАТОК КОДУ ЗАДАЧІ | |
print("\tЗАВДАННЯ II.4\n") | |
# Користувач задає координати верхнього лівого та нижнього правого | |
# кута прямокутника, а також координати точки (X, Y). Перевірити, чи | |
# належить точка цьому прямокутнику. | |
text = "Будь ласка, введіть через кому з пробілом " | |
text += "\nкоординати протилежних вершин прямокутника та довільної точки " | |
text += "на площині. \nПеревіримо, чи належить ця точка прямокутнику." | |
print(text) | |
# РОЗВ'ЯЗОК У РАЗІ БУДЬ-ЯКИХ ПРОТИЛЕЖНИХ КУТІВ ПРЯМОКУТНИКА | |
try: | |
coordinates = input("X1, Y1, X2, Y2, X, Y: ") | |
x1, y1, x2, y2, x, y = map(float, coordinates.split(", ")) | |
# Python. Довідник програміста/Марк Лутц; пер. з англ. І.В. Красікова. | |
# – Київ.: "Науковий світ", 2024. – С. 50, 167. | |
if x1 != x2 and y1 != y2: | |
if ( | |
# введено координати вершин : нижня ліва, верхня права або | |
(x1 <= x <= x2 and y1 <= y <= y2) | |
or | |
# верхня права, нижня ліва або | |
(x2 <= x <= x1 and y2 <= y <= y1) | |
or | |
# нижня права, верхня ліва або | |
(x2 <= x <= x1 and y1 <= y <= y2) | |
or | |
# верхня ліва, нижня права. | |
(x1 <= x <= x2 and y2 <= y <= y1) | |
): | |
print(f"Точка ({x}, {y}) належить прямокутнику.") | |
if (x == x1 and y == y1) or (x == x2 and y == y2): | |
print("Понад те, ця точка є вершиною!") | |
# Тут можна продовжити, чи точка знаходиться на стороні | |
# прямокутника. Але про це в наступній задачі. | |
else: | |
print(f"Точка ({x}, {y}) знаходиться поза прямокутником!") | |
else: | |
print("Це навіть не чотирикутник! Це пряма або точка!") | |
except ValueError: | |
print("ПОМИЛКА ВВЕДЕННЯ КООРДИНАТ. ПЕРЕПОЧИНЬТЕ!") | |
print("–" * 80 + "\n") | |
# КІНЕЦЬ КОДУ ЗАДАЧІ | |
# ПОЧАТОК КОДУ ЗАДАЧІ | |
print("\tЗАВДАННЯ II.5\n") | |
# Визначити, чи паралельна пряма лінія осі ординат чи осі абсцисс, | |
# якщо пряма задана двома точками. | |
print("Координати ввести раціональними числами через кому з пробілом!") | |
try: | |
coordinates_point_one = input("Введіть координати першої точки: ") | |
x1, y1 = map(float, coordinates_point_one.split(", ")) | |
coordinates_point_two = input("Введіть координати другої точки: ") | |
x2, y2 = map(float, coordinates_point_two.split(", ")) | |
if x1 != x2 or y1 != y2: | |
answer = "Це пряма лінія..." | |
if x1 == x2: | |
answer += " Ця пряма паралельна осі ординат." | |
print(answer) | |
elif y1 == y2: | |
answer += " Ця пряма паралельна осі абсцис." | |
print(answer) | |
else: | |
print(answer) | |
else: | |
print("Це точка!!!") | |
except ValueError: | |
print("ПОМИЛКА ВВЕДЕННЯ КООРДИНАТ. ВИ НАЧЕБТО ПЕРЕПОЧИЛИ!") | |
print("–" * 80 + "\n") | |
# КІНЕЦЬ КОДУ ЗАДАЧІ | |
# ПОЧАТОК КОДУ ЗАДАЧІ | |
print("\tЗАВДАННЯ II.6\n") | |
# Ввести з клавіатури шестизначний номер трамвайного (або | |
# тролейбусного) квитка і визначити, чи є він щасливим (сума трьох | |
# перших цифр дорівнює сумі трьох останніх). | |
try: | |
ticket = input("Номер квитка? ") | |
if len(ticket) == 6: | |
first_3_sum = int(ticket[0]) + int(ticket[1]) + int(ticket[2]) | |
last_3_sum = int(ticket[-3]) + int(ticket[-2]) + int(ticket[-1]) | |
if first_3_sum == last_3_sum: | |
print("Щасливий квиток!") | |
else: | |
print("Квиток підроблено!!!") | |
except ValueError: | |
print("Може, це QR-код?") | |
print("–" * 80 + "\n") | |
# КІНЕЦЬ КОДУ ЗАДАЧІ | |
# Задачі на match-case | |
# ПОЧАТОК КОДУ ЗАДАЧІ | |
print("\tЗАВДАННЯ III.I\n") | |
# Реалізувати калькулятор. Вводяться 2 будь-яких дійсних числа. | |
# Виводиться меню з пунктами для виконання операцій: додавання, | |
# віднімання, множення, ділення, залишок від ділення. | |
# Має бути перевірка ділення на 0. | |
try: | |
operand_1 = float(input("Введіть перший операнд: ")) | |
# Виводиться меню | |
print("\tДодати — натисність +\n\tВідняти — натисніть -") | |
print("\tПомножити — натисніть *\n\tПоділити – натисніть /") | |
print("\tДізнатися залишок від цілочисленного ділення — натисніть %") | |
operator = str(input("Введіть символ операції: ")) | |
operand_2 = float(input("Введіть другий операнд: ")) | |
match operator: | |
case "+": | |
print(operand_1 + operand_2) | |
case "-": | |
print(operand_1 - operand_2) | |
case "*": | |
print(operand_1 * operand_2) | |
case "/": | |
print(operand_1 / operand_2) | |
case "%": | |
print(operand_1 % operand_2) | |
case _: | |
print("Недопустимий оператор!") | |
except ValueError: | |
print("FATAL ERROR") | |
except ZeroDivisionError: | |
print("НЕСКІНЧЕННІСТЬ") | |
print("–" * 80 + "\n") | |
# КІНЕЦЬ КОДУ ЗАДАЧІ | |
# Задачі на тернарний оператор | |
# ПОЧАТОК КОДУ ЗАДАЧІ | |
print("\tЗАВДАННЯ IV.I\n") | |
# Ввести число і визначити, чи є воно парним. | |
number = int(float(input("Визначити число парне чи непарне: "))) | |
answer = "Парне!" if number % 2 == 0 else "Непарне!" | |
print(answer) | |
print("–" * 80 + "\n") | |
# КІНЕЦЬ КОДУ ЗАДАЧІ | |
# ПОЧАТОК КОДУ ЗАДАЧІ | |
print("\tЗАВДАННЯ IV.3\n") | |
# Ввести число і визначити, чи кратне воно 3, 5 та 7 одночасно. | |
number = int(float(input("Визначити чи кратне число 3, 5 і 7 одночасно: "))) | |
answer = "Так, кратне!" if number % 105 == 0 else "Ні, не кратне!" | |
print(answer) | |
print("–" * 80 + "\n") | |
# КІНЕЦЬ КОДУ ЗАДАЧІ | |
# ПОЧАТОК КОДУ ЗАДАЧІ | |
print("\tЗАВДАННЯ IV.4\n") | |
# Ввести з клавіатури п’ятизначне число і визначити, чи є воно | |
# паліндромом. Наприклад, число 12321 — це паліндром, а 12345 — ні. | |
number = str(input("Придумайте, будь ласка, п'ятизначне число: ")) | |
answer = "О, паліндром!" if number == number[::-1] else "Нічого незвичайного." | |
print(answer) | |
print("–" * 80 + "\n") | |
# КІНЕЦЬ КОДУ ЗАДАЧІ | |
# ПОЧАТОК КОДУ ЗАДАЧІ | |
print("\tЗАВДАННЯ IV.5\n") | |
# Перевірити, чи має введене число дробову частину. | |
number = float(input("Введіть будь-яке дійсне число: ")) | |
answer = "Дробове!" if number != int(number) else "Ціле!" | |
print(answer) | |
print("–" * 80 + "\n") | |
# КІНЕЦЬ КОДУ ЗАДАЧІ | |
# Задачі із зірочкою | |
# ПОЧАТОК КОДУ ЗАДАЧІ | |
print("\tЗАВДАННЯ VI.1\n") | |
# Користувач вводить з клавіатури час початку та завершення | |
# телефонної розмови. Порахувати вартість розмови, якщо вартість | |
# хвилини 15 копійок. | |
try: | |
print("\tСпілкуйся вільно, живи мобільно!") | |
print("Формат введення часу – 24-годинний, через двокрапку: ГГ:ХХ") | |
start_time = input("Введіть час початку телефонної розмови: ") | |
finish_time = input("Введіть час завершення телефонної розмови: ") | |
# На жаль, програма не враховує число, місяць, рік... | |
start_hour, start_minute = map(int, start_time.split(":")) | |
finish_hour, finish_minute = map(int, finish_time.split(":")) | |
if 0 <= start_hour <= 23 and 0 <= finish_hour <= 23: | |
if 0 <= start_minute <= 59 and 0 <= finish_minute <= 59: | |
start_minutes = start_hour*60 + start_minute | |
finish_minutes = finish_hour*60 + finish_minute | |
# Якщо розмова триває впродовж тієї ж самої доби: | |
if finish_hour > start_hour: | |
tryvalist = finish_minutes - start_minutes | |
print("\tРозмовляєш більше доби? Переходь на новий тариф!") | |
elif finish_hour == start_hour and finish_minute > start_minute: | |
tryvalist = finish_minutes - start_minutes | |
# Якщо розмова переходить на наступну добу, але не більше, | |
# то варто врахувати кількість хвилин у добі: | |
elif finish_hour == start_hour and finish_minute < start_minute: | |
tryvalist = finish_minutes + 1440 - start_minutes | |
# телефонні розмови тривалістю доба і більше не розглядаємо! | |
elif finish_hour == start_hour and finish_minute == start_minute: | |
tryvalist = 0 | |
print("Акція! Розмова менше хвилини не тарифікується!") | |
else: | |
tryvalist = finish_minutes + 1440 - start_minutes | |
print("\tЗа 30 копійок на хвилину друга доба безкоштовно!") | |
else: | |
print("Помилка! Перевір хвилини, чи від 00 до 59.") | |
else: | |
print("Помилка! Перевір години, чи від 00 до 23.") | |
taryf = 0.15 # ₴ | |
vartist = tryvalist * taryf | |
if vartist > 1: | |
vartist_hrn = int(vartist) | |
vartist_kop = round((vartist-vartist_hrn) * 100) | |
print(f"Вартість вашої розмови усього лиш {vartist_hrn} грн." + | |
f" {vartist_kop} коп.") | |
elif vartist == 1: # а такого не буде з чинним тарифом | |
print("За одну гривню небувала якість зв'язку!") | |
else: | |
vartist_kop = round(vartist*100) | |
print(f"Вартість вашої розмови {vartist_kop} коп.") | |
except: | |
print("ПОМИЛКА МЕРЕЖІ") | |
print("–" * 80 + "\n") | |
# КІНЕЦЬ КОДУ ЗАДАЧІ | |
# ПОЧАТОК КОДУ ЗАДАЧІ | |
print("\tЗАВДАННЯ VI.2\n") | |
# Ввести будь-яку дату (день, місяць, рік) і перевірити коректність | |
# введених значень. Вивести дату наступного дня. | |
try: # перевірка коректності починається тут! | |
date = input("Введіть дату за зразком: 19 грудня 2024: ").split() | |
# Виокремлюємо день, перший етап перевірки коректності дати: | |
day = int(date[0]) | |
if day < 1 or day > 31: | |
day = False | |
print("Згадайте, скільки днів у місяці.") | |
# Виокремлюємо місяць, другий етап перевірки коректності дати. | |
# Користувач має право дещо помилитися, наприклад написавши | |
# місяць у називному відмінку або з великої літери: | |
mounth = date[1][0:3].upper() | |
months_30 = ("КВІ", "ЧЕР", "ВЕР", "ЛИС") | |
months_31 = ("СІЧ", "БЕР", "ТРА", "ЛИП", "СЕР", "ЖОВ", "ГРУ") | |
if mounth not in (months_30 + months_31) and mounth != "ЛЮТ": | |
mounth = False | |
print("Виправте, будь ласка, місяць!") | |
if day == 31 and mounth in months_30: | |
day = mounth = False | |
print("У цьому місяці 30 днів. Виправте число або місяць!") | |
if mounth == "ЛЮТ" and (day == 30 or day == 31): | |
day = mounth = False | |
print("У лютому 28 днів або, коли рік високосний, 29 днів.") | |
# Виокремлюємо рік, четвертий етап перевірки: | |
year = int(date[2]) | |
# Дотримуючись християнського літочислення: | |
if year == 0: | |
calendar = False | |
print("Якогось нульового року не існує.") | |
if day == 25 and mounth == "ГРУ" and year >= 1: | |
print( | |
""" | |
Нова радість стала, яка не бувала, | |
над вертепом звізда ясна у весь світ засіяла. | |
Де Христос родився, з Діви воплотився, | |
як чоловік пеленами убого повився. | |
Пастушки з ягнятком перед тим дитятком | |
на колінця припадають, Царя-Бога вихваляють. | |
Ой Ти, Царю, Царю, Небесний Владарю, | |
даруй літа щасливії сего дому господарю. | |
Сего дому господарю і сій господині, | |
Даруй літа щасливії нашій славній Україні. | |
""" | |
) | |
if day == 24 and mounth == "СЕР" and year > 1991: | |
print(f"\n\tВільній Україні {year - 1991}!\n") | |
if year != 0: | |
print("Виберіть календар, натиснувши відповідну клавішу: ") | |
baza = "\tюліанський 1, григоріанський 2, новоюліанський 3: " | |
calendar = int(input(baza)) | |
if calendar not in {1, 2, 3}: | |
calendar = False | |
print("Значення відсутнє в базі. Перегорніть календар.") | |
# Алгоритм визначення високосного року в юліанському календарі: | |
if calendar == 1: | |
if year % 4 == 0: | |
leap_year = True | |
print("Рік переступний.") | |
else: | |
print("Рік звичайний.") | |
# Алгоритм визначення високосного року в григоріанському календарі: | |
if calendar == 2: | |
if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0): | |
leap_year = True | |
print("Рік переступний.") | |
else: | |
print("Рік звичайний.") | |
# Алгоритм визначення високосного року в новоюліанському календарі: | |
if calendar == 3: | |
if (year % 4 == 0 and year % 100 != 0) or ( | |
year % 900 == 200 or year % 900 == 600 | |
): | |
leap_year = True | |
print("Рік переступний.") | |
else: | |
print("Рік звичайний.") | |
# Нарешті висновок про правильність введеної дати: | |
if day != False and mounth != False and calendar != False: | |
# next_day = True # Завтра буде завтра. | |
today = " ".join([str(day), mounth]) # допоміжна дата | |
print("Така дата є в календарі.") | |
# "А сегодня в завтрашний день не все могут смотреть. | |
# Вернее, смотреть могут не только лишь все, | |
# мало кто может это делать." (видатний філософ сучасності) | |
match today: | |
case "31 СІЧ": | |
next_day = "1 лютого" | |
case "28 ЛЮТ": | |
next_day = "29 лютого" if leap_year else "1 березня" | |
case "29 ЛЮТ": | |
next_day = "1 березня" | |
case "31 БЕР": | |
next_day = "1 квітня" | |
case "30 КВІ": | |
next_day = "1 травня" | |
case "31 ТРА": | |
next_day = "1 червня" | |
case "30 ЧЕР": | |
next_day = "1 липня" | |
case "31 ЛИП": | |
next_day = "1 серпня" | |
case "23 СЕР": | |
next_day = "День незалежності України, 24 серпня" | |
case "31 СЕР": | |
next_day = "1 вересня" | |
case "30 ВЕР": | |
next_day = "1 жовтня" | |
case "31 ЖОВ": | |
next_day = "1 листопада" | |
case "30 ЛИС": | |
next_day = "1 грудня" | |
case "24 ГРУ": | |
next_day = "Різдво Христове, 25 грудня" | |
case "31 ГРУ": | |
year += 1 | |
if year == 0: | |
year = 1 | |
next_day = "1 січня" | |
case _: | |
day += 1 | |
mounth = "січня" if mounth == "СІЧ" else mounth | |
mounth = "лютого" if mounth == "ЛЮТ" else mounth | |
mounth = "березня" if mounth == "БЕР" else mounth | |
mounth = "квітня" if mounth == "КВІ" else mounth | |
mounth = "травня" if mounth == "ТРА" else mounth | |
mounth = "червня" if mounth == "ЧЕР" else mounth | |
mounth = "липня" if mounth == "ЛИП" else mounth | |
mounth = "серпня" if mounth == "СЕР" else mounth | |
mounth = "вересня" if mounth == "ВЕР" else mounth | |
mounth = "жовтня" if mounth == "ЖОВ" else mounth | |
mounth = "листопада" if mounth == "ЛИС" else mounth | |
mounth = "грудня" if mounth == "ГРУ" else mounth | |
# Довідник програміста Лутца, сторінка 50: | |
next_day = " ".join([str(day), mounth]) | |
# Вічний календар. Ще б трохи... Отже, формуємо "завтрашню" дату! | |
next_day = " ".join(["Наступний день –", next_day]) | |
if year > 1: | |
next_day = " ".join([next_day, str(year), "року Божого."]) | |
elif year == 1: | |
next_day = " ".join([next_day, | |
"року Воплочення Господа нашого Ісуса Христа."]) | |
elif year <= -1: | |
next_day = " ".join([next_day, str(abs(year)), | |
"року до Різдва Христового."]) | |
print(next_day) | |
except: | |
print("Гарного дня!") | |
print("–" * 80 + "\n") | |
# КІНЕЦЬ КОДУ ЗАДАЧІ | |
# Задачі на випадкові числа | |
# ПОЧАТОК КОДУ ЗАДАЧІ | |
print("\tЗАВДАННЯ V.1\n") | |
# Реалізувати програму «Мольфар-3000». | |
# Програма дає випадкову відповідь на запитання користувача | |
# з заздалегідь визначених варіантів. | |
import random | |
# Думки мольфара. | |
dumka_1 = """ | |
Клановість, корупція, економічна відсталість та відсутність перспектив для | |
молоді спонукають представників поневолених народів шукати розраду в | |
радикальному ісламі та шляхах, що ведуть від російської імперії.""" | |
dumka_2 = """ | |
Козацька нація спокійно спостерігає за ритуальними танцями матрьошечників на | |
кордонах.""" | |
dumka_3 = """ | |
Російський кролик вже в шлунку в удава вважає Сі, тому поспішати не варто.""" | |
dumka_4 = """ | |
Серед можливих сценаріїв – або переговори щодо нової обов’язкової ядерної | |
угоди, або, у разі їхнього провалу, застосування рішучих військових | |
заходів.""" | |
dumka_5 = """ | |
У білоруських виправних колоніях значно подорожчають послуги кімнат для | |
тривалих побачень.""" | |
dumka_6 = """ | |
Подорожчання алкоголю вже заплановано правительством рф на три роки | |
наперед.""" | |
dumka_7 = """ | |
На росії до кінця року очікується дефіцит техніки і товарів (особливо на | |
основі напівпровідників).""" | |
# Мольфар так просто не промовить. | |
gaslo = input("? ") | |
if gaslo == "Лемберг! Лемберг!": | |
gaslo = input("Говорить Великий Львів. ") | |
# Мольфар формує пророцтво. | |
dumky = [dumka_1, dumka_2, dumka_3, dumka_4, dumka_5, dumka_6, dumka_7] | |
# Мольфар продовжує мовчати. | |
if gaslo == "Кіт у Чоботях?": | |
izrek = random.choice(dumky) | |
print(izrek) | |
print("–" * 80 + "\n") | |
# КІНЕЦЬ КОДУ ЗАДАЧІ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment