我试图创建引力计算器,我犯了错误

时间:2018-01-20 18:13:03

标签: ruby calculation

我正在尝试创建计算器来计算两个物体之间的力。所以这是我的代码:

A_constant = 6.674*10**-11
print "Enter Mass Of The First Object :"
first_num = gets.to_i
print "Enter Mass Of The Second Onject :"
second_num = gets.to_i
print "Enter Distance Between Two Objects :"
third_num = gets.to_i
puts A_constant.to_s + " * " + first_num.to_s + " * " + second_num.to_s + " / " + third_num.to_s + " / " +
      third_num.to_s + " = " +(A_constant * first_num * second_num / third_num / third_num).to_s 

它工作正常,但仅适用于1,2,3 ..,10,11,100 ... 11242523等输入,但不适用于10 ^ 31等功率。起初我想把它写成10 ** 31,但它不起作用。输出与输入为10相同。

这不是很严肃的事情,但我正在努力进入编程,所以如果你能帮助我会感激不尽。

3 个答案:

答案 0 :(得分:1)

gets可能不支持**表达式。 要使其工作,请使用eval,但这可能是一个糟糕的解决方案。

# F = GMm/R2

GRAVITATIONAL_CONST = 6.674*10**-11

print "Enter Mass Of The First Object :"

mass_of_first_object = gets

mass_of_first_object = eval(mass_of_first_object)

print "Enter Mass Of The Second Onject :"

mass_of_second_object = gets

mass_of_second_object = eval(mass_of_second_object)

print "Enter Distance Between Two Objects :"

distance = gets

distance = eval(distance)

f = GRAVITATIONAL_CONST * mass_of_first_object * mass_of_second_object / (distance * distance)

puts "force: #{f}"

答案 1 :(得分:0)

既然你在学习,我就不会给你完整的代码。只是甜蜜的指针;)

因此,询问用户他们想要使用哪个运算符,例如“add”,“substract”,“power”等(case,if,etc)

要求用户输入要处理的内容。

根据具体情况,并将允许的列表正确列入白名单,定义每个选项操作。

一些提示:

要定义操作员使用,operator = :** (为什么要冒号?)

以这种方式询问输入,gets.to_i.public_send(operator, gets.to_i) (什么是public_send?如果只发送?为什么发送?为什么要这样输入?)

是的,这应该有所帮助。你会得到你的计算器并学习一些非常整洁的东西!

快乐编码ruby。

编辑 - 别忘了查看http://ruby-doc.org/。它提供了很好的解释。

答案 2 :(得分:0)

您可以创建一种方法来处理用户想要输入"n^m""n**m"的情况。以下内容可能是一个开始:

def parse_input(input)
  return input.to_i unless input.include?("**")
  base, exponent = input.split(/\*\*|\^/).map(&:to_i)
  base ** exponent
end

parse_input("25")
# => 25
parse_input("10**3")
# => 1000
parse_input("10^3")
# => 1000

然后,您可以使用此方法解析用户输入并将结果分配给变量:

print "Enter Mass Of The First Object :"
first_num = parse_input(gets.chomp)

希望这有帮助!