我正在尝试创建重力计算器,但我弄错了
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)
希望对您有所帮助!
我正在尝试创建计算器来计算两个物体之间的力。所以这是我的代码:
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)
希望对您有所帮助!