独習Ruby

- 作者: 株式会社テクノロジックアート
- 出版社/メーカー: 翔泳社
- 発売日: 2009/06/18
- メディア: 大型本
- クリック: 10回
- この商品を含むブログ (18件) を見る
の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など使って短く表記できる。
くっそ。理解して読んでないなぁ…。
あとはエスケープが必要な文字の把握が出来てない…