我想做一个四功能计算器。我试图制作一些可以存储操作的方法。
def mul
puts num1*num2
end
def div
puts num1/num2
end
def sub
puts num1-num2
end
def add
puts num1+num2
end
num1=gets.chomp.to_f
op=gets.chomp
num2=gets.chomp.to_f
puts "Multiplication=mul\n Addition=add\n Subtract=sub\n Division=div"
puts ("This is your answer"+num1+op+num2)
但是我不能做计算器。
我尝试运行代码,但无法正常工作。有人可以帮忙吗?
答案 0 :(得分:1)
最佳方法是
def perform_operation(op, a, b)
op = { 'add' => '+', 'sub' => '-', 'mul' => '*', 'div' => '/' }[op]
a.send(op, b)
end
num1=gets.chomp.to_f
op=gets.chomp
num2=gets.chomp.to_f
puts "This is your answer", perform_operation(op, num1, num2)
如果您的op
是通过输入传递的+,-,*或/,则可以直接执行此操作,而无需使用以下方法,
puts "This is your answer", num1.send(op, num2)
答案 1 :(得分:0)
您不能在该方法内的方法外部使用局部变量。相反,您必须传递作为参数:
def mul(num1, num2)
puts num1 * num2
end
您也不必使用相同的变量名,只要在方法的上下文中使用任何有意义的变量即可:
def mul(a, b)
puts a * b
end
mul(2, 3)
# prints 6
如果方法做一件事情,通常会变得更加通用。上面的实现将a
和b
相乘,然后通过puts
打印结果。让我们将打印移到该方法之外:
def mul(a, b)
a * b
end
puts mul(2, 3)
# prints 6
我们现在可以执行实际计算:
x = mul(2, 3) #=> 6
y = mul(2, 5) #=> 10
puts mul(x, y)
# prints 60
使用合并了puts
的变体是不可能的。
具有用户输入和输出:(使用整数进行演示)
print "first factor: "
num1 = gets.to_i
print "second factor: "
num2 = gets.to_i
puts "#{num1} * #{num2} = #{mul(num1, num2)}"
请注意,需要#{...}
来插值其他值。
示例会话:
first factor: 2
second factor: 3
2 * 3 = 6
要基于给定的运算符获得不同的输出,您需要一个条件,例如case
语句:
op = gets.chomp
case op
when 'mul'
puts mul(num1, num2)
when 'add'
puts add(num1, num2)
# ...
end
希望这会帮助您入门。
答案 2 :(得分:0)
一旦使用参数定义了方法,例如:
def sub(x, y)
x - y
end
def add(x, y)
x + y
end
一旦您对用户输入设置的变量进行了门控(我将通过硬编码进行分配只是为了显示):
op = "add".to_sym # or user input
num1 = 10 # or user input
num2 = 20 # or user input
您可以使用case expression选择要显示的结果。 例如:
res = case op
when :add
add(num1, num2)
when :sub
sub(num1, num2)
end
因此您可以将结果显示为:
puts res
如前所述,您还可以使用send
在用户输入上调用该方法:
答案 3 :(得分:0)
def mul(num1, num2)
num1 * num2
end
def div(num1, num2)
num1 / num2
end
def sub(num1, num2)
num1 - num2
end
def add(num1, num2)
num1 + num2
end
puts 'First number'
num1 = gets.to_f
puts 'Second number'
num2 = gets.to_f
puts <<-OPERATORS
Multiplication = mul
Addition = add
Subtract = sub
Division = div
OPERATORS
op = method(gets.chomp).to_proc
puts "This is your answer: #{op.call(num1, num2)}"
它如何在String#downcase
的示例中起作用:
downator = :downcase.to_proc
downator.call('WORD') #=> "word"
# It is equal to
'WORD'.downcase #=> "word"
这是因为downator
存储了块proc { |arg| arg.downcase }
实际上,此属性通常用于数组操作,例如:
['WORD', 'STRING'].map(&:downcase) #=> ["word", "string"]
# It is equal to
['WORD', 'STRING'].map { |arg| arg.downcase } #=> ["word", "string"]