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

问题描述

我刚刚开始学习红宝石,并且我正在做一个小项目。我正在制作一个简单的 2 数字计算器。我想要做的是让用户输入两个数字,然后询问他们是否要对它们进行加/减/乘。我的问题是,如果用户未输入加/减/乘运算,我希望触发一条消息。假设用户键入 Ad 而不是 Add ,我希望计算机说“我听不懂!”。我不确定如何执行此操作。

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

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

解决方法

使用带有elsifelse的if语句。

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存储允许的操作,并使用eval将结果字符串作为算术表达式求值。尽管eval在许多情况下都不安全,但在这里我们严格控制其输入,使其更加安全。

请注意,为了控制输入,我保留了to_i转换(如果没有转换,用户可以输入任意字符串,直接进行eval编辑是不安全的)。哈希将字符串运算符转换为我们完全控制的哈希值,从而进一步控制了输入。

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 "..."计算字符串。由于该字符串被双引号引起来,因此将插值#{...}中的值。因此,如果用户输入了23add,则字符串将被插值到2 + 3,即5

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

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...