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は であるStringため、右側の値が追加されます。この式alphabet[alphabet.index(i.downcase) - num]は、アルファベットの位置がずれている文字を決定する非効率的な方法ですnum

alphabetArray、アルファベットの文字に対応する文字値を含む です。小文字で始まり、その後に大文字が続きます。

この場合のメソッドは、 で文字値がindex最初に出現するインデックスを見つけます。その後、このインデックスは だけ減少します。この新しい位置に対応する文字が最終的に で検索され、結果が に追加されます。ialphabetnumalphabetnew_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 減算は暗号です。文字が見つかったアルファベットのインデックスを変更することで、追加される文字を変更します。num が 1 の場合、'b' は 'a' に変わります。これは、指定されたアルファベットで 'a' が 'b' の前に来るためです。

そのため、文字を受け取り、それを小文字に変換してから配列インデックスを作成し、そのインデックスを num で変更し、その新しいインデックスが表す文字を単語に追加します。

于 2015-09-19T22:56:30.013 に答える