Como en otros lenguajes, Go también ofrece una sentencia switch.
Las sentencias switch son una forma más corta de escribir sentencias largas de if ... else if.
Para hacer un switch, empezamos usando la palabra clave switch seguida de un valor o una expresión.
Luego declaramos cada una de las condiciones con la palabra clave case.
También podemos declarar un caso default, que se ejecutará cuando ninguna de las condiciones case anteriores coincida:
operatingSystem := "windows"
switch operatingSystem {
case "windows":
// do something if the operating system is windows
case "linux":
// do something if the operating system is linux
case "macos":
// do something if the operating system is macos
default:
// do something if the operating system is none of the above
}
Algo interesante de las sentencias switch es que el valor que va después de la palabra clave switch se puede omitir, y podemos tener condiciones Boolean para cada case:
age := 21
switch {
case age > 20 && age < 30:
// do something if age is between 20 and 30
case age == 10:
// do something if age is equal to 10
default:
// do something else for every other case
}
En este ejercicio vamos a simular el primer turno de una partida de Blackjack.
Recibirás dos cartas y podrás ver la carta boca arriba del crupier. Todas las cartas se representan con un string como «ace», «king», «three», «two», etc. Los valores de cada carta son:
| carta | valor | carta | valor |
|---|---|---|---|
| ace | 11 | eight | 8 |
| two | 2 | nine | 9 |
| three | 3 | ten | 10 |
| four | 4 | jack | 10 |
| five | 5 | queen | 10 |
| six | 6 | king | 10 |
| seven | 7 | other | 0 |
Nota: Comúnmente, las cartas «ace» pueden tomar el valor de 1 o 11, pero por simplicidad asumiremos que solo pueden tomar el valor de 11.
Según tus dos cartas y la carta del crupier, existe una estrategia para el primer turno del juego, en la que tienes las siguientes opciones:
Aunque todavía no es óptima, vas a seguir la estrategia que tu amigo Alex ha estado desarrollando, que es la siguiente:
Implementa una función para calcular el valor numérico de una carta:
value := ParseCard("ace")
fmt.Println(value)
// Output: 11
Escribe una función que implemente la lógica de decisión como se describe arriba:
func FirstTurn(card1, card2, dealerCard string) string
Aquí hay algunos ejemplos de los resultados esperados:
FirstTurn("ace", "ace", "jack") == "P"
FirstTurn("ace", "king", "ace") == "S"
FirstTurn("five", "queen", "ace") == "H"
Regístrate en Exercism para aprender y dominar Go con 35 conceptos167 ejercicios y mentoría humana real, todo gratis.