간단한 nested if문을 푸는 도중에 발생한 문제. type 구분에 대한 중요성을 알게되어 간단히 포스팅 한다.
Q. 다음의 방정식을 해결하는 프로그램을 구현 하세요. x값을 구해야 합니다.
a=int(input())
b=int(input())
ax = b
간단히 말하자면, 정수 a와 b를 입력했을 때, 이를 만족하는 x가 여러개일 경우에는 "Many Solutions", 1개일 경우에는 x를, 만족하는 해가 없을 때는 "No Solution"을 출력하도록 하면 된다.
if a*b==0:
if a==0 and b==0:
print("Many Solutions")
elif a==0 and b!=0:
print("No Solution")
else:
print("Many Solutions")
elif a*b!=0:
if b%a==0: ==> 테스트 pass
#if type(b/a)==int: ==> 테스트 fail
print(b/a)
else:
print("No Solution")
테스트 fail 이라고 표기한 부분이 내가 첫번째로 작성한 코드이다. 테스트 중 일부 문항을 통과하지 못하는 문제가 발생했다.
원인은 간단했지만, 추후에도 이런 실수를 반복할 가능성이 있어서 짚고 넘어가려 한다...
>>> type(4)
<class 'int'>
>>> type(type(4))
<class 'type'>
>>> type(int)
<class 'type'>
>>> 4==int
False
type으로 클래스를 확인해보면 type(4)의 클래스는 int이지만, type(int)의 클래스는 type이다... 즉, int와 type이라는 서로다른 클래스를 비교하고 있기 때문에 애당초 위의 코드는 성립할 수가 없다.
>>> type(4)==int
True
내가 처음 잘못 작성한 코드는 b/a의 상태에 따라 if True, if False로 무엇이 True 혹은 False인지를 비교하지 않기 때문에 에러가 발생했다...