2017-11-16 7 views
1

ユーザーからの2つの文字列入力を受け取り、1つの文字列値を返す関数を作成しました。これは、メッセージや何らかの形式のテキストを保持する1つの文字列と、ユーザーが入力したカスタムアルファベットを保持する別の文字列を取ることを意図しています。次に、ユーザーが入力したアルファベットを使用してエンコードされたメッセージを返します。カスタムエンコーディング関数のエラー

例:私の関数のエンコーディングが正常に動作

text_to_encode = "abcd" 
user_alphabet = "bcdefghijklmnopqrstuvwxyz" 

print(encode(text_to_encode, user_alphabet)) 

にスペースを含む文字列になると、しかし、それはスペースを無視し、空白なしでエンコードされたメッセージを出力します。

例:

text_to_encode = "ab cd" 
user_alphabet = "bcdefghijklmnopqrstuvwxyz" 

print(encode(text_to_encode, user_alphabet)) 

これの出力は次のようになります。それは "BC DE" は "BCDE"。

私のコードでどこが間違っているのか分かりませんが、どんな助けにも感謝します。これは私が持っているものです。

def encode(text_to_encode, user_alphabet): 
text_to_encode_list = [] 
for ch in text_to_encode: 
    text_to_encode_list.append(ch) 

user_alphabet_list = [] 
for ch in user_alphabet: 
    user_alphabet_list.append(ch) 

original_alphabet = "abcdefghijklmnopqrstuvwxyz" 
original_alphabet_list = [] 
for ch in original_alphabet: 
    original_alphabet_list.append(ch) 

result = [] 
for value_x in text_to_encode_list: 
    flag = False 
    for value_y in original_alphabet: 
    if value_x == original_alphabet_list[value_y]: 
    flag = True 
    result.append(user_alphabet_list[value_y]) 
    break 
if flag == False: 
    result.append(value_x) 

encoded_text = "" 
for value in result: 
    encoded_text += value 

return encoded_text.upper() 
+0

なぜすべての文字列をリストに変換していますか?リストと同じインデックスで文字列にアクセスできます。 – Barmar

+0

私はかなり新しいプログラミングです...チップのおかげで! –

+0

ネストされたループの代わりに、元のアルファベットからユーザのアルファベットまでのマッピングを含む辞書を作成する必要があります。 – Barmar

答えて

0

このコード:

if flag == False: 
    result.append(value_x) 

for value_xループにする必要があります。ループの終了後にそれがあるので、入力の最後の文字が見つからない場合にのみ機能します。