Tracks
/
Swift
Swift
/
Ejercicios
/
La fastidiosa compra de un vehículo
La fastidiosa compra de un vehículo

La fastidiosa compra de un vehículo

Ejercicio de aprendizaje

Introducción

Operadores de comparación

Los operadores de comparación comparan dos valores del mismo tipo y devuelven un valor Bool (true o false). Si intentas comparar valores de tipos distintos, el compilador produce un error.

Los operadores de comparación estándar en Swift son:

Operador Descripción Ejemplo
== Igual a 1 == 1 (verdadero)
!= Distinto de 1 != 2 (verdadero)
< Menor que 4 < 5 (verdadero)
<= Menor o igual que 4 <= 4 (verdadero)
> Mayor que 3 > 1 (verdadero)
>= Mayor o igual que 2 >= 2 (verdadero)

Sentencias if y else

Una sentencia condicional ejecuta código según si una condición se evalúa como true o false. El condicional más común es la sentencia if, que solo ejecuta un bloque de código cuando su condición es true. Escribe una sentencia if con la palabra clave if, seguida de la condición y del bloque de código encerrado entre llaves:

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

Puedes combinar if con una cláusula else para ejecutar código alternativo cuando la condición es 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"

Para probar varias condiciones en secuencia, encadena sentencias con else if. Una sentencia if no requiere una rama else, pero puedes incluirla para cubrir los casos en los que ninguna de las condiciones coincida:

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"

Expresiones if

En el Swift moderno, las sentencias if también pueden usarse como expresiones que producen un valor. Cada rama se evalúa como un valor, lo que facilita asignar resultados de forma condicional:

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

print(architecture)
// Prints "x86_32"

Operador ternario

El operador condicional ternario es una forma abreviada y concisa de una expresión if-else. Evalúa una condición y devuelve uno de dos valores según si esa condición es true o false.

El operador usa tres partes: condition ? trueExpression : falseExpression. Si condition se evalúa como true, se evalúa trueExpression y se devuelve ese valor; de lo contrario, se evalúa falseExpression y se devuelve ese valor.

El operador ternario es ideal para elecciones simples de una sola línea:

let showFahrenheit = true
let temperatureInCelsius = 30

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

El ejemplo anterior es un equivalente compacto de:

let showFahrenheit = true
let temperatureInCelsius = 30

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

Instrucciones

En este ejercicio, escribirás algo de código para ayudarte a prepararte para comprar un vehículo.

Tienes tres tareas: una para determinar si puedes pagar las cuotas mensuales, otra para determinar qué tipo de licencia de conducir necesitarás y una para estimar el precio aceptable de un vehículo usado.

1. Calcula si puedes pagar las cuotas mensuales de un auto determinado

Los concesionarios de autos de tu ciudad están ofreciendo una promoción de cinco años con 0% de interés que te gustaría aprovechar. Pero no sabes si podrás pagar las cuotas mensuales del auto que quieres.

La cuota mensual es el precio total del auto dividido entre el número de meses del periodo de cinco años.

Implementa la función canIBuy(vehicle:price:monthlyBudget:) que recibe los siguientes argumentos:

  • vehicle: el nombre del vehículo que quieres comprar.
  • price: el precio del vehículo que quieres comprar.
  • monthlyBudget: la cantidad de dinero que puedes pagar cada mes.

La función debe devolver el siguiente mensaje según las siguientes condiciones:

  • Si la cuota mensual del vehículo es menor o igual al presupuesto mensual, devuelve el mensaje "Yes! I'm getting a <vehicle>".
  • Si la cuota mensual del vehículo supera tu presupuesto mensual en hasta un 10% (inclusive), devuelve el mensaje "I'll have to be frugal if I want a <vehicle>".
  • Si la cuota mensual del vehículo supera tu presupuesto mensual en más del 10%, devuelve el mensaje "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 el tipo de licencia de conducir que necesitarás

Has decidido comprar un vehículo usado y necesitas determinar qué tipo de licencia de conducir necesitarás para manejarlo.

Implementa la función licenseType(numberOfWheels:) que recibe el argumento numberOfWheels, que es el número de ruedas del vehículo que quieres comprar.

La función debe devolver el siguiente mensaje según las siguientes condiciones:

  • Si el número de ruedas es 2 o 3, devuelve el mensaje "You will need a motorcycle license for your vehicle".
  • Si el número de ruedas es 4 o 6, devuelve el mensaje "You will need an automobile license for your vehicle".
  • Si el número de ruedas es 18, devuelve el mensaje "You will need a commercial trucking license for your vehicle".
  • Si el número es cualquier otro, devuelve el mensaje "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. Calcula una estimación del precio de un vehículo usado

Ahora que tomaste tu decisión, quieres asegurarte de que obtienes un precio justo en el concesionario. Como te interesa comprar un vehículo usado, el precio depende de la antigüedad del vehículo. Como estimación aproximada, supón que si el vehículo tiene menos de 3 años, cuesta el 80% del precio original que tenía cuando era nuevo. Si tiene al menos 10 años, cuesta el 50%. Si el vehículo tiene al menos 3 años pero no más de 10, cuesta el 70% del precio original.

Implementa la función calculateResellPrice(originalPrice:yearsOld:) que recibe los argumentos originalPrice, que contiene el precio original del vehículo, y yearsOld, que contiene la antigüedad del vehículo en años. La función debe devolver el precio de reventa del vehículo.

calculateResellPrice(originalPrice: 1000, yearsOld: 1)
// returns 800
calculateResellPrice(originalPrice: 1000, yearsOld: 5)
// returns 700
calculateResellPrice(originalPrice: 1000, yearsOld: 15)
// returns 500
Editar en GitHub El enlace se abre en una ventana o una pestaña nuevas
Swift Exercism

¿Todo listo para empezar La fastidiosa compra de un vehículo?

Regístrate en Exercism para aprender y dominar Swift con 35 conceptos116 ejercicios y mentoría humana real, todo gratis.