Ćwiczenie — używanie pętli
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:
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 tocard
. 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, i3
kluby.Napiwek
Wstrzymaj i zastanów się, jak zastosować swoją wiedzę, zanim przejdziesz dalej.
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.
Drukuj pokład
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:
Dodaj definicję
cards
domain()
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.Dodaj następujący kod do
main()
metody w celu zaimplementowaniafor...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
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