Ruby:从条件中移除数组的多个特定元素
Ruby: Remove multiple specific elements of an array from a condition
Ruby 的新手,我用 "qwazerty" 模式编写了一个随机密码生成器。
程序将询问所需密码的长度以及密码是否应包括从 azerty 到 qwerty 键盘布局("qwazerty" 类型)变化的字符。
设置密码参数后,通过伪随机选择数组字符生成所需长度和类型的密码。
问题?当系统询问您是否需要 "qwazerty-sensitive" 密码时,无论您如何回答,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 数组。
…到目前为止,没有任何效果。
您的问题可能出在这一行:
character_set - bad_character_set
Array - Array returns 一个新数组;它不会修改收件人。
尝试
character_set = character_set - bad_character_set
改为
Ruby 的新手,我用 "qwazerty" 模式编写了一个随机密码生成器。
程序将询问所需密码的长度以及密码是否应包括从 azerty 到 qwerty 键盘布局("qwazerty" 类型)变化的字符。 设置密码参数后,通过伪随机选择数组字符生成所需长度和类型的密码。
问题?当系统询问您是否需要 "qwazerty-sensitive" 密码时,无论您如何回答,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 数组。
…到目前为止,没有任何效果。
您的问题可能出在这一行:
character_set - bad_character_set
Array - Array returns 一个新数组;它不会修改收件人。
尝试
character_set = character_set - bad_character_set
改为