如何在字符串中插入*,+, - 或/

时间:2015-10-15 17:52:11

标签: ruby random

我正在构建一个程序,在1001000之间选择两个随机数,并要求乘以(*),除(/),加({ {1}}),或减去(+)给出的数字。这是我的代码:

-

输出如下内容:

class Math_num
  problem = puts "What is #{rand(100..1000)} #{rand(100..1000)} "
end

我想随机插入除号("What is 432(random number) 783(random number)" ),加号(/),减号(+)或乘号({{ 1}})在两个随机数之间。像这样:

-

我需要做些什么来实现这个目标?

2 个答案:

答案 0 :(得分:1)

尝试这样的事情:

class Math_num
    operator = ['+', '-', '*', '/'].sample
    problem ="What is #{rand(100..1000)} #{operator} #{rand(100..1000)}?"
    puts problem
end

sample方法返回数组的n元素的随机样本,在本例中为单个随机元素。

如果您希望能够检查您的答案,那么进行一些重组是一个好主意。

class Math_num
    operator = ['+', '-', '*', '/'].sample
    num1 = rand(100..1000)
    num2 = rand(100..1000)
    problem = "What is #{num1} #{operator} #{num2}?"
    puts problem

    input = gets.to_i
    answer = num1.send(operator, num2)

    if input != answer
      puts "Incorrect, the answer was #{answer}."
    end
end

您可能未在此处看到的方法是send,可以在(几乎)所有对象上调用它。第一个参数是方法名称(作为字符串"foo"或符号:foo),其余参数是该方法的参数。写num1 + num2等同于编写num1.send('+', num2),当你想改变被调用的运算符时,这非常方便。

此外,请注意to_i将返回0以查找非数字的文字,因此,如果答案为0而您输入foo,则会将其视为正确的。

答案 1 :(得分:1)

您可以将数组与运算符一起使用,并使用Array#sample来获取随机运算符。然后使用Object#send将运算符应用于数字,如果您想要结果:

OPERATORS = ['+', '-', '/', '*']

def random_number(first = 100, last = 1000)
  rand(first..last)
end

operator = OPERATORS.sample
number1 = random_number
number2 = random_number
puts "#{number1} #{operator} #{number2}?"
puts number1.send(operator, number2)