2012-04-27 4 views
0

私はPythonで小さな(愚かな)問題を抱えていますが、私はクライアント/サーバプログラムを使ってテキストファイルを転送しています。私はファイルを受け取ろうとします。彼は、ファイルを保存したい場合、私は彼がY入るか、それが動作しないY、ここでは、スニペットの場合でも、ユーザーに尋ねるとき、私の問題は、次のとおりです。pythonエラー:文字列を検証するための明白な条件が機能しない

print "Listening on input" 
    a = 1 
    while a == 1: 
     pipe = open(fifoclient,'r') 
     dr, dw, de = select.select([pipe], [], [], 0) 
     if dr: 
      content = pipe.read() 
      liste = content.split("delimiter") 
      expediteur = liste[1] 
      filecont = liste[2] 

      print "You received a file from : " + expediteur + ". Wanna save it?" 
      answer = raw_input("O/N: ") 
      while answer != "O" or answer != "N" or answer != "o" or answer != "n": 
       print "Please enter a correct answer:\n" 
       answer = raw_input("O/N: ") 
      if answer == "O" or answer == "o": 
       fileoutpath = str(raw_input("please enter the complete path for where you want to save the file to: ")) 
       while os.path.exists(fileoutpath): 
        print "THe file already exists, chose another path:\n" 
        fileoutpath = str(raw_input("please enter the complete path for where you want to save the file to: ")) 
       fileout = open(fileoutpath,'w') 
       fileout.write(filecont) 
       fileout.close() 
      else: 
       a = 0 

それはO/Nを要求したときに問題があります(Oui/Nonそれはフランス語です:))。 "o"または "O"と入力しても、正しい答えを入力するように依頼します。 ご協力いただければ幸いです。ありがとうございました!

+2

この種の問題については、取得したユーザー入力/応答をすべて小文字(または大文字)に変換しておき、異なるケースについて心配することなく簡単な比較を行う価値があります。 – Levon

答えて

2

これは、条件が間違っているためです。

answer != "O" or answer != "N" or answer != "o" or answer != "n" 

は常にtrueです。それは次のように評価され

:あなたが見ることができるよう

(answer != "O") or (answer != "N") or (answer != "o") or (answer != "n") 

、文の一つが常に真である、と彼らはorによって連鎖されているので、式全体が何であなたの入力、Trueに評価されていません。

orからandに変更してください。意図したとおりに動作します。 boolen論理エラーです

2

、あなたが書く必要があります:

while answer != "O" and answer != "N" and answer != "o" and answer != "n": 

または単純に:

while answer not in "oOnN": 
0

ます。また、テストを逆にすることができます

# ask question, suggest answer, convert response to lower case 
answer = raw_input("Are you happy? (enter Y or N)").lower() 

# allow several possible responses 
if answer in ("y", "yes"): 
    # do whatever for 'yes' response 

考慮すべきもう一つのアプローチ:

if answer not in ("y", "yes"): 
    # did not answer 'yes' (or equiv) 
+0

ああ私の神!!!!!どうもありがとうございます。私はちょうど、私が範囲(100000)のために何を実現しましたか:私は:))愚かなばかです。あなたはとても正しいです!それは「と」ではなく「または」でなければならなかった。そんなルーキーミス。私はそれが何かばかげたことを知っていましたが、私は失われたこの少しばかげた間違いを見つけることができませんでした。私は注意を払っていませんでした。ありがとうございました! – user1324879

+0

大歓迎です。喜んで助けてください。 StackOverflowに積極的に参加することで、ここで受け取った助けに感謝することができます。あなたに最も役立つ答えに投票してください(回答のチェックマークをクリックしてください)。 –