我正在尝试创建计算器来计算两个物体之间的力。所以这是我的代码:
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相同。
这不是很严肃的事情,但我正在努力进入编程,所以如果你能帮助我会感激不尽。
答案 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)
希望这有帮助!