新手 Ruby 问题 - 项目基本计算器
Newbie Ruby question - project basic calculator
我刚开始学习 ruby,并且我正在做一个小项目。我正在制作一个简单的 two 数字计算器。我想要做的是让用户输入两个数字,然后询问他们是否愿意 add/subtract/multiply 他们。我的问题是,如果用户不输入 add/subtract/multiply,我希望触发一条消息。假设用户键入 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
将 if 语句与 elsif
和 else
一起使用。
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,#{...} 中的值是内插的。因此,如果用户输入,例如,2
、3
、add
,字符串将被插入到 2 + 3
,即 5
.
最后,根据 Ruby 编码约定,我在适当的地方用单引号替换了所有双引号。
我刚开始学习 ruby,并且我正在做一个小项目。我正在制作一个简单的 two 数字计算器。我想要做的是让用户输入两个数字,然后询问他们是否愿意 add/subtract/multiply 他们。我的问题是,如果用户不输入 add/subtract/multiply,我希望触发一条消息。假设用户键入 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
将 if 语句与 elsif
和 else
一起使用。
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,#{...} 中的值是内插的。因此,如果用户输入,例如,2
、3
、add
,字符串将被插入到 2 + 3
,即 5
.
最后,根据 Ruby 编码约定,我在适当的地方用单引号替换了所有双引号。