今日もアウトプットの練習。
問題
ターミナルから数字を入力して、数字に応じて以下のように出力するプログラムを書いてください。
10以下なら10以下の数字です
10より大きい数値なら10より大きい数字です
10以下でかつ0以下なら0以下の数字です
ソースコードは以下の雛形を使ってください。
1
2
3
input = gets.to_i
# ここからソースコードを書いてください
数値の比較なので比較演算子を使う
演算子 | 例文 | 意味 |
---|---|---|
== | a == b | aとbが等しい |
!= | a != b | aとbが等しくない |
> | a > b | aはbより大きい |
< | a < b | aはbより小さい |
>= | a >= b | aはb以上 |
<= | a <= b | aはb以下 |
自分の解答
practise.rb
input = gets.to_i
if input <= 10 && input <= 0
puts "0以下の数字です"
elsif input > 10
puts "10より大きい数字です"
else
puts "10以下の数字です"
end
gets.to_iで数字を入力させて変数inputに代入。
if文は上に書いた条件から優先して動くようになっているから、inputの入力値を-1とした時に0以下の数字です
という出力結果を出すための条件式を頭に持ってきた。
しかし10以下でかつ0以下なら0以下の数字です
をそのまま表現するためにわざわざ論理演算子の&&
を使ってしまったのは余計だったか。0以下かか10より大きい以外ならelseの10以下に当てはまるんだから無駄な記述だ。
もし10以下の数字ですの条件式を頭に持ってきた場合
sample.rb
input = gets.to_i
if input <= 10
puts "10以下の数字です"
elsif input <= 0
puts "0以下の数字です"
else
puts "10より大きい数字です"
end
# ターミナル入力値: -1 :出力結果 10以下の数字です
上記のような書き方だと-1と入力しても10以下の数字です
と出力されてしまう。確かに10以下ではあるが0以下であるという条件に当てはめねばならないのに上の方から優先されて思うような結果が得られない。
模範解答
sample.rb
input = gets.to_i
if input <= 0
puts "0以下の数字です"
elsif input <= 10
puts "10以下の数字です"
else
puts "10より大きい数字です"
end
10以下でなければ10より大きいため、10より大きい数値の場合の条件はelseのあとに書けばいい話か。
動作自体に問題がなくともいかに余計な記述を少なくしてできるかを追求せねばならないと痛感。