2017-09-06 11 views
0

アルファベットの文字の後にアルファベットの13文字を置き換える(エンコードを使用しない)関数を作成する必要があります。私はPythonには比較的新しいので、Encodeを使わないでこれを行う方法を理解するのはしばらく時間がかかりました。ROT 13 Cipher:関数のPythonを作成する

これまで私がこれまで持っていたことは次のとおりです。これを使って「こんにちは」のような普通の単語を入力すると機能しますが、特殊文字で文章を通すとどうなるのでしょうかJUSTにはアルファベットの文字とスキップ番号、スペースまたは特殊文字が含まれています完全に。

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 

EDIT

私は.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の使用に縛られない、それはループ

for i in c: 

ISNための第二をどうするのです(OPの編集を参照)はisalphaを使用することをお勧め、と思っていました必要であり、複製を引き起こしています。それを削除する必要があります。代わりにindex = a.index(i)を使用するだけで同じことができます。あなたはすでにこれをやってますが、何らかの理由で代わりにリストに追加し、混乱

使用index変数あなたはfor i in cループ内iを使用しているだろう、いつでも引き起こしていました。副次的な点として、ネストされたforループでは、同じ変数を再利用しないようにしてください。混乱の原因になります...しかし、それはコードレビューの問題です。

そうすればうまくいくはずです。

+0

これは素晴らしい仕事でした - ありがとう! –

関連する問題