1
0

【Ruby】paizaラーニング問題集解答(入力値を使った演算)

Posted at

引き算・掛け算 (paizaランク D 相当)

自分の解答(誤答)

practice.rb
numbers = gets.split

A = numbers[0]
B = numbers[1]

D = A - B
P = A * B

puts "#{D} #{P}"

# Runtime error
# Main.rb:18:in `<main>': undefined method `-' for "397":String (NoMethodError)

# D = A - B
#       ^
# Did you mean?  -@

ChatGPTの解答

理解しました。入力が半角スペースで区切られて1行で行われる場合、それに対応するようにコードを修正します。

# 1行で入力を受け取り、半角スペースで分割
numbers = gets.chomp.split

# 入力が2つの数値でない場合にエラーとする
if numbers.length != 2 || !numbers.all? { |num| num.match?(/\A-?\d+\z/) }
  puts "正しいフォーマットで2つの数値を入力してください。"
  exit
end

# 数字に変換
A = numbers[0].to_i
B = numbers[1].to_i

# 引き算と掛け算
D = A - B
P = A * B

# 結果の表示
puts "#{D} #{P}"

このコードでは、まずgets.chomp.splitで1行の入力を半角スペースで分割して、2つの数値になっているかを確認しています。また、数値に変換する前に正しいフォーマットかどうかもチェックしています。これにより、より確実なエラーハンドリングが行われます。

学び・感想

なるほど、ABそれぞれに代入するタイミングで数値に変換するのが今の自分には一番理解しやすい。
ちなみに、以下のような書き方もある。

sample.rb
# 数値として入力を受け取る
numbers = gets.split.map(&:to_i)

A = numbers[0]
B = numbers[1]

D = A - B
P = A * B

puts "#{D} #{P}"

理屈が少し難しいので、一旦はpractice.rbの書き方で進めようと思います。

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