我正在构建一个程序,在100
和1000
之间选择两个随机数,并要求乘以(*
),除(/
),加({ {1}}),或减去(+
)给出的数字。这是我的代码:
-
输出如下内容:
class Math_num
problem = puts "What is #{rand(100..1000)} #{rand(100..1000)} "
end
我想随机插入除号("What is 432(random number) 783(random number)"
),加号(/
),减号(+
)或乘号({{ 1}})在两个随机数之间。像这样:
-
我需要做些什么来实现这个目标?
答案 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)