2015-11-01 90 views
-1

我試圖實現類似的編碼方案凱撒密碼的字符串只包含大寫字母,下劃線和句點。旋轉將使用字母順序執行: ABCDEFGHIJKLMNOPQRSTUVWXYZ_。函數rrot(rot,s)以一個整數rot和一個字符串s作爲輸入,並返回s的一個副本,s被反轉,然後被移位

mycode的到目前爲止:

def rrot(rot, s): 
    'returns reverse rotation by rot of s' 
    res = '' 
    for c in s: 
     x = ord(c) 
     res += chr(x + rot) 
     copy = res[::-1] 
    return copy 

的輸出的一些實例是:

>>> rrot(1, 'ABCD') 
'EDCB' 
>>> rrot(3, 'YO_THERE.') 
'CHUHKWBR.' 
>>> rrot(1, '.DOT') 
'UPEA' 
>>> rrot(1, 'SNQZDRQDUDQ') 
'REVERSE_ROT' 

但是跑時,它圍繞着整個字母表包括符號{[操作/等我得到正確的換檔對於大多數的字母,但得到不需要的符號。我的不正確輸出:

>>> rrot(3, 'YO_THERE.') 
'1HUHKWbR\\' 
>>> rrot(1, 'SNQZDRQDUDQ') 
'REVERSE[ROT' 

但是,這是正確的:

>>> rrot(1, 'ABCD') 
'EDCB' 

,我怎麼把它遵循只是本地字符的字母順序「ABCDEFGHIJKLMNOPQRSTUVWXYZ_。」?

+0

請出示你的企圖,因此沒有一個代碼編寫服務 – Pynchia

+0

*「我很被困在這個」 *考慮到你沒有顯示任何東西,這看起來像是「爲我寫的!」任務。你可以在codersclan上提供一些錢。 –

+0

對不起,我試圖教自己python。我主要是爲這個問題尋找某種類型的方向,而不是代碼本身。我會測試我的嘗試然後更新這個。抱歉。 – Frank

回答

1

你的代碼就可以簡單地固定:

def rrot(rot, s): 
    'returns reverse rotation by rot of s' 
    res = '' 
    for c in s: 
     x = ord(c) 
     res += chr(x + rot) 
     copy = res[::-1] 
    return copy 

您可以修復它通過更換使用的字符另一份訂單:

x = ord(c) 
    res += chr(x + rot) 

隨着說:

x = alphabet.index(c) 
    res += alphabet[(x + rot) % len(alphabet)] 

考慮:

alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_.' 

def rrot(rot, s): 
    'returns reverse rotation by rot of s' 
    res = '' 
    for c in s: 
     x = alphabet.index(c) 
     res += alphabet[(x + rot) % len(alphabet)] 
     copy = res[::-1] 
    return copy 

使用那些不好的例子:

>>> rrot(3, 'YO_THERE.') 
'1HUHKWbR\\' 
>>> rrot(1, 'SNQZDRQDUDQ') 
'REVERSE[ROT' 

這裏的這些例子的結果:

>>> rrot(3, 'YO_THERE.') 
'CHUHKWBR.' 
>>> rrot(1, 'SNQZDRQDUDQ') 
'REVERSE_ROT' 

另一種方法是建立像一個轉換表:

trans = dict(zip(alphabet, alphabet[rot:] + alphabet[:rot])) 

一次外循環然後使用:

res += trans[c] 

像這樣:

alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_.' 

def rrot(rot, s): 
    'returns reverse rotation by rot of s' 
    trans = dict(zip(alphabet, alphabet[rot:] + alphabet[:rot])) 
    res = '' 
    for c in s: 
     res += trans[c] 
     copy = res[::-1] 
    return copy 

具有相同的結果:

>>> rrot(3, 'YO_THERE.') 
'CHUHKWBR.' 
>>> rrot(1, 'SNQZDRQDUDQ') 
'REVERSE_ROT' 
相關問題