用户输入以创建阶乘

时间:2016-11-04 17:00:30

标签: ruby factorial fact

需要一些帮助才能使def fact(n)命令解决用户输入问题。当我输入类似" Ruby factorial.rb 5"之类的东西时,我的脚本效果很好。但是,我需要这个以提示运行。该脚本应该运行如下:

puts 'Please input a non-negative integer:'
n = gets.chomp.to_i
puts "The factorial of #{n} is #{factorial}

这是我的代码现在的样子。就像我说的那样,它确实有效。我在n = gets.chomp.to_i命令之前添加def fact(n)时会自动收到值1.用户输入的数字并不重要,它始终返回1. / p>

#!/user/bin/ruby
def fact(n)
  if n==0
    1
  else
    n * fact(n-1)
  end
end
puts fact(ARGV[0].to_i)

如何使用用户输入进行此操作?我认为我只是遇到语法问题,但不知道如何使其发挥作用。

1 个答案:

答案 0 :(得分:0)

你实际上似乎要求两件不同的事情。你想要的第一件事是一个类似这样的应用程序

$ ruby factorial.rb
> Please input a non-negative integer
(GET USER INPUT)
> The factorial of (USER INPUT) is (FACTORAIL OF USER INPUT)

一个命令行工具,可以做这样的事情

$ fact 10
> 3628800

第一个可能看起来像这样

def fact(n)
  (1..n).inject(:*)
end
puts 'Please input a non-negative integer'
a = gets.to_i
puts "The factorial of #{a} is #{fact(a)}"

第二个可能看起来像这样

#!/usr/bin/ruby
puts (1..ARGV[0].to_i).inject(:*)