2017-06-14 16 views
1

私はパイソンのオンラインコースに従っていますが、私たちは現在シーザー暗号に取り組んでいます。私は、このサイトのトピックで多くの質問に答えましたが、私のコードのような以前の関数を使用しなければならないという注意点はありません。最初の2つの関数は、複数の入力を使ってそれらをテストしたときに正常に動作しますが、最後の関数を追加すると、暗号化された部分文字列が見つからないというエラーが発生します。私はこの最後の部分のために何をすべきかについて迷っています。誰かが正しい方向に私を振る舞う提案がありますか?シーザー暗号で前提条件関数

def alphabet_position(letter): 
    alphabet ="abcdefghijklmnopqrstuvwxyz" #Lists alphabet for a key 
    lower_letter = letter.lower() #Makes any input lowercase. 
    return alphabet.index(lower_letter) #Returns the position of input as a number. 

def rotate_character(char, rot): 
    alphabet = "abcdefghijklmnopqrstuvwxyz" 
    if char.isalpha(): 
     a = alphabet_position(char) 
     a = (a + rot) % 26   #needs modulo 
     a = (alphabet[a]) 
     if char.isupper(): 
      a = a.title() 
     return a 
    else: 
     return char 

def encrypt(text, rot): 
    list1 = "" 
    for char in text: 
     list1 += rotate_character(text, rot) 
    return list1 

def main(): 
    x = input("Type a message: ") 
    y = int(input("Rotate by: ")) 
    #result = rotate_character(x, y) #Not needed once encrypt function works. 
    result = encrypt(x, y) 
    print (result) 

if __name__ == '__main__': 
    main() 
+0

あなたの代わりに文字列での検索の文字のASCIIコードを取得するには、 'ord'と' chr'を使用する必要があります。また、 'codecs.encode(" foo "、" rot13 ")を使うと1行で同じことができます。 –

+0

@ Jean-FrançoisFabre私はあなたが正しいとは疑いがありませんが、これは初心者ではないクラスで教えられていない関数やメソッドを使用してもらいたいです。私は将来の参考のためにそれらを研究しますが、ありがとう! –

答えて

0

個々の文字を個別に回転したいが、完全なテキストを回転機能に渡している。

代わりに使用します。

def encrypt(text, rot): 
    list1 = "" 
    for char in text: 
     list1 += rotate_character(char, rot) # "char", not "text" 
    return list1 
+0

ありがとう、それは完璧に働いた!それらの小さなパラメータの混乱は、現時点では私の主な問題であるようです。 –

+0

あなたは大歓迎です。回答が受け入れられていると自由に記入してください。 –