我正在创建一个Caeser Cypher代码,我无法弄清楚如何让搜索循环"返回"我的字母数组中的"a".
这是我得到的:
def ceaser_cypher(string, num)
alphabet = ("a".."z").to_a
letters = string.split("")
letters.map!.with_index do |let,idxs|
if alphabet.include?(let)
alphabet[alphabet.index(let) + num]
end
end
letters.join("")
end
Run Code Online (Sandbox Code Playgroud)
就像大多数字母的魅力一样,但是对于"y"和"z",它们当然会返回nil,例如,num == 3因为字母数组中没有三个以上的索引; 而不是分别返回"b"或"c".那么如何才能让循环开始呢?
你会想做:
alphabet[(alphabet.index(let) + num) % alphabet.length]
Run Code Online (Sandbox Code Playgroud)
模数运算符将使其在超过数组长度时有效地"换行".