1

有人可以简要解释一下这一行发生了什么:

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)
4

2 回答 2

1

new_word是 a String,所以右边的值将被附加到它上面。该表达式alphabet[alphabet.index(i.downcase) - num]只是确定num在字母表中移位的字符的一种低效方式。

alphabet是一个Array包含与字母表中的字母相对应的字符值,以小写字母开头,然后是大写字母。

index例中的方法在 中查找字符值第一次出现的i索引alphabet。然后该指数减少num. 这个新位置对应的字符最终在 中查找alphabet,并将结果追加到 中new_word

另请注意,如果新索引为负数,则结果将“环绕”,则数组将从后面开始索引,如果num不是太大,则导致大写字母。那些潜在的大写字母将在new_word.downcase.capitalize.


downcase部分很奇怪,因为这意味着“密码”是不可逆的。另请注意,如果nums 绝对值太大以至于查找超出范围,这将无法正常工作。

于 2015-09-19T22:59:40.160 回答
0

它将字母表中由 (alphabet.index(i.dow​​ncase) - num) 表示的字母添加到新单词中。

i.dow​​ncase 只是将字母转换为小写(如果还没有的话)。

alphabet.index 查找字母表中 i 存在的位置。

num减法是密码。它通过修改字母表中找到字母的索引来更改将要添加的字母。数字 1 会将 'b' 更改为 'a',因为在给定字母表中,'a' 位于 'b' 之前。

因此,它获取字母,将其转换为小写,然后是数组索引,通过 num 修改该索引,并将该新索引表示的字母添加回单词中。

于 2015-09-19T22:56:30.013 回答