2012-04-27 1 views
0

파이썬에서 아주 작은 (어리석은) 문제가 있습니다. 텍스트 파일을 전송하기 위해 클라이언트 - 서버 프로그램에서 작업 중입니다. 현재는 몇 가지 문제가 있습니다. 파일을 받으려고합니다. 그는 파일을 저장하고 싶다면 나는 그가 Y 들어가거나 작동하지 않는 Y, 여기에 조각 경우에도 사용자에게 물어 때 내 문제는 다음과 같습니다파이썬 오류 : 문자열 검증을위한 명백한 조건이 작동하지 않습니다.

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)에 들어있는 것을 깨달았습니다. 바보 같은 바보입니다. :)). 당신이 정말 맞습니다! 그것은 "and"또는 "or"이 아니어야했습니다. 그런 루키 실수. 나는 그것이 어리 석다는 것을 알았지 만 잃어버린 나는이 바보 같은 실수를 발견 할 수 없었다. 나는주의를 기울이지 않았다. 다시 감사합니다! – user1324879

+0

도와 주셔서 대단히 환영합니다. StackOverflow에 적극적으로 참여하여 여기에 도움을 주시면 감사하겠습니다. 가장 도움이되는 답변에 투표하십시오 (답변에 체크 표시를 클릭하십시오). 그리고 질문에 답변함으로써 배운 내용을 공유하십시오. –

관련 문제