2017-09-06 190 views
0

我需要創建一個函數,用字母后面的13個字母替換一個字母(不使用編碼)。我對Python相對來說比較陌生,所以我花了一段時間才找出一種不使用Encode的方法。ROT 13密碼:創建函數Python

這是我到目前爲止。當我用它來輸入一個像「hello」這樣的正常單詞時,它可以工作,但是如果我通過一個帶有特殊字符的句子,我不知道如何包含字母表中的字母以及跳過數字,空格或特殊字符完全。

def rot13(b): 
    b = b.lower() 
    a = [chr(i) for i in range(ord('a'),ord('z')+1)] 
    c = [] 
    d = [] 
    x = a[0:13] 
    for i in b: 
     c.append(a.index(i)) 
    for i in c: 
     if i <= 13: 
      d.append(a[i::13][1]) 
     elif i > 13: 
      y = len(a[i:]) 
      z = len(x)- y 
      d.append(a[z::13][0]) 
    e = ''.join(d) 
    return e 

編輯

我嘗試使用.isalpha(),但這似乎並沒有爲我工作 - 字符複製出於某種原因,當我使用它。以下格式是否正確:

def rot13(b): 
    b1 = b.lower() 
    a = [chr(i) for i in range(ord('a'),ord('z')+1)] 
    c = [] 
    d = [] 
    x = a[0:13] 
    for i in b1: 
     if i.isalpha(): 
      c.append(a.index(i)) 
      for i in c: 
       if i <= 12: 
        d.append(a[i::13][1]) 
       elif i > 12: 
        y = len(a[i:]) 
        z = len(x)- y 
        d.append(a[z::13][0]) 
     else: 
      d.append(i) 
    if message[0].istitle() == True: 
     d[0] = d[0].upper() 
    e = ''.join(d) 
    return e 
+0

也許如果檢查'character.isalpha()'會有幫助嗎? 「character」被替換爲你用來容納角色的任何可變因子 –

+0

這聽起來像是一個用正則表達式很容易解決的問題。 –

+0

嗨@LukeK我嘗試使用character.isalpha()如你所建議的。你能看看我的編輯,讓我知道我做錯了什麼?出於某種原因,當我使用.isalpha() –

回答

0

繼續發表評論。 OP被告知使用因而isalpha,並想知道爲什麼這是造成重複(見OP的編輯)

這是不依賴於使用isalpha,它與第二個for循環

for i in c: 

ISN做」必要的,並導致重複。你應該刪除它。相反,只需使用index = a.index(i)即可。您已經在執行此操作,但出於某種原因追加到列表中,導致混淆

任何時候在for i in c循環內使用i變量時都會使用index變量。在附註中,嵌套for循環不要重複使用相同的變量。這隻會導致混淆......但這是代碼審查的問題

假設你做的一切正確,它應該工作。

+0

這很好 - 謝謝! –