2015-09-23 138 views
-2

我得到這個代碼的不可預知的響應,如果使用的短語只有一個字的輸出是預測的,如果移位是0,它推動事情直通。但是當這個短語中有空格的時候,這種轉變似乎是不可預測的。如果有人能看到的圖案,或者見識一下什麼方法都在做幕後(使用名new1陣列作爲接收yeilded一個不變的陣列)奇怪的行爲,從凱撒凱撒密碼實現

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恩,, .. VWXYZ」

「gsbol」

「hucpo JS b xjnlz mvodjing xombbt」。

道歉,如果這是在別處回答,說實話,我什至不知道該問什麼。

回答

0

這隻要一個字母重複本身就是錯誤的:

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

使用each_with_index,而不是!

+0

aha,所以它找到'x'的第一個實例而不是使用當前實例,這是有道理的。你是紳士先生(不是性別歧視者) –

+0

邑,這是正確的:) – SlySherZ