2016-11-04 3 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} 

Вот как выглядит мой код сейчас. Как я уже сказал, он работает. Это когда я добавляю n = gets.chomp.to_i до def fact(n) команды, я автоматически получать значение 1. Это не имеет значения, какой номер пользователь ставит, он всегда возвращает 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) 

и инструмент командной строки, что делает что-то вроде этого

$ 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(:*) 
Смежные вопросы