2016-03-05 78 views
-1

下面是我的代碼,通過從用戶獲取長度的數字來生成隨機字符串。我想通過要求用戶輸入要包含的數字和特殊字符的數量並生成符合這些要求的字符串來增強此功能。ruby​​中定製的隨機字符串生成器

例如:

length: 7 
number of numbers: 2 
number of special chars: 1 

然後我的輸出應該是這樣的:

ab2hg3! 

下面是我的代碼:

puts "enter the minimum length of the password" 
lengths = gets.to_i 
puts "enter the number of numbers to be included" 
num = gets.to_i 

def gen_pass(lengths) 
    chars = ('a'..'z').to_a + ('A'..'Z').to_a + (0..10).to_a 
    Array.new(lengths) {chars.sample}.join 
end 

puts gen_pass(lengths) 
puts gen_pass(lengths) 

回答

1

試試這個:

def gen_pass(lengths, number_of_numbers, number_of_special_chars) 
    chars = ('a'..'z').to_a + ('A'..'Z').to_a + (0..10).to_a 
    digits = (0..9).to_a 
    special_chars = "?<>',?[]}{=-)(*&^%$#`~{}".split('') 
    remaining_letters_count = lengths - number_of_numbers - number_of_special_chars 

    n = digits.sample(number_of_numbers) 
    s = special_chars.sample(number_of_special_chars) 
    c = chars.sample(remaining_letters_count) 

    str = n << s << c 
    str.flatten.shuffle.join 
end 

puts gen_pass(lengths, number_of_numbers, number_of_special_chars) 
+0

感謝您的幫助。它的工作:)我有一個想法的方法來使用。謝謝 :) –

0

如果這是一個練習,你應該自己動手。如果不是,你肯定是做錯了。
無論如何,這裏是我的嘗試:

#!/usr/bin/env ruby 

def secret(l,n,s) 
    random_string = 
     [*('A'..'Z'),*('a'..'z')].sample(l-n-s) + 
     [*('0'..'9')].sample(n)     + 
     [*('!'..'/')].sample(s) 
    random_string.shuffle.join 
end 

p secret(5,2,1) 
=> ".4F0r"