我正在尝试创建一个需要用户输入的计算器。我希望该输入不仅包括数字,还包括运营商(+
,-
,*
, /
)。我创建了一个与给定参数一起工作的方法。这是我的代码:将操作员作为用户输入的计算器
def calculator(x, y, z)
if y == '+'
ans = x + z
elsif y == '-'
ans = x - z
elsif y == '*'
ans = x * z
elsif y == '/'
ans = x/z
end
p ans
end
calculator(3, '+', 5)
calculator(4, '-', 2)
calculator(3, '*', 10)
calculator(21, '/', 7)
puts "Please enter your calculation"
user_calc = gets.chomp
user_calc.chars
user_calc[0].to_i
user_calc[4].to_i
calculator(user_calc[0], user_calc[2], user_calc[4])
该程序假设索引0
为第一整数,指数2
操作者,和索引4
第二整数。
当我输入3 + 5
时,输出是35
而不是8
。其他操作(-
,*
,/
)返回nil
。当我尝试使用用户输入时,我遇到了一个错误。我认为它将数组中的所有内容视为一个字符串。给定的参数按预期工作。但我无法完全确定用户的输入。
我想知道如何去解决这个问题。
谢谢阿马丹。我明白了为什么我现在没有得到正确的回报。 我一直在想多一点,而且我还有一个问题,我一直在努力解决。有没有办法将每个输入(x,y,z)视为自己的索引? 现在,即使我 user_calc.split('') ,每个字符被视为自己的索引。所以,例如,5 + 95会返回5 + 9。我想知道如何以不同的方式拆分user_calc。 换句话说,我将如何得到100 5 + 95返回,而不是14。 – Orie
正如基斯说,正则表达式返回。 '_,arg1,op,arg2 = *“5 + 95”.match(/(\ d +)\ s *([ - + * \ /])\ s *(\ d +)/)'会提取两个整数参数(作为字符串,你仍然需要'to_i')和它们之间的操作符。 – Amadan