我正在尝试创建重力计算器,但我弄错了

im trying to create gravitational force calculator and i made mistake

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

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 时相同。

这不是什么严肃的事情,但我正在努力学习编程,所以如果你能提供帮助,我将不胜感激。

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}"

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

因此,询问用户他们想使用什么运算符,例如 "add"、"substract"、"power" 等 (case、if 等)

询问用户输入以进行处理。

据此,将允许的正确列入白名单,定义每个选项操作。


一些提示:

要定义运算符的使用,operator = :** (为什么是冒号?)

可能以这种方式请求输入,gets.to_i.public_send(operator, gets.to_i) (什么是 public_send?如果只发送怎么办?为什么要发送?为什么要这样输入?)

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

编码愉快ruby。

编辑 - 别忘了检查 http://ruby-doc.org/。它给出了很好的解释。

您可以创建一种方法来处理用户想要输入 "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)

希望对您有所帮助!