프로그래밍 언어/파이썬 기초

파이썬 bool형,if문, 논리연산자

tteokbokki-master 2023. 5. 22. 11:01

True는 의미 그대로 '참'을 뜻한다. False는 의미 그대로 '거짓'을 뜻한다.
True 또는 False를 입력하면 값과 데이터로 인식하고 그대로 되돌려준다


파이썬을 쓸 때 대부분 3+4 같은 질문을 하고 그에 해당하는 답변을 전달받지만,
3>10과 같이 3이 10보다 크냐?라는 식의 다른 성격의 질문도 할 수 있다.


파이썬은 사용자가 물어본 값이 참이면 True를, 거짓이면 False를 되돌려주도록 약속되어 있다.

파이썬은 True와 False를 숫자, 문자열, 실수와 같이 데이터의 일종으로 정의 내렸다.
True와 False를 데이터로 정의했기에 변수에 담을 수 있다.

결론. True와 False 도 일종의 데이터(값)이다.

 

 

 

r = 3 < 10
print(r)

3 < 10 연산의 결과인 True가 변수 r에 저장되므로 r을 출력하면 True가 나온다.

 

 

 

type(True)
type(False)

위의 코드를 입력하면 <class 'bool'>가 출력된다. 부울형 데이터(값)이라는 뜻이다. 

 

 

 

int형 데이터 #ex) 3,5,7,9
float형 데이터 #ex) 2.2, 4.4, 6.6, 8.8
리스트형 데이터 #ex) [3,5,7,9], [2.2, 4.4, 6.6, 8.8]
스트링형 데이터 #ex) "Hello", 'Bye'
부울형 데이터  #ex) True, False

타입 정리 

 

 

 

 

 

if 조건:

if문을 사용하는 방법이다.

if문 : 만약 조건이 참이라면 if에 속한 문장을 실행해라.

 

 

 

num = 1
if num > 0: 
    print("양의 정수입니다.")

만약 if의 num이 0보다 크다면 if에 속한 print를 실행하라는 뜻이다.

 

 

 

def main():
    num = int(input("정수 입력: "))
    if num > 0:
        print("양의 정수입니다.")

main()

main함수를 실행시키면 input으로 값을 입력받고 num에 저장시킨다
그리고 if문을 통해 num이 0보다 크다면 if에 속한 print를 실행시키고, 아니면 실행시키지 않는다.

 

 

 

if num > 0:
    print("어쩌구")



if num > 0: print("어쩌구)

위의 두 코드는 같은 코드이다.  if에 속한 문장이 하나인 경우, 한 줄에 이어서 써도 된다.

 

 

 

def main():
    num = int(input("정수 입력: "))
    if num > 0:
        print("0보다 큰 수 입니다.")
    else:
        print("0보다 크지 않은 수 입니다.")

main()

if 오른쪽의 조건이 True라면 if에 속한 문장을 실행시키고, 조건이 False라면 else에 속한 문장을 실행시키라는 뜻이다.

if는 if를 단독으로 사용할 수 있지만 else는 혼자 사용하지 않는다. if에 붙어서 나오거나 다른 형태로 붙어서 나와야 한다.

 

 

 

 def main():
    num  = int(input("정수 입력: "))

    if num > 0:
        print("0보다 큰 수 입니다.")

    elif num < 0:
        print("0보다 작은 수입니다.")

    else:
        print("0으로 판단이 됩니다.")
    
main()

if와 else 사이에 elif(엘스이프)가 중간에 껴있다.

elif는 조건이 하나 더 붙은 것이다. if가 참이 아닐 경우 elif를 통해 조건을 추가로 더 살펴보겠다는 뜻이다.
만약 조건을 더 추가하고 싶으면 elif를 원하는 만큼 더 추가하면 된다.


위 코드의 동작의 순서는

첫 번째로 if의 조건을 먼저 본다. if의 조건이 참이라면 속한 문장을 실행시키고 elif, else전부 건너뛴다.
if의 조건이 거짓이라면 그다음으로 elif의 조건을 살핀다.
elif의 조건이 참이면 elif에 속한 문장을 실행시키고, elif의 조건이 거짓이면 else를 실행시킨다.

 

 

 

def main():
    num = int(input("정수 입력: "))
    if num == 1:
        print("1을 입력했습니다.")
    elif num == 2:
        print("2를 입력했습니다.")
    elif num == 3:
        print("3을 입력했습니다.")
    else:
        print("1,2,3 아닌 정수를 입력했습니다.")

main()

총조건이 3개이다.

if의 첫 번째 조건부터 아래로 쭉 내려온다. 조건이 일치하면 그에 속한 문장을 실행시키고 반복문을 빠져나온다.

 

 

 

 

A >= B  #A가 B보다 크거나 같으면 True, 그렇지 않으면 False 반환 
A <= B  #A가 B보다 작거나 같으면 True, 그렇지 않으면 False 반환 
A == B  #A와 B가 같으면 True, 같지 않으면 False 반환
A != B  #A와 B가 같지 않으면 True, 같으면 False 반환

 

True and True   #True 반환

True and False   #False 반환

True or False   #True 반환

False or False   #False 반환

not False   #False가 아니니 True를 반환

not True   #Ture가 아니니 False를 반환

and는 둘 다 True면 True를 반환한다.
or은 둘 중 하나면 True여도 True를 반환한다.  
not은 True를 False로, False를 True로 바꿔준다.

 

 

 

 

def main():
    num = int(input("2의 배수이면서 3의 배수인 수 입력: "))
    if num % 2 == 0:
        if num % 3 == 0:
            print("OK!")
        else:
            print("NO!")

    else:
        print("NO!")   

main()

if문의 중첩이다. 
if num % 2 == 0:는 2로 나누었을 때 나머지가 0이면 2의 배수라는 소리이다. (2의 배수가 아니라면 바로 else로 직행한다)
2의 배수가 입력되면 조건은 참이 되고 if문에 속한 또 다른 if문을 실행시킨다.

 

그것을 통해 3으로 나누어 떨어지는지(3의 배수인지)를 확인한다.
참이라면 최종적으로 "OK!"가 출력되고 거짓이라면 if속의 else로 이동해 "No!"가 출력된다.

 

 

def main():
    num = int(input("2의 배수이면서 3의 배수인 수 입력: "))
    if (num % 2) == 0 and (num % 3) == 0:
      print("OK!")
    else:
        print("NO!")
main()

바로 직전의 코드와 같은 결과를 내놓는 코드이다.
단 직전의 코드는 if, else가 두번 사용되었고 
이 코드는 and연산의 등장으로  if,else가 한번 사용되었다 

and연산은 왼쪽과 오른쪽에는 True 또는 False가 와야 한다.

그러나 이 코드에서는 and 양 옆으로 연산문이 와있기에 연산을 먼저 진행한다 
둘 다 연산결과가 True 라면 결과적으로 True and True가 된다. 그럼 당연히 True가 되고 if에 속한 문장을 실행시킨다.

 

 

 'abc' === 'abc' #두 문자열이 같은가를 물어보는 것이다. True가 출력된다.
 'abc' != 'abc' #두 문자열이 같은가를 물어보는 것이다. False가 출력된다.

 [1,2,3] == [1,2] #두 리스트가 다른데 같냐고 물어봤으니 False가 출력된다.
 [1,2,3] != [1,2] #두 리스트가 다른데 다르냐고 물어봤으니 True가 출력된다.

 

 

 

 

st1 = "123"
st2 = "OneTwoThree"

st1.isdigit() 
st2.isdigit()

isdigit는 숫자로만 이루어져 있는지 물어보는 함수이다.
st1은 숫자로만 이뤄져 있기에 True가 출력되고 st2는 문자로 이뤄져있기에 False가 출력된다.

 

 

 

st1 = "123"
st2 = "OneTwoThree"

st1.isalpha()
st2.isalpha()

isalpha는 문자로만 이뤄져 있는지 물어보는 함수이다.
st1은 숫자로 이뤄져 있기에 False가 출력되고, st2는 문자로 이뤄져있기에 True가 출력된다.

 

 

 

str = "Supersprint"
str.startswith("Super")
str.endwith("int")

startswith("a")는 문자열이 a로 시작되는지 물어보는 함수이고

endwith(a)는 문자열이 a로 끝나는지 물어보는 함수이다.


위의 함수에서는 둘 다 True가 반환된다.

 

 

 

def main():
   pnum = input("스마트폰 번호 입력: ")
   if pnum.isdigit() and pnum.startswith("010"):
      print("정상적인 입력입니다.")
      
   else:
      print("정상적이지 않은 입력입니다.")

main()

예시이다.

조건을 보면 isdigit()로 인해 숫자만 입력해야 하고, startswith로 인해 시작이 "010"이 되어야 한다.

또한 and 연산자가 있기에 둘 다 참이어야 if에 속한 문장이 실행이 된다.

 

만약 010-0000-0000이 들어가면 '-'로 인해 isdigit() 함수가 False를 반환할 것이고

0000 0000 이런 식으로 입력하면 startswith("010") 함수로 인해 False가 반환될 것이다.

01000000000으로 입력하면 둘 다 True를 반환해서 "정상적인 입력입니다."라고 출력될 것이다. 

 

 

 

s = "Tomato spaghetti"

if s.find("ghe") != -1:
    print("있습니다.")
else:
    print("없습니다.")

s의 문자열에서 "ghe"라는 문자를 찾는 코드이다. 
find함수가 -1을 반환한다는 건 찾고자 하는 값이 없다는 뜻이다. 즉 -1이 아니면 찾는 조건이 있다는 소리이다.

그런데 파이썬에서는 in이라는 연산자를 활용해서 찾고자 하는 값을 찾을 수 있다.

다음 코드는 위의 코드와 같은 결과를 나타내는 코드이다.

s = "Tomato spaghetti"

if "ghe" in s:
    print("있습니다.")
else:
    print("없습니다.")

A in B:라고 한다면 B라는 문자열 안에 A라는 문자가 있느냐를 확인한다.

 

"ghe"라는 문자가 s 문자열 안에 있는 지를 확인하여 있다면 참의 값을 반환하여 if의 속한 값을 실행시킨다.

 

in 연산자도 and, or, not처럼 True 또는 False를 반환한다

 

 

 

 

3 not in [1,2,3]   #False를 반환  3이 리스트 안에 있기에 not in은 false를 반환.
4 not in [1,2,3]   #True를 반환 4가 리스트 안에 없기에 not in은 True를 반환.
"he" not in "hello"  #False를 반환
"oo" not in "hello"  #True를 반환

not in 연산자라는 것도 있다.


in연산자가 True를 반환하는 상황에서 not in 연산자는 False를 반환한다.
in연산자가 False를 반환하는 상황에서 not in 연산자는 True를 반환한다.

 

 

 

num = 1
if num: 
    print("0 아닙니다.")

if의 조건 같이 True 또는 False가 와야 하는 자리에 숫자가 온다면?
0이 오는 경우 False로 간주하고, 0이 아닌 수가 오면 True로 간주한다.

 

 

 

num = 1
if num != 0:
    print("num은 0 아닙니다.")

num이 0이 아니면 출력한다는 뜻이다
근데 num이 1이기에 굳이!=0을 쓰지 않고 num만 써도 True로 인식된다. 그래서 아래처럼 써도 된다.

num = 1
if num:
    print("num은 0 아닙니다.")

 

 

 

bool(5)   #True로 인식
bool("What")  #True로 인식
bool("")    #False로 인식
bool([1,2,3])   #True로 인식
bool([])   #False로 인식

True False가 와야 하는 위치에 문자열이 오면 어떻게 해석이 될까?
bool 함수 안에 값을 넣으면 True인지 False인지 알려준다.