独習Ruby

独習Ruby

独習Ruby


の4章の章末問題

2つの整数と「たす」「ひく」「かける」または「わる」という日本語の演算子が書かれた文字列から計算を行うプログラムを作成してください
たとえば次のような計算ができるようにします

str = "1 たす 1"

自分が書いた回答

# coding : utf-8
str = "3ひく1"

if /たす/ =~ str
  suji1 = $`.to_i
  suji2 = $'.to_i
  puts suji1 + suji2
  elsif /ひく/ =~ str
  suji1 = $`.to_i
  suji2 = $'.to_i
  puts suji1 - suji2
 elsif /かける/ =~ str
  suji1 = $`.to_i
  suji2 = $'.to_i
  puts suji1 * suji2
  elsif /わる/ =~ str
  suji1 = $`.to_i
  suji2 = $'.to_i
  puts suji1 / suji2 
  else
  puts "計算できないよ"
  end

うーん。なんか同じ処理が繰り返されているからifじゃない方がいいんだろうけど…。

もういっこ問題。

電話番号とメールアドレスをにマッチングするパターンを作成してください

僕の回答

#電話番号
/[0-9]+-[0-9]+-[0-9]+/

#メールアドレス
 /[0-9a-zA-Z]*@[0-9a-zA-Z]*.[0-9a-zA-Z]*/

あんまり自信ない…。


回答例

#たす、ひく、かける、わる

# coding : utf-8
str = "3 ひく 1".split

case str[1]
when "たす"
  puts str[0].to_i + str[2].to_i
when "ひく"
  puts str[0].to_i - str[2].to_i  
when "かける"
  puts str[0].to_i * str[2].to_i
when "わる"
  if (str[2] == 0)
    puts "0で割ることはできません"
  else
  puts str[0].to_i / str[2].to_i
  end
end

まず始めにsplitで文字列を分割してstrの配列に格納してから、case when でかくにんしていってるのか。

#電話番号
/\d(2,4)-\d(2,4)-\d(4,5)/

#メールアドレス
/^[\d\w]+[\d\w\.\_-]*@[\d\w\.\_-]*/

具体的な数値を入れて判定するんじゃなくて、\dや\wなど使って短く表記できる。
くっそ。理解して読んでないなぁ…。
あとはエスケープが必要な文字の把握が出来てない…

これはRubyの問題じゃないな…と思った朝Rubyでした。

良かったらTwitterハッシュタグ #朝Ruby で僕と一緒にRubyの勉強しようよ!