私はThe Odin ProjectからRubyコースをやっています。配列のRan .mapを新しい配列に割り当てましたが、[0]以外のすべてのインデックスに 'nil'が表示されています
私はまだRubyの新機能です。
以下のコードでは、文字列を取り込み、「シーザー暗号」を使用して暗号化しようとしています。この場合、文字列を取り、文字列5の値の文字を右にシフトしています。例えば「A」は「F」、「w」は「b」になります。
まず第一に、ここで私が間違っていると、おそらくより良い方法で行うことができると思うものです:
ライン5 decrypt = ascii.map...
に - これがないと思えます。 ascii
のすべての値を新しい変数に代入することなく変更する方が良い方法があります。私はここでの問題は、私は変数に配列を指す別の変数を割り当てるよということだと思います
私の質問がある。(?):このdecrypt
でindex[0]
は[66, nil,...nil]
ことを引き起こしていますか? ascii
で、最初のascii値をシフトされたascii値に再割り当てするための正しい方法/方法は何ですか?条件が満たされない場合nil
を返しif
Rubyで
1 def caesar_cipher(string, shift)
2
3 ascii = string.chars.map(&:ord)
4 p ascii
5 decrypt = ascii.map { |letter|
6 if letter.between?(65, 90)
7 letter += shift
8 if letter > 90
9 letter = (letter - 90) % 26 + 64
10 end
11 elsif letter.between?(97, 122)
12 letter += shift
13 if letter > 122
14 letter = (letter - 122) % 26 + 96
15 end
16 end
17 }
18
19 p decrypt
20
21 end
22
23 caesar_cipher("What a string!", 5)
24
25 #=> [[87, 104, 97, 116, 32, 97, 32, 115, 116, 114, 105, 110, 103, 33]
# result from `p ascii` in line 4
[66, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil]
# result from `p decrypt` in line 19
これが助けになりました!私のコードからはもっと欠けていました。私は 'decrypt'を繰り返して' .join'とブロックの最後をコールしなければなりませんでした。ありがとう! –