Ejercicio: usar bucles
En este ejercicio, crearemos una baraja de naipes para un juego de cartas que está en desarrollo. Usaremos construcciones de bucle para iterar por los naipes y, seguidamente, imprimir el naipe que proceda en pantalla. Nuestros compañeros también han trabajado muy intensamente y ya han incluido en una función el código que creamos en el primer ejercicio.
Scaffolding de un proyecto
Empezaremos realizando el scaffolding de un nuevo proyecto de F# en la consola. Ejecute el comando dotnet new
:
dotnet new console --language F# -o Loops
cd Loops
Creación de la descripción de un naipe
Nuestros compañeros han tomado el código que escribimos en el ejercicio anterior y lo han convertido en una función, de modo que se puede reutilizar. Este es el aspecto actual del código:
let cardDescription (card: int) : string =
let cardNo: int = card % 13
if cardNo = 1 then "Ace"
elif cardNo = 11 then "Jack"
elif cardNo = 12 then "Queen"
elif cardNo = 0 then "King"
else string cardNo
Para crear la descripción de un naipe:
En Program.fs, reemplace el contenido por el código siguiente:
open System let cardDescription (card: int) : string = let cardNo: int = card % 13 if cardNo = 1 then "Ace" elif cardNo = 11 then "Jack" elif cardNo = 12 then "Queen" elif cardNo = 0 then "King" else string cardNo [<EntryPoint>] let main argv = // implement the rest 0 // return an integer exit code
La función se denomina
cardDescription
, y el parámetro de entrada escard
. Los compañeros nos han pasado un fragmento de código con el que trabajar. Quieren que implementemos una función parecida, pero que determine a qué palo pertenece el naipe. Nos han pasado este fragmento de código:let suit (no:int) : string = let suitNo:int = no / 13 // add implementation here
Ahora, pondremos en práctica los conocimientos adquiridos sobre
if...else
para determinar a qué palo pertenece el naipe. Las reglas son:0
corresponde a corazones;1
, a picas;2
, a diamantes, y3
, a tréboles.Sugerencia
Parémonos a pensar cómo queremos poner en práctica los conocimientos adquiridos antes de continuar.
Realice los siguientes cambios en el código:
let suit (no:int) : string = let suitNo:int = no / 13 if suitNo = 0 then "Hearts" elif suitNo = 1 then "Spades" elif suitNo = 2 then "Diamonds" else "Clubs"
Ahora, el código en Program.fs debería parecerse al del siguiente ejemplo:
open System let suit (no:int) : string = let suitNo:int = no / 13 if suitNo = 0 then "Hearts" elif suitNo = 1 then "Spades" elif suitNo = 2 then "Diamonds" else "Clubs" let cardDescription (card: int) : string = let cardNo: int = card % 13 if cardNo = 1 then "Ace" elif cardNo = 11 then "Jack" elif cardNo = 12 then "Queen" elif cardNo = 0 then "King" else string cardNo [<EntryPoint>] let main argv = // implement program 0 // return an integer exit code
Enhorabuena, ha terminado esa parte del juego de naipes.
Impresión de la baraja
De nuevo, los compañeros nos han ayudado a crear una baraja de naipes, así que solo tenemos que imprimirla. Este es el código de la baraja de naipes:
let cards = [ 1; 10; 2; 34 ]
Para imprimir la baraja:
Agregue la definición
cards
al métodomain()
:[<EntryPoint>] let main argv = let cards = [ 1; 10; 2; 34 ] // implement program 0 // return an integer exit code
La baraja solo contiene cuatro naipes. En una implementación más realista, el código contendría los 52 naipes, pero esta lista es más que suficiente como ejemplo.
De nuevo, los compañeros han vuelto a escribir el código que necesitamos. Solo tenemos que rellenar lo que falta. Este es un fragmento de código:
// add for loop printfn "%s of %s" (cardDescription(card)) (suit(card))
El código consta de una línea de comentario. Nuestra tarea consiste en agregar código para implementar un bucle
for...in
.Agregue el siguiente código al método
main()
para implementar el buclefor...in
:for card in cards do printfn "%s of %s" (cardDescription(card)) (suit(card))
El método
main()
debería ser similar a este código:[<EntryPoint>] let main argv = let cards = [ 1; 10; 2; 34 ] for card in cards do printfn "%s of %s" (cardDescription(card)) (suit(card)) 0 // return an integer exit code
Llame a
dotnet run
para ejecutar el proyecto:dotnet run
Debería ver la siguiente salida:
Ace of Hearts 10 of Hearts 2 of Hearts 8 of Diamonds
¡Enhorabuena! Hemos trabajado con código que hemos desarrollado e implementado con nuestros compañeros para conseguir un programa con una apariencia más realista.
Ahora, Program.fs se parece al siguiente código:
open System
let suit (no:int) : string =
let suitNo:int = no / 13
if suitNo = 0 then "Hearts"
elif suitNo = 1 then "Spades"
elif suitNo = 2 then "Diamonds"
else "Clubs"
let cardDescription (card: int) : string =
let cardNo: int = card % 13
if cardNo = 1 then "Ace"
elif cardNo = 11 then "Jack"
elif cardNo = 12 then "Queen"
elif cardNo = 0 then "King"
else string cardNo
[<EntryPoint>]
let main argv =
let cards = [ 1; 10; 2; 34 ]
for card in cards do
printfn "%s of %s" (cardDescription(card)) (suit(card))
0 // return an integer exit code