2017-01-24 9 views
1

私が取り組んでいるプロジェクトのPythonスクリプトを書いていますが、私は理解できないエラーに遭遇しています。私はかなりPythonを新しくしているので、これは非常に素人な質問である場合は謝罪します。Pythonの文字列ベースのif文

テキストファイルから取得した文字列を比較するif文があります。この入力を受け取り、入力が何であったかに応じてファイルの場所の文字列を返します。しかし、スクリプトを実行すると、入力が正確に比較されているときでも、常にelse節に解決されます。

def findfile(input): 
    if input.lower() == 'option a': 
      return 'file location a' 
    elif input.lower() == 'option b': 
      return 'file location b' 
    elif input.lower() == 'option c': 
      return 'file location c' 
    elif input.lower() == 'option d': 
      return 'file location d' 
    else: 
      return 'Invalid Input' 

スクリプトの前半にチェックがあり、渡された入力が文字列であることがわかりました。それにもかかわらず、たとえ文字列'option b'を渡しても、を返します。

ご協力いただきありがとうございます!

+0

Pythonには組み込み関数 'input()'があります。パラメータまたは変数にはこの名前を使用しないでください。また、カスケードされた 'if'の代わりに' {'option a': 'file location a'、...} 'の辞書ルックアップを考えてみましょう。 – DyZ

+2

サイドノート:小さな仕事を保存して、大文字と小文字の変換を一度実行すると、 'input = input.strip()。lower()'を関数の最初の行に置き、 '.lower()'コールを削除します各条件テストからそして、変数にPythonの組み込み関数(例えば 'input')と同じ名前を与えてはいけません。そうしないと、最終的に自分自身が台無しになるでしょう。おそらく 'inp'または' inputstr'です。 – ShadowRanger

+0

'findfile( 'option b')'は ''ファイルの場所b''を返すので、実際にはその文字列ではないと思います。 –

答えて

2

文字列の末尾に改行があるため、ファイルから入力があった場合に発生する可能性があります。削除するにはstripを使用してください。

+0

それは、ありがとうございました –

+0

@ JohnGredler Pruneによって提案されているように 'print'を使ってデバッグすると、問題が示されていました。これはコースでは無視されているようですが、学ぶことは非常に貴重です。 –