需要一些小型计算器的指导我正在使用Ruby

时间:2014-09-11 20:41:18

标签: ruby math

def averager
puts "Put in three numbers. One per line"
num_1 = $stdin.gets.chomp.to_i
num_2 = $stdin.gets.chomp.to_i
num_3 = $stdin.gets.chomp.to_i

half_total =  num_1 + num_2 + num_3
total = half_total / 3
end

好的,这是我正在努力的一点点平均水平。除了一件事,它工作正常。我希望用户决定他想输入多少个数字。这样我就不会仅限于三个数字来平均 。感谢

4 个答案:

答案 0 :(得分:1)

这里用#

标记的注释中逐行说明
def averager
  puts "How many numbers?" #ask the user how many numbers
  numbers = gets.chomp.to_i #get how many numbers
  count = 1 #start the count variable for the while loop
  half_total = 0 #half_total starts on zero
  while(count <= numbers) do #while count is less than or equal to amount of numbers
    puts "Enter #{count}° number" #puts "Enter 1°,2° or whatever number"
    number = gets.chomp.to_i #get the actual number from the user
    half_total = half_total + number #add it to your half total
    count = count + 1 #add one to count so we go to the 2°,3° or wtv number
  end #end the loop

  total = half_total/numbers.to_f #divide half_total by the amount of numbers 
             #.to_f is used to force float division so decimals don't get cut

  puts "The average is: #{total}" #prints the result
  total #returns the result in case you don't want to print it

end #end of the function or method

这是通过一个简单的while循环来完成的,就像另一个答案所说的那样,如果你仍然对它们的工作方式感到困惑,请查看循环教程http://www.tutorialspoint.com/ruby/ruby_loops.htm

答案 1 :(得分:0)

你可以做点什么:

def average(input_str)
  arr = input_str.split
  arr.inject { |sum, x| sum.to_i + x.to_i } / arr.size
end

puts "Please enter numbers you would like to average(separated by a space)"
input = gets.chomp
avg = average(input)
puts "The average is #{avg}"

用户会给我一串这样的数字:

Please enter numbers you would like to average(separated by a space)
1 2 3

我们调用一个带有字符串1 2 3的函数,并将其放入一个包含拆分调用的数组中:

[1] pry(main)> input_str = "1 2 3"
=> "1 2 3"
[2] pry(main)> input_str.split
=> ["1", "2", "3"]

然后我们可以使用inject方法总结该数组:

arr.inject { |sum, x| sum.to_i + x.to_i }

最后,我们将其除以总数组的大小。

答案 2 :(得分:0)

您可以尝试使用while循环。 Here's a pretty good guide on Ruby中的循环。

然后在循环的每个阶段,向用户询问一个数字,或输入其他东西退出(例如,如果他们输入一个字符串则退出)。像这样:

puts "Enter a number: "
total = 0
count = 0
number = gets.chomp.to_i       # you don't need $stdin here
while number != 0              # calling to_i on a String will return 0
  total += number
  count += 1
  puts "Enter another number, or 'quit' to end: "
  number = gets.chomp.to_i
end

average = total / count

这不是最优雅的方式,但可能更容易理解。

答案 3 :(得分:0)

无限循环直到中断条件

获取未知数量参数的最简单方法是使用Kernel#loop。这将无休止地重复,直到您使用 break 关键字触发退出循环,或者引发StopIteration

以下只需在数字 Array中收集任意数量的参数,直到您键入 q quit后跟 RETURN 。然后根据数字中的项目数计算平均值,并将结果打印到标准输出。

def avg *args
  args.flatten!
  args.reduce(:+) / args.size
end

numbers = []
loop do
  printf 'Enter number ("q" to quit): '
  input = gets.downcase.chomp
  case input
  when ''
    next
  when /q(uit)?/
    puts avg(numbers)
    break
  else
    numbers << Float(input)
  end
end

如果您需要完整的readline支持或关闭屏幕上的字符回声,您可以查看类似highline的宝石以获取其他功能。

样本输出

Enter number ("q" to quit): 5
Enter number ("q" to quit): 10
Enter number ("q" to quit): 15
Enter number ("q" to quit): 20
Enter number ("q" to quit): q
12.5