凯撒密码索引
Caesar cypher indexing
谁能简单地解释一下这一行发生了什么:
new_word += alphabet[alphabet.index(i.downcase) - num]
new_word = new_word 变量的当前状态 + 什么?
这是整个程序:
def cipher(word, num)
alphabet = ('a'..'z').to_a.concat(('A'..'Z').to_a)
new_word = ""
word.each_char do |i|
if !alphabet.include?(i)
new_word +=i
else
new_word += alphabet[alphabet.index(i.downcase) - num]
end
end
return new_word.downcase.capitalize
end
puts cipher("Apples? and Oranges!", 2)
它是将字母表中由 (alphabet.index(i.downcase) - num 表示的字母添加到新单词中。
i.downcase 只是将字母转换为小写(如果尚未转换)。
alphabet.index 查找字母表中 i 所在的位置。
num减法就是密码。它通过修改字母表中找到该字母的索引来更改将添加的字母。数字 1 会把 'b's 变成 'a',因为 'a' 在给定的字母表中出现在 'b' 之前。
所以它获取字母,将其转换为小写,然后是数组索引,用 num 修改该索引并将新索引代表的字母添加回单词。
new_word
是一个 String
,所以右边的值将附加到它上面。表达式 alphabet[alphabet.index(i.downcase) - num]
只是一种确定在字母表中移动 num
位的字符的低效方法。
alphabet
是一个 Array
包含对应于字母表字母的字符值,以小写字母开头,然后是大写字母。
本例中的index
方法查找字符值i
在alphabet
中第一次出现的索引。然后该指数减少 num
。这个新位置对应的字符最后在alphabet
中查找,结果追加到new_word
.
另请注意,如果新索引为负,则结果将“回绕”,数组将从后面索引,如果 num
不是太大,则结果为大写字母.这些潜在的大写字母将在 new_word.downcase.capitalize
.
中小写
downcase
部分很奇怪,因为它意味着“密码”是不可逆的。另请注意,如果 num
的绝对值太大以至于查找超出范围,这将不会像您预期的那样工作。
谁能简单地解释一下这一行发生了什么:
new_word += alphabet[alphabet.index(i.downcase) - num]
new_word = new_word 变量的当前状态 + 什么?
这是整个程序:
def cipher(word, num)
alphabet = ('a'..'z').to_a.concat(('A'..'Z').to_a)
new_word = ""
word.each_char do |i|
if !alphabet.include?(i)
new_word +=i
else
new_word += alphabet[alphabet.index(i.downcase) - num]
end
end
return new_word.downcase.capitalize
end
puts cipher("Apples? and Oranges!", 2)
它是将字母表中由 (alphabet.index(i.downcase) - num 表示的字母添加到新单词中。
i.downcase 只是将字母转换为小写(如果尚未转换)。
alphabet.index 查找字母表中 i 所在的位置。
num减法就是密码。它通过修改字母表中找到该字母的索引来更改将添加的字母。数字 1 会把 'b's 变成 'a',因为 'a' 在给定的字母表中出现在 'b' 之前。
所以它获取字母,将其转换为小写,然后是数组索引,用 num 修改该索引并将新索引代表的字母添加回单词。
new_word
是一个 String
,所以右边的值将附加到它上面。表达式 alphabet[alphabet.index(i.downcase) - num]
只是一种确定在字母表中移动 num
位的字符的低效方法。
alphabet
是一个 Array
包含对应于字母表字母的字符值,以小写字母开头,然后是大写字母。
本例中的index
方法查找字符值i
在alphabet
中第一次出现的索引。然后该指数减少 num
。这个新位置对应的字符最后在alphabet
中查找,结果追加到new_word
.
另请注意,如果新索引为负,则结果将“回绕”,数组将从后面索引,如果 num
不是太大,则结果为大写字母.这些潜在的大写字母将在 new_word.downcase.capitalize
.
downcase
部分很奇怪,因为它意味着“密码”是不可逆的。另请注意,如果 num
的绝对值太大以至于查找超出范围,这将不会像您预期的那样工作。