sugulogの日記

Rubyの練習問題No.1。コードを読み解きプログラミング思考力を高めよう。

スポンサードリンク

f:id:sugulog:20200928154624p:plain
こんにちは、すぐるです!

sugulogをお読みいただきありがとうございます!!

このブログは、「 過去の無知な自分に向けてわかりやすく説明するなら?? 」を基準に書いています。

少しでもお役に立てれば幸いです。

 

kk今回は、コードを読み解きプログラミング思考力を高めようということで

  • Rubyの練習問題No.1

について簡単に解説します!!

その為このブログを読むことで、プログラミング思考力を高められるのはもちろん、Rubyの練習問題として理解を深めることもできます。

是非最後までご愛読ください。

 

今回は、

Rubyの練習問題No.1

について順番に解説します。

では早速、みていきましょう!!

※解説は一例です。

Rubyの練習問題No.1

1.以下のコードの時、最終的にx・y・zで表示される値を答えなさい。

f:id:sugulog:20200928143059p:plain

解説

ポイントはコードは上から1つずつ順に処理されていくということです。

順に流れを追っていくと始めにxとyを定義し、2.timesの中でzを定義しています。

その後、3.timesの処理を行うことでxとzは3となります。

また3.times後のxとyの自己代入演算子よりxは4、yは1となります。

これで2timesのendまでの1回目の処理が終了し、2回目の処理に入ります。

z=0より3であった値は0となります。

その後、3.timesの処理を行うことでxは7、zは3となります。

最後に3.times後のxとyの自己代入演算子よりxは8、yは2となります。

そのため最終的に表示される値は、x:8、y:2、z:3です。

2.以下のa、b、cで表示される値を答えなさい。

f:id:sugulog:20200928150553p:plain

  解説

ポイントは配列とハッシュがどのように管理されているのかをしっかり把握することです。

上記のコードをよりわかりやすくするために、以下のように添字番号を記述しました。

f:id:sugulog:20200928151815p:plain

puts arrayの後の1つ目の[ ]は、2行目で定義された配列からどの添字番号に該当する値を取り出すかを記述しています。

そして2つ目の[ ]はaの場合だと添字0の配列に該当する配列の添字番号を指定し、cの場合だとハッシュのキーを指定しています。

そのためaでは配列添字0の配列添字1のりんご、bでは配列添字2のsoccer、cでは配列添字1のハッシュのキーageの26が表示されます。

 3.以下のコードからusersの全てのnameだけを取得し「suguru」、「takashi」、「taro」が出力されるようなコードを記述しなさい。

f:id:sugulog:20201021174048p:plain

解説

f:id:sugulog:20201021180410p:plain

ポイントは、配列とハッシュで構成されている全体像をしっかりと掴むことです。

usersの情報は配列の中にいくつかのハッシュで構成さており、今回はnameの値を全て表示するという条件でした。

まずは配列の中のピンク色で表示されているハッシュを1つずつ取り出す必要があります。

そのためeachを使い取り出します。

次に29行目ではブロック変数u(配列から取り出されたハッシュ)の中のuserキーのハッシュ、さらにuserキーのハッシュの中のprofileキーのハッシュ、さらにprofileキーのハッシュの中のnameキーの値を指定しています。

その結果、プログラムを実行するとsuguru、takashi、taroというnameの値が出力されます。

4.下記のコードにコードを追加し最終的に、名前:suguru、出身地:京都、年齢:26と出力させるコードを完成させなさい。

f:id:sugulog:20201021193416p:plain

解説

f:id:sugulog:20201021200259p:plain

initializeメソッドはインスタンスが生成された瞬間に実行される処理を定義するメソッドです。

そのためnewメソッドでのインスタンスを生成時に、引数としてsuguruなどの値を渡します。

後は各値に対し値を返すためのインスタンスメソッドを記述し、putsで各インスタンスメソッドを呼び出し式展開で記述しています。

その結果、プログラムを実行すると名前:suguru、出身地:京都、年齢:26という値が出力されます。

5.今日の曜日を表示し続けるコードをDateクラスを使用して記述しなさい。ただし、金曜日だった場合だけ「金曜日!!」と表示させなさい。

解説

f:id:sugulog:20201021225952p:plain

1行目でDateクラスを読み込んでいます。

3行目で今日の曜日を0(日曜)〜6(土曜)の数値で取得しています。

また4行目で取得した数値に対する曜日を配列で定義しています。

そして6行目から10行目でif文を使用し、金曜日の場合のみ「金曜日!!」と表示されるように条件分岐しています。

ポイントとして3行目の変数dayで取得した数値を配列のインデックスして指定することで、数値に該当する曜日を表示させています。

6.timesメソッドを使い110までの数値を順番に足し合わせて、最後に全て足した結果を出力するプログラムを記述しなさい。

解説

f:id:sugulog:20201022180547p:plain

1〜10を順番に足すということを分解していくと、1+2=3、3+3=6、6+4=10...と前2つの数字の合計を順に次の数値に足していくということです。

まずtimesメソッドを使用することで、1〜10の数値の出力は変数ブロックを使うことで表すことができます。

ただ注意点として変数ブロックのiは0スタートなので+1をしてあげる必要があります。

また3、6、10といった前2つの数字の合計は、1+2=n、n+3=n、n+4=n...と表すことができます。

つまりn = i + 1 + nと表すことができます。

i+nに関しては変数ブロックのiは0スタートなので+1をしてあげる必要があるに該当します。

最後に自己代入演算子が使えるのでn += i + 1とコードを整えることで完成です。

7.名前以外にピリオド(.)や空白があるとエラーと表示され、ない場合はOKと表示される名前を入力するメソッドを作成しなさい。

解説

f:id:sugulog:20201022192553p:plain

まずは13行目で名前を入力してもらい、15行目で名前のチェックを行うメソッドを呼び出すと同時に引数で入力された名前を渡しています。
そして呼び出されたメソッドでは1行目で引数を受け取っています。

2行目からはif文を使用しinclude?メソッドでピリオド(.)や空白( )が含まれているか判定しています。

含まれている場合はエラーと表示され、含まれていない場合はOKと表示させています。

8.以下のコードを実行したとき、出力される値を答えなさい。

f:id:sugulog:20201022212658p:plain

解説

3行目のeachで黄色の配列からピンク色の配列をそれぞれ取り出しています。

変数ブロックfruitには取り出した各配列が代入されています。

次に5行目のeachではfruitに格納されている配列の添字1に該当する、青色で表示されている配列を指定し取り出しています。

変数ブロックpriceにはfruitから取り出した各配列が代入されています。

後は自己代入を行い配列から取り出した数値を足しています。

その結果最終的には以下のように表示されます。

f:id:sugulog:20201022214908p:plain

 9.aとbどちらもTrueまたはFalseであればTrueと出力し、どちらかがFalseでどちらかがTrueであればFalseと出力するメソッドを論理演算子を使用し記述しなさい。

解説

f:id:sugulog:20201023002933p:plain

論理演算子ではどちらもは&&で記述することができ、どちらもTrueの場合はa&&b、どちらもFalseの場合は!a&&!bで表すことができます。

また||を記述することでまたはの条件を定義することができます。

後はif文に従って記述すれば完成です。

10.以下のコードからキーとバリューを取り出し、神奈川県の県庁所在地:横浜市とだけ表示されるコードを追加しなさい。

f:id:sugulog:20201024145729p:plain

解説

f:id:sugulog:20201024150316p:plain

まず5行目のeachで配列からハッシュを取り出しています。

6行目のeachでは変数ブロックarrayに代入されたハッシュのキーとバリューの組み合わせをそれぞれ1つずつ取り出しています。

その際のブロック変数を2つ定義することでキーとバリュー両方を値を取得することができます。

後は表示させるのはキーが神奈川県でバリューが横浜市の組み合わせだけなので、if文を使いvalue横浜市の時だけ表示させるようにしています。

 

以上、今回のブログでした。

プログラミング思考力を高められ、Rubyの練習問題として理解を深めることもできましたか??

プログラミングは処理を組み立てていく力が非常に大切です。

少しずつプログラミングの考え方に慣れていきましょう。

今回のToDo

分からなかった問題を復習しもう一度解いてみましょう。(≧∀≦)/

sugulog.hatenadiary.jp

 

最後に!!

今後も、「 過去の無知な自分に向けてわかりやすく説明するなら?? 」を基準にブログを書いていきます。

少しでも気になった方はお試しでもいいので1度読者登録お願いします!

最後までご愛読いただきありがとうございました!!