2016-11-04 10 views
0

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} 

내 코드는 다음과 같습니다. 그러나 내가 말했듯이, 그것은 효과가 있습니다. 내가 자동으로 사용자에두고 어떤 숫자는 중요하지 않습니다 1의 값을받는 def fact(n) 명령 앞에 n = gets.chomp.to_i을 추가 할 때, 그것은 항상 1

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

가 어떻게이 함께이 일을해야합니까 반환 사용자 입력? 나는 구문 문제가 있다고 생각하지만, 어떻게 작동시키는 지 모릅니다.

+1

'puts'시도 음수가 아닌 정수를 입력하고 'n = gets.to_i'를 입력 한 다음'puts '# {n}의 계승 값은 # {fact (n)}'' –

+0

입니다. 굉장해. 감사합니다. –

+0

방금 ​​전 준 답을 확인해보십시오. 그것은 당신에게 당신이 물어보고있는 것들을 모두하는 법을 보여줍니다. –

답변

0

실제로 두 가지 다른 것을 요구하는 것 같습니다. 당신이 원하는 가장 먼저하는 일이

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

그리고 첫 번째는이

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)}" 
같은 것을 볼 수 있었다이

$ fact 10 
> 3628800 

같은 일을 수행하는 명령 줄 도구 같은 것을 수행하는 응용 프로그램입니다

두 번째 것은 다음과 같이 보일 수 있습니다.

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