2016-11-08 31 views
-1

私は、ユーザーからの入力を取り、それをエンコードしてユーザーに表示するアプリケーションを構築しようとしています。ユーザー入力の文字は出力の別の文字に置き換えてください。これは、辞書のキー/値とともに使用されます。私のコードでは、それは1文字でしか動作しません。それ以上の文字が入力された場合は、それが壊れます。任意のアイデアは、入力に単語を入力することができると非常に高く評価され、反対の文字は出力の単語として表示されます。辞書のキー/値のpython

def getInput(): 

    userInput = input("Enter String to encode: ") 
    return userInput 

def displayOutput(userInput, encoding): 

    matchFound = False 
    for key in encoding: 
     if (key == userInput): 
      print("Encoded message", encoding[key]) 
      matchFound = True 
      break 


    if matchFound == False: 
     print("***Error*** No Match Found!") 

def main(): 

    encoding ={"a": "b", "b": "c", "c": "d", "d": "e", "e": "f", "f": "g", "g": "h", "h": "i", "i": "j", "j": "k", "k": "l", "l": "m", "m": "n", "n": "o", "o": "p", "p": "q", "q": "r", "r": "s", "s": "t", "t": "u", "u": "v", "v": "w", "w": "x", "x": "y", "y": "z", "z": "a", " ": "-"} 


    userInput = getInput() 
    displayOutput(userInput, encoding) 


main() 
+1

あなたは "それが壊れる" よりも詳細なことはできますか? –

+0

入力文字列の文字をループする必要があります。 – molbdnilo

+0

また、なぜ 'encodingでのuser_input'と' for key in encoding'ループを避けるのでしょうか? –

答えて

0

私があなたの要件を正しく理解していれば、以下のアプローチが役立ちます。値の入力がない場合はエンコードを試み、既存のエンコーディングが見つからない場合は処理してください。

def encode(s, encoding): 
    try: 
     return ''.join(encoding[character] for character in s) 
    except KeyError: 
     print "Encoding not found." 

サンプル出力:

>>> encoding = {"a": "b", "b": "c", "c": "d", "d": "e", "e": "f", "f": "g", "g": "h", "h": "i", "i": "j", "j": "k", "k": "l", "l": "m", "m": "n", "n": "o", "o": "p", "p": "q", "q": "r", "r": "s", "s": "t", "t": "u", "u": "v", "v": "w", "w": "x", "x": "y", "y": "z", "z": "a", " ": "-"} 
>>> encode("helloworld", encoding)  
ifmmpxpsme 
>>> encode("HelloWorld", encoding) 
Encoding not found. 
+0

助けてくれてありがとう。私は非常にそれを感謝:) – nigelp12345

0

userInput全体のエンコードの要素を比較しています。個々の文字を個別に処理する必要があります。

+0

私が把握しようとしていると私はそれを – nigelp12345

+0

を行う方法がわからないんだけど、正確に何を知っています'userInput'の各文字にアクセスする方法は? –

+0

残念ながら私はしません。おそらく例がありますか? – nigelp12345

0

入力文字列全体をエンコードキーと比較する代わりに、userInput文字列を繰り返し処理する必要があります。

encodedString = "" 

for inputChar in userInput: 
    if (inputChar in encoding): 
     encodedChar = encoding[inputChar] 
     encodedString = encodedString + encoding[inputChar] 
    else: 
     encodedString = encodedString + inputChar 

(未テスト...ちょうど私の頭の上をオフに入力されたので、実際に動作しない場合があります。)

このソリューションを使用すると、出力文字列(encodedStringを)したいことを想定している:ような何かエンコーディングに含まれていない文字については、入力文字を使用するだけです。それがあなたが本当に欲しいものかどうかは分かりません。

EDIT:エンコードされた入力文字に対してのみ機能するようにしたい場合、mrdomobotoのソリューションはより効率的でコンパクトです。

+0

おそらくJavaと思われるもの、Pythonのタグ付けされた質問では、興味深い選択です。 – ospahiu

+0

はい、申し訳ありません...今、私はそれを修正しました。 –