Треки
/
Swift
Swift
/
Вправи
/
Морочлива купівля автомобіля
Морочлива купівля автомобіля

Морочлива купівля автомобіля

Навчальна вправа

Вступ

Оператори порівняння

Оператори порівняння порівнюють два значення одного типу й повертають значення Bool (true або false). Якщо спробувати порівняти значення різних типів, компілятор видасть помилку.

Стандартні оператори порівняння у Swift такі:

Оператор Опис Приклад
== дорівнює 1 == 1 (правда)
!= не дорівнює 1 != 2 (правда)
< менше 4 < 5 (правда)
<= менше або дорівнює 4 <= 4 (правда)
> більше 3 > 1 (правда)
>= більше або дорівнює 2 >= 2 (правда)

Інструкції if та else

Умовна конструкція виконує код залежно від того, чи обчислюється умова до true або false. Найпоширеніша умовна конструкція - це умовний оператор if, який виконує блок коду лише тоді, коли його умова дорівнює true. Щоб написати умовний оператор if, використовують ключове слово if, після якого йде умова, а потім блок коду у фігурних дужках:

let wheelCount = 4
if wheelCount == 4 {
    print("Your vehicle is a car")
}
// Prints "Your vehicle is a car"

Можна поєднати if з частиною else, щоб виконати альтернативний код, коли умова дорівнює false:

let precipitationInMM = 0.5
if precipitationInMM > 0.5 {
    print("You will need an umbrella")
} else {
    print("You will not need an umbrella")
}
// Prints "You will not need an umbrella"

Щоб перевірити кілька умов послідовно, обʼєднують інструкції в ланцюжок за допомогою else if. Інструкція if не потребує гілки else, але її можна додати, щоб обробити випадки, коли жодна з умов не збігається:

let favoriteFruit = "Apple"

if favoriteFruit == "Banana" {
    print("Your favorite fruit is a banana")
} else if favoriteFruit == "Orange" {
    print("Your favorite fruit is an orange")
} else if favoriteFruit == "Apple" {
    print("Your favorite fruit is an apple")
} else {
    print("Your favorite fruit is not a banana, orange, or apple")
}
// Prints "Your favorite fruit is an apple"

Вираз if

У сучасному Swift інструкції if можна також використовувати як вирази, що дають значення. Кожна гілка дає значення, тож результати легко присвоювати залежно від умови:

let cpuBits = 32
let architecture = if cpuBits == 64 {
    "x86_64"
} else {
    "x86_32"
}

print(architecture)
// Prints "x86_32"

Тернарний оператор

Тернарний умовний оператор - це стислий запис виразу if-else. Він обчислює умову й повертає одне з двох значень залежно від того, чи має ця умова значення true або false.

Оператор складається з трьох частин: condition ? trueExpression : falseExpression. Якщо condition обчислюється до true, обчислюється й повертається trueExpression, інакше обчислюється й повертається falseExpression.

Тернарний оператор стане в пригоді, коли потрібен простий вибір в один рядок:

let showFahrenheit = true
let temperatureInCelsius = 30

let temperature = showFahrenheit ? temperatureInCelsius * 9 / 5 + 32 : temperatureInCelsius
print(temperature)
// Prints 86

Наведений вище приклад - це компактний відповідник такого коду:

let showFahrenheit = true
let temperatureInCelsius = 30

let temperature = if showFahrenheit {
    temperatureInCelsius * 9 / 5 + 32
} else {
    temperatureInCelsius
}

Вказівки

У цій вправі ми напишемо трохи коду, щоб підготуватися до покупки транспортного засобу.

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

1. Обчислити, чи можемо ми дозволити собі щомісячні платежі за конкретний автомобіль

Усі автодилери в нашому місті проводять пʼятирічну акцію з 0% річних, якою ми хотіли б скористатися. Але ми не впевнені, чи зможемо дозволити собі щомісячні платежі за автомобіль, який хочемо.

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

Реалізуйте функцію canIBuy(vehicle:price:monthlyBudget:), яка приймає такі аргументи:

  • vehicle - назва транспортного засобу, який ми хочемо купити.
  • price - ціна транспортного засобу, який ми хочемо купити.
  • monthlyBudget - сума грошей, яку ми можемо дозволити собі платити щомісяця.

Залежно від умов функція має повернути таке повідомлення:

  • Якщо щомісячний платіж за транспортний засіб менший або дорівнює щомісячному бюджету, поверніть повідомлення "Yes! I'm getting a <vehicle>".
  • Якщо щомісячний платіж за транспортний засіб перевищує наш щомісячний бюджет не більше ніж на 10% (включно), поверніть повідомлення "I'll have to be frugal if I want a <vehicle>".
  • Якщо щомісячний платіж за транспортний засіб перевищує наш щомісячний бюджет більше ніж на 10%, поверніть повідомлення "Darn! No <vehicle> for me".
canIBuy(vehicle: "1974 Ford Pinto", price: 516.32, monthlyBudget: 100.00)
// returns "Yes! I'm getting a 1974 Ford Pinto"
canIBuy(vehicle: "2011 Bugatti Veyron", price: 2_250_880.00, monthlyBudget: 10000.00)
// returns "Darn! No 2011 Bugatti Veyron for me"
canIBuy(vehicle: "2020 Indian FTR 1200", price: 12_500, monthlyBudget: 200)
// returns "I'll have to be frugal if I want a 2020 Indian FTR 1200"

2. Визначити, які права водія нам знадобляться

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

Реалізуйте функцію licenseType(numberOfWheels:), яка приймає аргумент numberOfWheels - кількість коліс транспортного засобу, який ми хочемо купити.

Залежно від умов функція має повернути таке повідомлення:

  • Якщо кількість коліс дорівнює 2 або 3, поверніть повідомлення "You will need a motorcycle license for your vehicle".
  • Якщо кількість коліс дорівнює 4 або 6, поверніть повідомлення "You will need an automobile license for your vehicle".
  • Якщо кількість коліс дорівнює 18, поверніть повідомлення "You will need a commercial trucking license for your vehicle".
  • Якщо це будь-яке інше число, поверніть повідомлення "We do not issue licenses for those types of vehicles".
licenseType(numberOfWheels: 2)
// returns "You will need a motorcycle license for your vehicle"
licenseType(numberOfWheels: 6)
// returns "You will need an automobile license for your vehicle"
licenseType(numberOfWheels: 18)
// returns "You will need a commercial trucking license for your vehicle"
licenseType(numberOfWheels: 0)
// returns "We do not issue licenses for those types of vehicles"

3. Обчислити орієнтовну ціну вживаного транспортного засобу

Тепер, коли ми прийняли рішення, хочеться переконатися, що в автосалоні нам дадуть справедливу ціну. Оскільки ми хочемо купити вживаний транспортний засіб, його ціна залежить від віку. Для приблизної оцінки припустімо, що якщо транспортному засобу менше ніж 3 роки, він коштує 80% початкової ціни, яку мав, коли був новим. Якщо йому щонайменше 10 років, він коштує 50%. Якщо транспортному засобу щонайменше 3 роки, але не більше ніж 10 років, він коштує 70% початкової ціни.

Реалізуйте функцію calculateResellPrice(originalPrice:yearsOld:), яка приймає аргументи originalPrice - початкова ціна транспортного засобу, та yearsOld - вік транспортного засобу в роках. Функція має повернути ціну перепродажу транспортного засобу.

calculateResellPrice(originalPrice: 1000, yearsOld: 1)
// returns 800
calculateResellPrice(originalPrice: 1000, yearsOld: 5)
// returns 700
calculateResellPrice(originalPrice: 1000, yearsOld: 15)
// returns 500
Редагувати через GitHub Посилання відкривається в новому вікні або вкладці
Swift Exercism

Час розпочати Морочлива купівля автомобіля?

Зареєструйтеся на Exercism, щоб вивчати й опановувати Swift, а також 35 концепцій116 вправ та справжнє наставництво від людей, і все це безкоштовно.