3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

授業7回目:if,else

Last updated at Posted at 2020-12-23

参考サイト

チャート式ruby-III(if, case, Array.each by leap year)

if-else文

Rubyだけでなくいろんな言語で使われる条件分岐 基本はPythonとかと一緒

if  [then] 
   ...
[elsif  [then]
   ... ]
...
[else
   ... ]
end

[]内の動作はあっても無くても動く

else if をelsifと書くことだけ注意

書き方例:

if a=20
 b true
elsif c=30
 b true
else
 b false
end

お題:うるう年か?

入力された数がうるう年かを表示するプログラム

・ 4で割り切れる数の年はうるう年
・ ただし、100で割り切れる年はうるう年でない
・ 加えて、400で割り切れる年はうるう年

まずは4で割り切れるか否か

[2004, 1999].each do |year|
  p year
  if year % 4 == 0
    p true # 4で割り切れるなら真(うるう年)
  else
    p false # 4で割り切れないなら偽(うるう年じゃない)
  end
end

1行目は2004、1999をそれぞれyearに入れている

次に、100で割り切れるかの処理を入れる

[1900, 2004, 1999].each do |year|
  p year
  if year % 100 == 0
    p false # 100で割り切れるなら偽
    next
  end
  if year % 4 == 0
    p true
  else
    p false
  end
end

next が実行されると、next以降の処理が実行されずに次の繰り返しに移行する.繰り返しそのものを中断してしまう break とはちょっと違う

最後に、400で割り切れるかの処理を入れる

def leap?(year)
  if year % 400 == 0
    p true # 400 で割り切れるなら真
  elsif year % 100 == 0
    p false
  elsif year % 4 == 0
    p true
  else
    p false
  end
end
[2000, 1900, 2004, 1999].each do |year|
  p year
  leap?(year)
end

ついでに関数leap?として実装した

EX

if の代わりに case を使って綺麗に書くとこうなる

def leap?(year)
  case
  when year % 400 ==0 ; p true
  when year % 100 ==0 ; p false
  when year % 4 ==0 ;   p true
  else ;                p false
  end
end

[2000, 1900, 2004, 1999].each do |year|
  p year
  leap?(year)
end

note

条件分岐をあらかじめ考えて実装するのは大変だが、順を追って実装すると良いかも?


  • source ~/grad_members_20f/members/batamon-427/task7.org
3
0
1

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
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?