Ćwiczenie — używanie pętli

Ukończone

W tym ćwiczeniu skompilowasz talię kart dla gry w karty, która jest w rozwoju. Użyjesz konstrukcji pętli, aby iterować po kartach, a następnie wydrukować kartę na ekranie. Twoi współpracownicy również ciężko pracowili i do funkcji dołączono kod utworzony w pierwszym ćwiczeniu.

Szkielet projektu

Rozpocznij od szkieletu nowego projektu języka F# w konsoli. Uruchom polecenie dotnet new:

dotnet new console --language F# -o Loops
cd Loops

Tworzenie opisu karty

Twoi współpracownicy zajęli kod, który napisaliśmy w poprzednim ćwiczeniu, i przekształcli go w funkcję, dzięki czemu będzie można go używać do wielokrotnego użytku. Kod wygląda teraz następująco:

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

Aby utworzyć opis karty:

  1. W programie Program.fs dodaj kod przed metodą main() .

    Kod w programie Program.fs wygląda teraz podobnie do tego przykładu:

    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
    

    Funkcja ma nazwę , cardDescription a parametr wejściowy to card. Twoi współpracownicy podali Ci fragment kodu, z który będziesz pracować. Chcą zaimplementować podobną funkcję, ale funkcja określa, co odpowiada karcie. Podali Ci ten fragment kodu:

    let suit (no:int) : string = 
        let suitNo:int = no / 13
        // add implementation here 
    

    Teraz użyj zdobytej if...else wiedzy, aby określić, jaki jest jej kolor. Reguły są takie jak: 0 jest sercam, 1 jest spadami, 2 jest rombami i 3 jest chłone.

    Porada

    Wstrzymaj się i zastanów się, jak zastosować swoją wiedzę przed przejściem do pracy.

  2. W kodzie należy wprowadzić następujące zmiany:

    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" 
    

    Kod w programie Program.fs powinien teraz wyglądać podobnie do tego przykładu:

    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
    

Gratulacje, ta część gry w karty została zakończona.

Współpracownicy pomogli Ci utworzyć talię kart. Wszystko, co musisz zrobić, to wydrukować go. Oto kod dla talii kart:

let cards = [ 1; 10; 2; 34 ]

Aby wydrukować talię:

  1. Dodaj definicję cards do main() metody :

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

    Talia zawiera tylko cztery karty. W bardziej realistycznej implementacji kod będzie zawierać wszystkie 52 karty, ale ta lista będzie wystarczająca na przykład.

    Twoi współpracownicy ponownie napisali dla Ciebie kod. Wystarczy podać brakujące dane. Oto fragment kodu:

    // add for loop
      printfn "%s of %s" (cardDescription(card)) (suit(card))
    

    Kod składa się z wiersza z komentarzem. Twoim zadaniem jest dodanie kodu w celu zaimplementowania pętli for...in .

  2. Dodaj następujący kod do metody main() , aby zaimplementować for...in pętlę:

    for card in cards do
      printfn "%s of %s" (cardDescription(card)) (suit(card))
    

    Metoda main() powinna teraz wyglądać podobnie do tego kodu:

    [<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. Uruchom projekt, wywołując :dotnet run

    dotnet run
    

    Powinny zostać wyświetlone następujące dane wyjściowe:

    Ace of Hearts 
    10 of Hearts
    2 of Hearts
    8 of Diamonds 
    

Gratulacje. Pracowaliśmy z kodem zaimplementowanym przez Ciebie i Twoich współpracowników i opracowaliśmy go w bardziej realistycznym programie.

Program.fs teraz wygląda następująco:

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