我正在嘗試編寫凱撒密碼,但我試圖解決映射循環中使用的正則表達式問題。我的代碼是:正則表達式和映射問題
class Cipher
attr_reader :string
attr_reader :factor
def initialize(string, factor)
@string = string
@factor = factor
end
def factored_ascii
@string.chars.map do |letter|
value = letter.ord + (@factor % 26)
if letter =~ /[a-z]/ && value > 122
value = (value % 122) + 96
elsif letter =~ /[A-Z]/ && value > 90
value = (value % 90) + 64
elsif letter =~ /[^A-Za-z]/
value = letter.ord
end
end
end
end
當字符串參數「什麼的字符串」,它只有在正確的第一W
字符和空格字符操作的對象調用factored_ascii
,設置其他元素尼爾斯。
[66, nil, nil, nil, 32, nil, 32, nil, nil, nil, nil, nil, nil]
我很可能做一些相當愚蠢的事情。你能否幫助啓發我,並且爲了解決這個問題而節省更多的時間?
我無法理解你想要的結果,但我可以解釋你爲什麼得到nils。你的問題在if語句中:它沒有捕獲所有其他情況的'else'塊。結果你的迭代對大多數字符返回nil。注意最後一個正則表達式'/ [^ A-Za-z] /'有'^'這意味着行首! – gotva 2014-09-30 12:48:05
@gotva'^'裏面的[]'表示否定不起動 – vks 2014-09-30 13:04:18
哦,你說得對。但我認爲這並沒有改變這種情況。它看起來像大多數字母不被條件內的條件捕獲。 – gotva 2014-09-30 13:08:07