【Ruby】レッスン2-05:while文による繰り返し処理を理解しよう

記事内に商品プロモーションを含む場合があります

この記事で学べる知識:while文による繰り返し処理

この記事の練習問題を解くために必要な知識:
基礎文法(レッスン1)比較演算子と論理演算子if文による分岐処理case文による分岐処理for文による繰り返し処理while文による繰り返し処理until文による繰り返し処理繰り返しの制御

<<前のページ Ruby記事一覧 次のページ>>

Rubyの文法「while文による繰り返し処理」とは

ここではwhile文による繰り返し処理の意味や使い方を学習します。必要ない方はここをクリックして練習問題へ飛びましょう。

Rubyには特定の条件が満たされるまで処理を繰り返す「while文」があります。

この文法を使うと条件に応じた回数で繰り返し処理を実行できるため、特定の条件下で同じ処理を何度も行いたい場合に便利です。

while文はプログラムの基本構造の一つであり、繰り返し処理の理解を深めるために重要です。

while文とは

while文は指定した条件が「真(true)」である限り、内部の処理を繰り返す文法です。

条件が「偽(false)」になると繰り返しが終了し、次の処理に移ります。

条件の設定次第では、繰り返しが実行されない(最初から条件が満たされていない)こともあります。

while文の基本構文

while文の基本構文は以下のようになります。

while 条件
  # 繰り返し処理
end

構文の流れは最初に「条件」が評価され、その結果がtrueであれば内部の処理が実行されます。

そして再び「条件」が評価され、trueである限り繰り返しが続きます。

falseになると繰り返しが終了します。

while文の使用例

具体的な例として、カウントダウンを行うプログラムを作成してみましょう。

このプログラムでは、数値が0に達するまで「カウントダウン」を表示します。

count = 5  # カウントの開始点を設定

while count > 0 変数countが0よりも大きければ処理を実施
  puts count  # 現在のカウントを表示
  count -= 1  # カウントを1ずつ減らす
end

puts "カウントダウン終了!"  # カウントダウンの終了を表示

このプログラムはcountの値が0より大きい限りputs countが実行され、countが1ずつ減少します。

最終的にcountが0になった時点で条件がfalseとなり、繰り返しが終了して「カウントダウン終了!」と表示されます。

無限ループに注意する方法

while文を使う際には無限ループに注意が必要です。

無限ループとは、条件が常にtrueのまま変更されず、繰り返しが永遠に終わらない状態を指します。

例えば以下のようなコードは無限ループを引き起こします。

i = 1

while i > 0
  puts i
end

このコードではiの値が変化しないため、条件が永遠にtrueのままとなり、プログラムは終了しません。

無限ループを避けるためには、ループ内で条件が変化するように適切に処理を追加する必要があります。

まとめ

while文は指定した条件が満たされている間に繰り返し処理を実行する制御構造で、繰り返し処理の基本となります。

while文の正しい使用方法を学び、無限ループに気をつけながら使うことで、より柔軟なプログラムを作成できるようになります。

for文と並んでよく使用されるwhile文を、しっかりとマスターしましょう。

while文による繰り返し処理の練習問題:指定した数までカウントアップしよう

ユーザーが指定した数まで、1から順に数を表示するプログラムを作成してください。

このプログラムではwhile文を使って繰り返し処理を行います。

ユーザーに終了する数を入力してもらい、1から指定した数までの値を順に表示し、最後に完了メッセージを表示します。

この問題の要件

以下の要件に従ってコードを完成させてください。

  1. printを使って「終了する数を入力してください: 」と表示し、ユーザーに終了する数を入力してもらうこと。
  2. 入力された数を整数としてend_numberという変数に格納すること。
  3. 変数iを1で初期化し、iend_number以下の間、次の処理を繰り返すこと。
    • 現在のiの値をputsを使って表示すること。
    • iを1増やすこと。
  4. 繰り返しが終了した後に、putsで「1から○までの数をすべて表示しました。」と出力すること(○には入力されたend_numberが入る)。

ただし、以下のような実行結果となること。

----- ↓出力される結果の例↓ -----

終了する数を入力してください: 5
現在の数値: 1
現在の数値: 2
現在の数値: 3
現在の数値: 4
現在の数値: 5
1から5までの数をすべて表示しました。

この問題を解くヒント

1からコードを組み立てることが難しい場合は、以下のヒントを開いて参考にしましょう。

ヒント1【コードの構成を見る】

正解のコードは上から順に以下のような構成となっています。
(※下記の□はコード内のインデントを表しています)

1:ユーザーに終了する数を入力させ、「終了する数を入力してください: 」と出力
2:ユーザーの入力を整数に変換してend_numberに格納
3:変数iを1で初期化
4:while文を使ってループ開始、iend_number以下である間繰り返し
  □ 現在のiの値を出力
  □ iに1を加算
5:ループ終了後、「1から#{end_number}までの数をすべて表示しました。」と出力

ヒント2【穴埋め問題にする】

以下のコードをコピーし、コメントに従ってコードを完成させて下さい。

# 終了する数値を入力するように促す
print "終了する数を入力してください: "
end_number = gets.to_i  # ユーザーからの入力を整数に変換して格納

# カウンタ変数を初期化
i = 1

# while文の開始。iがend_number以下である間、ループを繰り返す
=begin
【穴埋め問題1】
ここでwhile文を使って、変数iがend_number以下である間、現在の数値を表示し、カウンタを1増加させるコードを書いてください。
=end

# ループが終了したことを表示
puts "1から#{end_number}までの数をすべて表示しました。"

この問題の穴埋めコードは以上です。

このヒントを見てもまだ回答を導き出すのが難しいと感じる場合は、先に正解のコードと解説を見て内容を理解するようにしましょう。



練習問題の解答と解説

この問題の一つの正解例とそのコードの解説を以下に示します。

正解コードの例

例えば以下のようなプログラムが考えられます。

# 終了する数値を入力するように促す
print "終了する数を入力してください: "
end_number = gets.to_i  # ユーザーからの入力を整数に変換して格納

# カウンタ変数を初期化
i = 1

# while文の開始。iがend_number以下である間、ループを繰り返す
while i <= end_number
  # 現在のカウンタの値を表示
  puts "現在の数値: #{i}"
  
  # カウンタを1ずつ増加させる
  i += 1
end

# ループが終了したことを表示
puts "1から#{end_number}までの数をすべて表示しました。"

正解コードの解説

今回のコードでは、ユーザーが指定した数まで1から順に表示するプログラムを作成しています。

特に「while文」を使った繰り返し処理に重点を置いていますので、コード全体をブロックごとに分解して解説していきます。

入力のプロンプトとユーザー入力の取得

print "終了する数を入力してください: "
end_number = gets.to_i
  • print "終了する数を入力してください: " は、ユーザーに数値の入力を促すメッセージを表示します。
  • end_number = gets.to_i は、ユーザーが入力した値を整数に変換して変数end_numberに格納します。
    getsは入力を文字列として受け取り、.to_iメソッドで整数に変換しています。

カウンタ変数の初期化

i = 1

i = 1 はカウンタ変数を1で初期化しています。

この変数iは1からユーザーが指定した数までの値を順に表示するために使用されます。

繰り返し処理(while文)

while i <= end_number
  puts "現在の数値: #{i}"
  i += 1
end
  1. while i <= end_number は、iend_number以下である限り繰り返し処理を行うwhile文です。while文は、指定した条件がtrueである間、ブロック内の処理を繰り返し実行します。
    • この条件では、「iend_number以下である間だけ繰り返す」ため、iが指定の数を超えるとループが終了します。
  2. puts "現在の数値: #{i}" は、現在のiの値を表示する部分です。#{i}の部分で、変数iの値が文字列内に展開され、毎回異なる数が表示されます。
  3. i += 1 はカウンタ変数iを1ずつ増加させています。こうすることで、iの値が徐々に増加し、最終的にiend_numberを超えるとwhile文の条件がfalseになり、ループが終了します。

終了メッセージの表示

puts "1から#{end_number}までの数をすべて表示しました。"

puts "1から#{end_number}までの数をすべて表示しました。" は、whileループが終了した後に表示されるメッセージです。

これによりユーザーに指定された数まで表示が完了したことを知らせます。

まとめ

このプログラムではユーザーが入力した数まで1から順に表示する処理を「while文」を使って実現しています。

while文は条件が満たされている間繰り返すという特徴を持ち、非常にシンプルかつ強力な繰り返し処理の方法です。

今回のコードを通じて「while文」の基本的な使い方と繰り返し処理の考え方を身につけていただければと思います。

ぜひ他の条件でも「while文」を試し、繰り返し処理の応用力を高めてください。

<<前のページ Ruby記事一覧 次のページ>>

この記事への質問・コメント

この記事を作成するにあたりAIを活用しています。

問題ないことは確認していますが、もし間違いや表現の違和感などありましたら、ご指摘頂けると大変助かります。






    Rubyのテキスト&問題集トップへ戻る
    トップページへ戻る