我试图在ruby上制作一个简单的代数计算器应用程序,但我在编码时遇到了问题。 .split方法,我用它将方程式划分为"部分" (用加号和减号分隔),确实将等式(eq)与+符号分开,但它没有 - 符号。
eq = gets.chomp
a = []
a = eq.split("+")
a.each do |n|
case n
when n.include?("-")
a << n.split("-")
end
end
print a[0], ";", a[1]
我使用的情况是因为如果我没有,它会返回NoMethod错误。我已经做了一个普通的计算器,所以我认为这将是一个很好的下一个项目。我也想知道你是否有任何想法让我的代码缩短;也许通过创建一个方法。下面是我的常规计算器代码,我也想知道如何缩短代码。
loop do
print
equation = gets.chomp
if equation.include?"^"
exponent_e = equation.split("^")
result_e = exponent_e[0].to_f ** exponent_e[1].to_f
print " = #{result_e} "
puts
elsif equation.include?"%"
percent_e = equation.split("%")
number = percent_e[0].to_f / 100
result_p = number * percent_e[1].to_f
print " = #{result_p} "
puts
elsif equation.include?"/"
res_d = equation.split("/")
result_d = res_d[0].to_f / res_d[1].to_f
print " = #{result_d} "
puts
elsif equation.include?"*"
res_m = equation.split("*")
result_m = res_m[0].to_f * res_m[1].to_f
print " = #{result_m} "
puts
elsif equation.include?"+"
res_a = equation.split("+")
result_a = res_a[0].to_f + res_a[1].to_f
print " = #{result_a} "
puts
elsif equation.include?"-"
res_s = equation.split("-")
result_s = res_s[0].to_f - res_s[1].to_f
print " = #{result_s} "
puts
else
puts "Input valid equation"
end
end
答案 0 :(得分:2)
传递给split
方法的参数将通过传递的参数拆分字符串,并返回一个数组,其他所有内容都将被拆分。
例如:
"a+b".split("+")
#=> ["a", "b"]
"c-d".split("+")
#=> ["c-d"]
"c-d".split("-")
#=> ["c", "d"]
我可能会通过使用OOP创建class Calculator
然后为每个功能创建方法(即加号,减号,除法等等)来重构代码。这将使代码更易读,更易于维护。
另一个值得考虑的好处是使用元编程。
def calculate(fxn, arr_numbers)
if arr_numbers.size == 2
arr_numbers.send(:reduce, fxn)
end
end
其中fxn
是一个字符串(即“+”,“ - ”等等),而arr_numbers
是一个包含2个数字的数组,而不是字符串(即[2,5])
你可以扩展它以获取多个数字或添加其他功能..