来自ruby caesar密码实现的奇怪行为

时间:2015-09-23 22:53:57

标签: ruby

我从这段代码得到了不可预测的响应,如果使用的短语只有一个单词输出是预测的,那么如果移位为0则它会直接推动。但是当短语中有空格时,转变似乎无法预测。如果有人可以看到这个模式,或者告诉我幕后方法正在做什么。(使用new1数组作为接收者,并且使用了一个未改变的数组)

def caesar (phrase, shift)
    alpha=('a'..'z').to_a
    #new1=[]
    temp=phrase.downcase.split('') 
    temp.each{|x| (temp[temp.index(x)]=alpha[(alpha.index(x)+shift)%26]) if alpha.include?(x)}

    p temp.join

end


caesar("abcde fghijklmnopqrs tu,,..vwxyz", 1)   
caesar("Frank", 1)  
caesar("Frank is a willy munching wombat.", 1)

结果:

" abcde fghijklmnopqrs tu ,, .. vwxyz"

" gsbol"

" hucpo js b xjnlz mvodjing xombbt。"

如果在其他地方得到回答,请道歉,说实话我甚至都不知道该问什么。

1 个答案:

答案 0 :(得分:0)

一旦信件重演,这就错了:

temp[temp.index(x)]=...

改为使用each_with_index!