스트링에서도 쓸 수 있는 논리 연산자 xor은 어디에 있나요?

발생하는 문제 및 실행환경

스트링 값 2개를 비교해서 하나만 참값(None이나 ""가 아닌 스트링) 일 때 True를 return 해야 하는데

^은 논리 연산자가 아니라 bit연산자인 것 같고, 또 str1 ^ str2같이 스트링에서는 쓸 수가 없습니다. 밑의 소스코드에서 logical_xor()부분을 어떻게 해야 만들 수 있을까요?

소스코드

str1 = raw_input("Enter string one:") #입력
str2 = raw_input("Enter string two:") #입력
if logical_xor(str1, str2): #여기가 만들어야 하는 부분
    print "ok"
else:
    print "bad"

1답변

  • 좋아요

    0

    싫어요
    채택취소하기

    string xor연산은

    • ""(empty string)이나 None은 bool()에서 False,
    • 그 외의 스트링("abd" 등)은 bool()로 변환했을 때 True

    임을 이용합니다.

    logic_xor()을 구현하는 방법은 다음과 같습니다.

    1. !=을 쓰는 방법

    def logical_xor(str1, str2):
        return bool(str1) != bool(str2)
    
    mystr0 = "abcd"
    mystr1 = "abc"
    mystr2 = ""
    mystr3 = None
    
    print logical_xor(mystr0, mystr1) #False
    print logical_xor(mystr0, mystr2) #True
    print logical_xor(mystr0, mystr3) #True
    

    2. operator모듈의 xor을 쓰는 방법

    import operator
    
    def logical_xor(str1, str2):
        return operator.xor(bool(str1), bool(str2))
    
    mystr0 = "abcd"
    mystr1 = "abc"
    mystr2 = ""
    mystr3 = None
    
    print logical_xor(mystr0, mystr1) #False
    print logical_xor(mystr0, mystr2) #True
    print logical_xor(mystr0, mystr3) #True
    

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

작성한 답변에 다른 개발자들이 댓글을 작성하거나 댓글에 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.