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

改为