2012-02-02 4 views
1

일부 데이터 유효성 검사 및 정리를 Python을 사용하여 수행 중이며 수행중인 부울 비교에서 논리적 오류가 발생했습니다. 정리가 필요한 조회 테이블이 있으므로 범위 값을 비교하여 값 집합간에 겹침이 없는지 확인합니다. 모든 목록 값은 CSV 파일에서 입력됩니다.Python 부울 비교 논리 오류

코드 :

*Filter logic II for XYZ KEY123 PRE: 
outerRow[3] 0 >= innerRow[3] 80 and outerRow[3] 0 <= innerRow[4]100 OR outerRow[4] 79 >= innerRow[3] 80 and outerRow[4] 79 <= innerRow[4]100 
Filter logic II = False* 

그러나이 (예상치 못한) 두 번째 실행 후 결과 : I 오전

*Filter logic II for 080570BD 1998 VA PRE: 
outerRow[3] 80 >= innerRow[3] 0 and outerRow[3] 80 <= innerRow[4]79 OR outerRow[4] 100 >= innerRow[3] 0 and outerRow[4] 100 <= innerRow[4]79 
Filter logic II = True* 

처음 실행 한 후 결과를 얻을 수

print >>f2, "Filter logic II for " + myKey[0] + " " + myKey[1] + " " + myKey[2] + ":" 
print >>f2, "outerRow[3] " + outerRow[3] + " >= innerRow[3] " + innerRow[3] + " and outerRow[3] " + outerRow[3] + " <= innerRow[4]" + innerRow[4] + " OR outerRow[4] " + outerRow[4] + " >= innerRow[3] " + innerRow[3] + " and outerRow[4] " + outerRow[4] + " <= innerRow[4]" + innerRow[4] 
if ((outerRow[3] >= innerRow[3]) and (outerRow[3] <= innerRow[4])) or ((outerRow[4] >= innerRow[3]) and (outerRow[4] <= innerRow[4])): 
    Test2 = True 
    print >>f2, "Filter logic II = True" 
else: 
    Test1 = False 
    print >>f2, "Filter logic II = False" 

논리적 비교에서 잘못 되었습니까? 나는 이것에 대해 너무 오랫동안 쳐다 보았다. 나는 월드 와이드 네트워크로부터 도움을 얻을 수 있는지를 알았다.

+2

예는 작은이라면 따라하기 쉬울 것 ... – krlmlr

+0

이유는 첫 번째 예는 맞습니까? 0은 80보다 작습니다. 따라서 79. – recursive

+0

입니다. 왜냐하면 그는 문자열을 사용하여 테스트하기 때문입니다. 주어진 답이 바로 그것을 얻었다. – jdi

답변

3

데이터를 int으로 변환 해보세요. 이 대화 형 파이썬 쉘에서입니다 :

>>> "100" <= "79" 
True 
>>> 100 <= 79 
False 
>>> int("100") <= int("79") 
False 
+0

캐스트? 파이썬으로? – juliomalegria

+2

예. 강하게 입력되지 않았다고해서 유형이 없다는 것을 의미하지는 않습니다. – krlmlr

+2

파이썬에는 유형이 있지만 캐스팅이 없다는 것을 알고 있습니다. 나는 올바른 단어가 "변환"될 것이라고 생각한다 ([source] (http://docs.python.org/library/functions.html#int)) – juliomalegria