Cvičení – použití smyček
V tomto cvičení vytvoříte balíček karet pro karetní hru, která je ve vývoji. Pomocí konstruktorů smyčky iterujete karty a pak kartu vytisknete na obrazovce. Vaši kolegové také tvrdě pracovali a zahrnuli kód, který jste vytvořili v prvním cvičení, do funkce.
Generování uživatelského rozhraní projektu
Začněte generováním nového projektu jazyka F# v konzole. Spusťte příkaz dotnet new:
dotnet new console --language F# -o Loops
cd Loops
Vytvoření popisu karty
Vaši kolegové vzali kód, který jste napsali v předchozím cvičení, a změnili ho na funkci, takže je opakovaně použitelný. Kód teď vypadá takto:
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
Vytvoření popisu karty:
V souboru Program.fs nahraďte obsah následujícím kódem:
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 codeFunkce je pojmenovaná
cardDescriptiona vstupní parametr jecard. Vaši kolegové vám dali fragment kódu, se kterým můžete pracovat. Chtějí, abyste implementovali podobnou funkci, ale funkce určuje, co je karta. Dali vám tento fragment kódu:let suit (no:int) : string = let suitNo:int = no / 13 // add implementation hereTeď pomocí znalostí, které jste získali
if...else, určete, jaký je oblek karty. Pravidla jsou:0je srdce,1je rýč,2je diamanty a3je kluby.Návod
Než budete pokračovat, pozastavte se a zamyslete se nad tím, jak své znalosti použít.
Proveďte následující změny kódu:
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"Kód v souboru Program.fs by teď měl vypadat jako v tomto příkladu:
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
Blahopřejeme, dokončili jste tuto část karetní hry.
Tisk prezentace
Vaši kolegové vám opět pomohli vytvořit balíček karet. Stačí, když ho vytisknete. Tady je kód balíčku karet:
let cards = [ 1; 10; 2; 34 ]
Tisk prezentace:
Přidejte definici
cardsdomain()metody:[<EntryPoint>] let main argv = let cards = [ 1; 10; 2; 34 ] // implement program 0 // return an integer exit codeBalíček obsahuje pouze čtyři karty. V realističtější implementaci by kód obsahoval všech 52 karet, ale tento seznam bude stačit například.
Vaši kolegové za vás znovu napsali nějaký kód. Stačí vyplnit, co chybí. Tady je fragment kódu:
// add for loop printfn "%s of %s" (cardDescription(card)) (suit(card))Kód se skládá z řádku s komentářem. Vaším úkolem je přidat kód pro implementaci smyčky
for...in.Do metody přidejte následující kód
main()pro implementaci smyčkyfor...in:for card in cards do printfn "%s of %s" (cardDescription(card)) (suit(card))Metoda
main()by teď měla vypadat takto:[<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 codeSpusťte projekt voláním
dotnet run:dotnet runMěl by se zobrazit následující výstup:
Ace of Hearts 10 of Hearts 2 of Hearts 8 of Diamonds
Blahopřejeme. Pracovali jste s kódem, který jste vy a vaši kolegové implementovali a vytvořili v realističtějším programu.
Program.fs teď vypadá takto:
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