p.102에 논리연산자 관련해서 0과 0.0 이외의 모든 숫자는 True라고 나오는데 True and 3 같은건 3으로 잘 나오는데
왜 True == 3 같은건 False로 뜨나요? ==로 비교하면 True== 1, 1.0에서만 참으로 뜨고 나머지 숫자는 모두 거짓으로 뜨는데 뭔가 다른 이유가 있나요??
모든 언어에는 이상함이 있습니다. 외우려하지 말고 필요할 때 IDLE에서 테스트해보고 코딩하시면 됩니다.
103쪽에 단락 평가 참고가 있습니다. 중간에 보시면
왜냐하면 파이썬에서 논리 연산자는 마지막으로 단락 평가를 실시한 값을 그대로 반환하기 때문입니다. 따라서 논리 연산자는 무조건 불을 반환하지 않습니다.
False and 3이면 False로 평가가 끝났습니다. 따라서 False가 출력됩니다.
True and 3이면 True에서 평가가 끝나지 않고, 단락 평가를 실시간 값을 그대로 반환하므로 3이 됩니다.
책에 쓰인 True and 'Python'의 결과는 'Python'이 되는 것도 마지막 단락 평가를 실시한 값을 그대로 반환하기 때문입니다.
102쪽 참고에 설명된 bool 함수는 값을 bool로 만들 때 사용합니다. 이 때는 0, 0.0이 아닌 숫자는 True를 반환합니다. 본래 False를 가리키는 값으로 0을 사용하는 관례가 있습니다. 다른 프로그래밍 언어를 사용해도 해당 언어에서도 0을 False로 사용하는 경우가 대부분이라는 뜻입니다.
반대로 True 자체는 1 또는 1.0입니다.
int(True)를 실행하면 1이 반환됩니다.
따라서 int(bool(4))를 실행해보면 결과는 1이 됩니다. bool 함수는 0이 아닌 모든 숫자를 True로 반환하고, int 함수는 True만 1로 반환하기 때문입니다.
True는 1로 정의되어 있으므로 True == 1은 True이지만, 1, 1.0이 아닌 다른 숫자에 대해서는 False가 됩니다. True == 3은 False가 됩니다.
bool 함수는 0이 아닌 값이 있는 함수를 True로 변환해주는 함수입니다. 0에 대해서는 False로 변환해줍니다.
True는 1, False는 0으로 정의되어 있으므로 True와 1을 비교하면 True지만, 1이 아닌 값과 True를 비교하면 False입니다. False와 0을 비교하면(False == 0) True지만, 0이 아닌 값과 False를 비교하면 True입니다.
파이썬만 이렇게 다루는 건 아니고 대다수의 프로그래밍 언어가 문법의 차이는 있지만, 이렇게 다루고 있습니다.