Track
/
Swift
Swift
/
Esercizi
/
L'assillante acquisto di un veicolo
L'assillante acquisto di un veicolo

L'assillante acquisto di un veicolo

Esercizio di apprendimento

Introduzione

Operatori di confronto

Gli operatori di confronto confrontano due valori dello stesso tipo e restituiscono un valore Bool (true o false). Se provi a confrontare valori di tipi diversi, il compilatore genera un errore.

Gli operatori di confronto standard in Swift sono:

Operatore Descrizione Esempio
== Uguale a 1 == 1 (vero)
!= Diverso da 1 != 2 (vero)
< Minore di 4 < 5 (vero)
<= Minore o uguale a 4 <= 4 (vero)
> Maggiore di 3 > 1 (vero)
>= Maggiore o uguale a 2 >= 2 (vero)

Istruzioni if ed else

Una istruzione condizionale esegue codice a seconda che una condizione sia true o false. L'istruzione condizionale più comune è l'istruzione if, che esegue un blocco di codice solo quando la sua condizione è true. Per scrivere un'istruzione if, usa la parola chiave if, seguita dalla condizione e dal blocco di codice racchiuso tra parentesi graffe:

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

Puoi abbinare if a una clausola else per eseguire codice alternativo quando la condizione è 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"

Per verificare più condizioni in sequenza, concatena le istruzioni usando else if. Un'istruzione if non richiede un ramo else, ma puoi includerne uno per gestire i casi in cui nessuna delle condizioni corrisponde:

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"

Espressioni if

Nel Swift moderno, le istruzioni if possono essere usate anche come espressioni che producono un valore. Ogni ramo restituisce un valore, il che rende semplice assegnare i risultati in modo condizionale:

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

print(architecture)
// Prints "x86_32"

Operatore ternario

L'operatore condizionale ternario è una scorciatoia concisa per un'espressione if-else. Valuta una condizione e restituisce uno di due valori a seconda che quella condizione sia true o false.

L'operatore usa tre parti: condition ? trueExpression : falseExpression. Se condition è true, viene valutata e restituita trueExpression; altrimenti, viene valutata e restituita falseExpression.

L'operatore ternario è ideale per scelte semplici, su una sola riga:

let showFahrenheit = true
let temperatureInCelsius = 30

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

L'esempio qui sopra è un equivalente compatto di:

let showFahrenheit = true
let temperatureInCelsius = 30

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

Istruzioni

In questo esercizio scriverai del codice che ti aiuterà a prepararti all'acquisto di un veicolo.

Hai tre attività: una per determinare se ti servirà qualcosa che ti aiuti a scegliere tra due veicoli, una per determinare quale patente ti servirà e una per stimare il prezzo accettabile di un veicolo usato.

1. Stabilisci se puoi permetterti o meno le rate mensili di una determinata auto

I concessionari della tua città stanno tutti proponendo una promozione di cinque anni a interesse 0% di cui vorresti approfittare. Ma non sei sicuro di poterti permettere le rate mensili dell'auto che vuoi.

La rata mensile è il prezzo totale dell'auto diviso per il numero di mesi del periodo di cinque anni.

Implementa la funzione canIBuy(vehicle:price:monthlyBudget:) che accetta i seguenti argomenti:

  • vehicle: il nome del veicolo che vuoi acquistare.
  • price: il prezzo del veicolo che vuoi acquistare.
  • monthlyBudget: la somma di denaro che puoi permetterti di pagare ogni mese.

La funzione deve restituire il seguente messaggio in base alle seguenti condizioni:

  • Se la rata mensile del veicolo è minore o uguale al budget mensile, restituisci il messaggio "Yes! I'm getting a <vehicle>".
  • Se la rata mensile del veicolo supera il tuo budget mensile fino al 10% (incluso), restituisci il messaggio "I'll have to be frugal if I want a <vehicle>".
  • Se la rata mensile del veicolo supera il tuo budget mensile di più del 10%, restituisci il messaggio "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. Determina il tipo di patente che ti servirà

Hai deciso di acquistare un veicolo usato e devi determinare quale tipo di patente ti servirà per guidarlo.

Implementa la funzione licenseType(numberOfWheels:) che accetta l'argomento numberOfWheels, cioè il numero di ruote del veicolo che vuoi acquistare.

La funzione deve restituire il seguente messaggio in base alle seguenti condizioni:

  • Se il numero di ruote è 2 o 3, restituisci il messaggio "You will need a motorcycle license for your vehicle".
  • Se il numero di ruote è 4 o 6, restituisci il messaggio "You will need an automobile license for your vehicle".
  • Se il numero di ruote è 18, restituisci il messaggio "You will need a commercial trucking license for your vehicle".
  • Se il numero è qualsiasi altro numero, restituisci il messaggio "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. Calcola una stima del prezzo di un veicolo usato

Ora che hai preso la tua decisione, vuoi assicurarti di ottenere un prezzo equo dal concessionario. Dato che vuoi acquistare un veicolo usato, il prezzo dipende da quanto è vecchio il veicolo. Per una stima approssimativa, supponi che se il veicolo ha meno di 3 anni costi l'80% del prezzo originale che aveva quando era nuovo di zecca. Se ha almeno 10 anni, costa il 50%. Se il veicolo ha almeno 3 anni ma non più di 10, costa il 70% del prezzo originale.

Implementa la funzione calculateResellPrice(originalPrice:yearsOld:) che accetta gli argomenti originalPrice, che contiene il prezzo originale del veicolo, e yearsOld, che contiene l'età del veicolo in anni. La funzione deve restituire il prezzo di rivendita del veicolo.

calculateResellPrice(originalPrice: 1000, yearsOld: 1)
// returns 800
calculateResellPrice(originalPrice: 1000, yearsOld: 5)
// returns 700
calculateResellPrice(originalPrice: 1000, yearsOld: 15)
// returns 500
Modifica tramite GitHub Il link si apre in una nuova finestra o scheda
Swift Exercism

Vuoi iniziare L'assillante acquisto di un veicolo?

Iscriviti a Exercism per imparare e padroneggiare Swift con 35 concetti116 esercizi e il mentoring di persone reali, tutto gratis.