Ćwiczenie — używanie pętli

Ukończone

W tym ćwiczeniu utworzysz talii kart dla gry kartowej, która jest opracowywana. Użyjesz konstrukcji pętli, aby iterować na kartach, a następnie wydrukować kartę na ekranie. Twoi współpracownicy również ciężko pracują i włączyli kod utworzony w pierwszym ćwiczeniu do funkcji.

Tworzenie szkieletu projektu

Rozpocznij od utworzenia 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 wzięli kod napisany w poprzednim ćwiczeniu i przekształcili go w funkcję, dzięki czemu będzie można jej używać ponownie. Oto jak wygląda teraz kod:

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 pliku Program.fs zastąp zawartość następującym kodem:

    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 dali Ci fragment kodu do pracy. Chcą zaimplementować podobną funkcję, ale funkcja określa, co odpowiada karcie. Nadali 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ć, co odpowiada karcie. Zasady są: 0 to serca, 1 piki, 2 diamenty, i 3 kluby.

    Napiwek

    Wstrzymaj i zastanów się, jak zastosować swoją wiedzę, zanim przejdziesz dalej.

  2. Wprowadź następujące zmiany w kodzie:

    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 pliku Program.fs powinien 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 =
        // implement program
        0 // return an integer exit code
    

Gratulacje, skończyłeś częścią gry kartowej.

Ponownie twoi współpracownicy pomogli Ci utworzyć talii kart. Wszystko, co musisz zrobić, to wydrukować go. Oto kod talii kart:

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

Aby wydrukować pokład:

  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 wystarczy na przykład.

    Twoi współpracownicy ponownie napisali ci kod. Po prostu musisz wypełnić to, czego brakuje. Oto fragment kodu:

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

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

  2. Dodaj następujący kod do main() metody w celu zaimplementowania for...in pętli:

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

    Metoda main() powinna teraz wyglądać następująco:

    [<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 polecenie 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, który zaimplementował Ty i Twoi współpracownicy i opracowaliśmy go w bardziej realistyczny program.

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