Parcours
/
Swift
Swift
/
Exercices
/
L'achat d'un véhicule contrariant
L'achat d'un véhicule contrariant

L'achat d'un véhicule contrariant

Exercice d'apprentissage

Introduction

Les opérateurs de comparaison

Les opérateurs de comparaison comparent deux valeurs du même type et renvoient une valeur Bool (true ou false). Si tu essaies de comparer des valeurs de types différents, le compilateur produit une erreur.

Voici les opérateurs de comparaison standard en Swift :

Opérateur Description Exemple
== Égal à 1 == 1 (vrai)
!= Différent de 1 != 2 (vrai)
< Inférieur à 4 < 5 (vrai)
<= Inférieur ou égal à 4 <= 4 (vrai)
> Supérieur à 3 > 1 (vrai)
>= Supérieur ou égal à 2 >= 2 (vrai)

Les instructions if et else

Une instruction conditionnelle exécute du code selon qu'une condition vaut true ou false. L'instruction conditionnelle la plus courante est l'instruction if, qui exécute un bloc de code seulement quand sa condition vaut true. Pour écrire une instruction if, on utilise le mot-clé if, suivi de la condition et du bloc de code entre accolades :

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

Tu peux associer if à une clause else pour exécuter un autre code quand la condition vaut 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"

Pour tester plusieurs conditions à la suite, on enchaîne les instructions avec else if. Une instruction if n'a pas besoin d'une branche else, mais tu peux en ajouter une pour gérer le cas où aucune des conditions ne correspond :

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"

L'expression if

En Swift moderne, les instructions if peuvent aussi servir d'expressions qui produisent une valeur. Chaque branche s'évalue en une valeur, ce qui facilite l'affectation d'un résultat selon une condition :

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

print(architecture)
// Prints "x86_32"

L'opérateur ternaire

L'opérateur conditionnel ternaire est une forme abrégée concise d'une expression if-else. Il évalue une condition et renvoie l'une de deux valeurs selon que cette condition vaut true ou false.

L'opérateur comporte trois parties : condition ? trueExpression : falseExpression. Si condition vaut true, c'est trueExpression qui est évaluée et renvoyée ; sinon, c'est falseExpression qui est évaluée et renvoyée.

L'opérateur ternaire est idéal pour des choix simples qui tiennent sur une seule ligne :

let showFahrenheit = true
let temperatureInCelsius = 30

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

L'exemple ci-dessus est une version plus compacte du code ci-dessous :

let showFahrenheit = true
let temperatureInCelsius = 30

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

Instructions

Dans cet exercice, tu vas écrire du code pour t'aider à te préparer à acheter un véhicule.

Tu as trois tâches : l'une pour déterminer si tu peux assumer les mensualités d'une voiture, l'une pour déterminer le type de permis de conduire dont tu auras besoin, et l'une pour estimer le prix acceptable d'un véhicule d'occasion.

1. Détermine si tu peux assumer les mensualités d'une voiture donnée

Les concessionnaires automobiles de ta ville proposent tous une promotion sur cinq ans à 0 % d'intérêt dont tu aimerais profiter. Mais tu n'es pas sûr de pouvoir assumer les mensualités de la voiture que tu veux.

La mensualité correspond au prix total de la voiture divisé par le nombre de mois de la période de cinq ans.

Implémente la fonction canIBuy(vehicle:price:monthlyBudget:) qui prend les arguments suivants :

  • vehicle : le nom du véhicule que tu veux acheter.
  • price : le prix du véhicule que tu veux acheter.
  • monthlyBudget : le montant que tu peux te permettre de payer chaque mois.

La fonction doit renvoyer le message suivant selon les conditions suivantes :

  • Si la mensualité du véhicule est inférieure ou égale au budget mensuel, renvoie le message "Yes! I'm getting a <vehicle>".
  • Si la mensualité du véhicule dépasse ton budget mensuel de 10 % au maximum (borne incluse), renvoie le message "I'll have to be frugal if I want a <vehicle>".
  • Si la mensualité du véhicule dépasse ton budget mensuel de plus de 10 %, renvoie le message "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. Détermine le type de permis de conduire dont tu auras besoin

Tu as décidé d'acheter un véhicule d'occasion et tu dois déterminer quel type de permis de conduire il te faudra pour le conduire.

Implémente la fonction licenseType(numberOfWheels:) qui prend l'argument numberOfWheels, le nombre de roues du véhicule que tu veux acheter.

La fonction doit renvoyer le message suivant selon les conditions suivantes :

  • Si le nombre de roues vaut 2 ou 3, renvoie le message "You will need a motorcycle license for your vehicle".
  • Si le nombre de roues vaut 4 ou 6, renvoie le message "You will need an automobile license for your vehicle".
  • Si le nombre de roues vaut 18, renvoie le message "You will need a commercial trucking license for your vehicle".
  • Pour tout autre nombre, renvoie le message "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. Estime le prix d'un véhicule d'occasion

Maintenant que tu as pris ta décision, tu veux t'assurer d'obtenir un prix correct chez le concessionnaire. Comme tu envisages d'acheter un véhicule d'occasion, le prix dépend de l'âge du véhicule. Pour une estimation approximative, considère que si le véhicule a moins de 3 ans, il coûte 80 % de son prix d'origine à l'état neuf. S'il a au moins 10 ans, il coûte 50 %. Si le véhicule a au moins 3 ans mais pas plus de 10 ans, il coûte 70 % de son prix d'origine.

Implémente la fonction calculateResellPrice(originalPrice:yearsOld:) qui prend les arguments originalPrice, le prix d'origine du véhicule, et yearsOld, l'âge du véhicule en années. La fonction doit renvoyer le prix de revente du véhicule.

calculateResellPrice(originalPrice: 1000, yearsOld: 1)
// returns 800
calculateResellPrice(originalPrice: 1000, yearsOld: 5)
// returns 700
calculateResellPrice(originalPrice: 1000, yearsOld: 15)
// returns 500
Modifie via GitHub Le lien s'ouvre dans une nouvelle fenêtre ou un nouvel onglet
Swift Exercism

Prêt à commencer L'achat d'un véhicule contrariant ?

Inscris-toi sur Exercism pour apprendre et maîtriser Swift avec 35 concepts116 exercices, et un vrai mentorat humain, le tout gratuitement.