新手 Ruby 问题 - 项目基本计算器

Newbie Ruby question - project basic calculator

我刚开始学习 ruby,并且我正在做一个小项目。我正在制作一个简单的 two 数字计算器。我想要做的是让用户输入两个数字,然后询问他们是否愿意 add/subtract/multiply 他们。我的问题是,如果用户不输入 add/subtract/multiply,我希望触发一条消息。假设用户键入 A​​d 而不是 A​​dd,我希望计算机说“我不明白!”我不确定如何执行此操作。

到目前为止,这是我的代码。

puts "Welcome to math.rb!"
puts "Enter a number!"
     user = gets.to_i
puts "Enter another number!"
    user2 = gets.to_i
puts "What would you like to do with your number? You can add, subtract, or multiply!"

math = gets.chomp.downcase 
if math == "add"
    puts user + user2
end 
if math == "subtract"
    puts user - user2
end
if math == "multiply"
    puts user * user2
end
if math != ["add", "subtract", "multiply"]
    puts "I don't understand"
end

将 if 语句与 elsifelse 一起使用。

math = gets.chomp.downcase 
if math == "add"
    puts user + user2
elsif math == "subtract"
    puts user - user2
elsif math == "multiply"
    puts user * user2
else
    puts "I don't understand"
end

case 也很适合这个用例。

math = gets.chomp.downcase 
case math
when "add"
    puts user + user2
when "subtract"
    puts user - user2
when "multiply"
    puts user * user2
else
    puts "I don't understand"
end

您可以进一步缩短代码并使用 hash to store allowed operations, and eval 将结果字符串计算为算术表达式。虽然eval在很多情况下是不安全的,但是这里我们严格控制它的输入,让它更安全。

请注意,为了控制输入,我保留了 to_i 转换(没有它,用户可以输入任意字符串,直接 eval-ed 是不安全的)。哈希通过将字符串运算符转换为哈希值进一步控制输入,这是我们完全控制的。

puts 'Welcome to math.rb!'
puts 'Enter a number!'
x = gets.to_i
puts 'Enter another number!'
y = gets.to_i
puts 'What would you like to do with your number? You can add, subtract, or multiply!'

op_str = gets.chomp.downcase

op_str_to_math = { 'add' => '+', 'subtract' => '-', 'multiply' => '*' }

if op_str_to_math.key? op_str
  puts eval "#{x} #{op_str_to_math[op_str]} #{y}"
else
  puts "I don't understand"
end

op_str_to_math = { ... } 定义了一个具有键 => 值对的散列。可以像这样访问散列的元素:

puts op_str_to_math['add'] # prints: +
puts op_str_to_math['subtract'] # prints: -

我们通过在散列键中查找用户输入 (op_str) 来检查是否允许运算符:if op_str_to_math.key? op_str .

eval "..." 评估字符串。因为字符串是 double-quoted,#{...} 中的值是内插的。因此,如果用户输入,例如,23add,字符串将被插入到 2 + 3,即 5.

最后,根据 Ruby 编码约定,我在适当的地方用单引号替换了所有双引号。