演習 - ループを使用する
この演習では、開発中のトランプ ゲーム用のカード デッキを構築します。 ループ コンストラクトを使用してカードを反復処理し、カードを画面に出力します。 同僚の懸命な作業もあって、最初の演習で作成したコードが関数に組み込まれました。
プロジェクトをスキャフォールディングする
まず、コンソールで新しい F# プロジェクトをスキャフォールディングします。 コマンド dotnet new を実行します。
dotnet new console --language F# -o Loops
cd Loops
カードの説明を作成する
前の演習で作成したコードは、同僚が関数に組み込んでくれたことで、再利用可能になりました。 現在のコードは次のようになります。
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
カードの説明を作成するには:
Program.fs で、内容を次のコードに置き換えます。
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関数の名前は
cardDescriptionで、入力パラメーターはcardです。 同僚から、使用するコード スニペットが提供されました。 同様の関数を実装してほしいとのことですが、関数によってカードがどのスーツかを決定します。 次のコード スニペットが提供されました。let suit (no:int) : string = let suitNo:int = no / 13 // add implementation here次に、
if...elseについて得た知識を使って、カードがどのスーツかを決定します。0はハート、1はスペード、2はダイヤ、3はクラブというルールです。ヒント
次に進む前に、一息ついて知識を適用する方法について考えてみてください。
コードに次の変更を加えます。
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"Program.fs のコードは、次の例のようになります。
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
お疲れさまでした。トランプ ゲームのこの部分は終了です。
組を出力する
同僚がカード デッキを作るのを手伝ってくれました。 あなたが行う必要があるのは、それを出力することだけです。 カードの組のコードをこちらに示します。
let cards = [ 1; 10; 2; 34 ]
デッキを出力するには:
cardsの定義をmain()メソッドに追加します。[<EntryPoint>] let main argv = let cards = [ 1; 10; 2; 34 ] // implement program 0 // return an integer exit codeこの組には 4 枚のカードしか含まれていません。 より現実的な実装では、コードに 52 枚のカードをすべて含めますが、例としてはこの一覧で十分です。
同僚がここでもコードを記述してくれました。 あなたは、不足しているものを入力するだけです。 コード スニペットはこちらです。
// add for loop printfn "%s of %s" (cardDescription(card)) (suit(card))このコードは、コメントアウトされた行で構成されています。 あなたの仕事は、
for...inループを実装するコードを追加することです。次のコードを
main()メソッドに追加して、for...inループを実装します。for card in cards do printfn "%s of %s" (cardDescription(card)) (suit(card))main()メソッドは、次のコードのようになるはずです。[<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 codedotnet runを呼び出してプロジェクトを実行します。dotnet run次の出力が表示されます。
Ace of Hearts 10 of Hearts 2 of Hearts 8 of Diamonds
おめでとうございます。 ご自分と同僚が実装したコードを使って開発し、より本物そっくりのプログラムを作りました。
Program.fs は次のコードのようになります。
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