2753번 - 윤년
x=int(input())
if (x%4==0 & x%100!=0) | x%400==0 :
print(1)
else :
print(0)
왜 틀린걸까요? 이 상태로 input 값으로 2012를 넣으면 1이 아니라 0이 나오네요
반면에 &, | 을 and, or로 바꾸거나
((x%4==0) & (x%100!0)) | x%400==0 :
이렇게 괄호로 한번씩 더 감싸주면 2012를 넣을때 올바른 값 1 이 나옵니다.
무슨차이가 있는 건가요?
&는 and가 아닙니다.
마찬가지로 |도 or가 아닙니다.
&, | 는 비트연산자가이고
and,or는 논리연산자입니다.
True or False면 and, or를 사용해야됩니다.
근데 본문의 아래쪽에 작성한바와 같이 괄호로 묶어주면
올바른 값이 나옵니다.
무슨 차이인지 알 수 있을까요?
컴파일러는 |를 ==보다 먼저 계산합니다.
띄어쓰기로 구분해서 작성해도 컴파일러는 띄어쓰기를 무시합니다.
여기서는 아래와 같이 x%400==0보다 ...|x%400을 먼저 계산했기 때문에 일어난 일입니다.
|x%400 을 지운 상태로
if (x%4==0) & (x%100!=0) :
위의 코드와 아래코드에 각각 input으로 2012를 넣어주면 위 코드는 1을 아래 코드는 0을 출력합니다
위 코드에서 1이 출력하는 이유는 알겠는데
아래와 같이 작성했을 때 0을 출력하는 이유를 모르겠습니다.
if (x%4==0 & x%100!=0) :
댓글을 작성하려면 로그인해야 합니다.
ooooooow 2년 전 1
x=int(input())
if (x%4==0 & x%100!=0) | x%400==0 :
print(1)
else :
print(0)
왜 틀린걸까요? 이 상태로 input 값으로 2012를 넣으면 1이 아니라 0이 나오네요
반면에 &, | 을 and, or로 바꾸거나
((x%4==0) & (x%100!0)) | x%400==0 :
이렇게 괄호로 한번씩 더 감싸주면 2012를 넣을때 올바른 값 1 이 나옵니다.
무슨차이가 있는 건가요?