LoginSignup
0
0

More than 1 year has passed since last update.

比較演算子を使った条件分岐

Posted at

今日もアウトプットの練習。

問題

ターミナルから数字を入力して、数字に応じて以下のように出力するプログラムを書いてください。

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のあとに書けばいい話か。

動作自体に問題がなくともいかに余計な記述を少なくしてできるかを追求せねばならないと痛感。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0