用户输入的基本算术运算

时间:2019-02-27 11:02:04

标签: ruby

我想做一个四功能计算器。我试图制作一些可以存储操作的方法。

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)

但是我不能做计算器。

我尝试运行代码,但无法正常工作。有人可以帮忙吗?

4 个答案:

答案 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

如果方法做一件事情,通常会变得更加通用。上面的实现将ab相乘,然后通过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)

使用heredocproc

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