Ruby:从条件中删除数组的多个特定元素

时间:2015-02-19 14:12:15

标签: ruby random conditional-statements

Ruby的新手,我用“qwazerty”模式编写了一个随机密码生成器。

程序应询问所需密码的长度以及密码是否包含从azerty更改为qwerty键盘布局(“qwazerty”类型)的字符。 设置密码参数后,通过在数组字符中伪随机选择生成所需长度和类型的密码。

问题?无论您在被问及是否需要“qwazerty敏感”密码时回答什么,qwazerty模式都不起作用。大多数评论的行都是我以前失败的遗留物,如果它能够帮助的话。

#!/usr/bin/env ruby

character_set = [ "!", "$", "%", "&", "'", "(", ")", "*", "+", ",", "-", ".", "/", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", ":", ";", "<", "=", ">", "?", "@", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "[", "]", "^", "_", "`", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "{", "|", "}", "~" ] # ASCII order, no 032, """, "\", "#".
bad_character_set = [ "!", "$", "%", "&", "'", "(", ")", "*", ",", "-", ".", "/", ":", ";", "?", "@", "A", "M", "Q", "W", "Z", "[", "]", "^", "`", "a", "m", "q", "w", "z", "{", "|", "}", "~" ]

puts """   ,----,    ,----,          ,---,      ,-,   ,----,,----,
  / // /    / // /,-,-,-,   / ,-'      / /   / // // // / 
 / /| |,-, / ,--'/ / / /-, / ',-,-,   / /-, / // // // /  
'-' '-''-''-'   '-----''-''----''-'  '-''-''----''----'   
R A N D O M   P A S S W O R D   G E N E R A T O R   1 . 0 0
\nEnter the password's length (in arabic numbers)."""
password_length = gets.to_i

puts "\nShall the password be qwazerty sensitive (\"yes\" or \"no\") ?"
password_type = gets #.match("/(|^)yes(|$)/i")

if password_type =~ /(|^)yes(|$)/i # == true
    character_set - bad_character_set
#   character_set.delete( "!", "$", "%", "&", "'", "(", ")", "*", ",", "-", ".", "/", ":", ";", "?", "@", "A", "M", "Q", "W", "Z", "[", "]", "^", "`", "a", "m", "q", "w", "z", "{", "|", "}", "~" )
#   character_set.delete_at( 1, 2, 3, 4, 5, 6, 7, 8, 10, 12, 13, 24, 25, 29, 30, 31, 43, 47, 53, 56, 57, 58, 59, 61, 62, 74, 78, 84, 87, 88, 89, 90, 91 )
else

end

password = Array.new

while password_length > 0 do
    password << character_set.sample
    password_length -= 1
end

puts "\n" + password.map(&:inspect).join('').to_s.gsub('"', '')

首先,我尝试从character_set数组中删除不需要的字符。 其次,我试图逐个删除它们。 第三,我试图将一个不需要的字符数组减去character_set数组。

......到目前为止,没有任何效果。

1 个答案:

答案 0 :(得分:2)

你的问题可能就在这一行:

character_set - bad_character_set

Array - Array返回一个新数组;它不会修改收件人。

尝试

character_set = character_set - bad_character_set

代替