Cvičení – použití smyček

Dokončeno

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:

  1. 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 code
    

    Funkce je pojmenovaná cardDescription a vstupní parametr je card. 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 here 
    

    Teď pomocí znalostí, které jste získali if...else , určete, jaký je oblek karty. Pravidla jsou: 0 je srdce, 1 je rýč, 2 je diamanty a 3 je kluby.

    Návod

    Než budete pokračovat, pozastavte se a zamyslete se nad tím, jak své znalosti použít.

  2. 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.

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:

  1. Přidejte definici cards do main() metody:

     [<EntryPoint>]
     let main argv =
         let cards = [ 1; 10; 2; 34 ]
         // implement program
         0 // return an integer exit code
    

    Balíč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 .

  2. Do metody přidejte následující kód main() pro implementaci smyčky for...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 code
    
  3. Spusťte projekt voláním dotnet run:

    dotnet run
    

    Mě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