본문 바로가기

About coding/Today I learned

2023년 03월 24일 TIL

새로 배운 작은 내용:

_if 문에서의 불리안 값 통과 관계

오늘 공부를 하다가 좀 특기 해놓아야 할 게 생겨서 펜을 집었다.

바로 이해했긴 한데, 시간이 지나면 헷갈릴 수 있을 만한 내용.

T = True
F = False

if T or F:
    print('pass')
else:
    print('block')
    

>>>>>>
DONG HYUN LEE@DESKTOP-AE57O4H MINGW64 ~/Desktop/study
$ "c:/Users/DONG HYUN LEE/Desktop/study/venv/Scripts/python.exe" "c:/Users/DONG HYUN LEE/Desktop/study/main.py"
pass
(venv)

이렇게 if문에서 추가로 and 나 or 을 쓸 수 있다.

여러개의 요소를 두고 둘 사이의 관계를 주어서 좀 더 복잡하게 조건을 만드는 것인데,

여기서 and는 이것도 저것도 둘 다 True 여야 if절에서 패스시켜주고,

or은 왼쪽이나 오른쪽 둘 중에 하나가 False여도 if절에서 패스시켜준다.

그리고 if 다음에 not을 붙여 if not 모양이 되면, 뒤에 오는 내용이 False일 때 패스시켜준다.

여기까지 이해하면 재밌는 게 하나 나오는데,

empty_string = ""
empty_list = []
zero_num = 0

if not empty_string:
    print("string is empty!!")

if not empty_list:
    print("list is empty!!")

if not zero_num:
    print("The entered number is Zero!!")
    
>>>> 결과는
DONG HYUN LEE@DESKTOP-AE57O4H MINGW64 ~/Desktop/study
$ "c:/Users/DONG HYUN LEE/Desktop/study/venv/Scripts/python.exe" "c:/Users/DONG HYUN LEE/Desktop/study/main.py"
string is empty!!
list is empty!!
The entered number is Zero!!

짠. 통과하면 안 될 것 같은 아이들이 통과된다. 고개를 갸웃하게 되는데 그 이유는,

위에 쓰여진 코드 중 if not empty_string: 부분을 인간의 말로 해석했을 때, 말의 앞 뒤가 안 맞기 때문이다.

왜냐면 인간의 말로 해석 시, '만약 문자열이 공백이 아니라면, 문자열이 비어있어!! 라고 프린트 하라'

라고 쓰여있다. 문자열이 공백일 때 '문자열이 비어있다'고 경고해야지 공백이 아닐 때 경고하라니 이상하게 느껴지는 것이다.

 

그러나 컴퓨터의 입장에서 사실을 보면 작동원리를 이해할 수 있다.

if 문 뒤에 not이 왔으니 이것은 위에서 배운 if not 모양. 이제 뒤에 오는 내용이 False일 때 이 단계가 통과 된다.

그러므로 값 자체가 False 의 boolean값을 가진 특수케이스들(빈 문자열, 빈 리스트, 숫자 영)이 그 자리에 오면

if 문이 주어진 조건을 통과를 시켜주게 되는 것이다!

그러므로 프린트가 찍히게 되고, 결과는 알림 알림 알림

나중에 클라이언트가 무언가 기입하는 란을 구현할 때, 서식대로 바르게 기입하도록 유도하려면 꼭 필요한 기술이되겠다.

옛날에 케냐에서 설문조사할 때는 이런 컴퓨터 기술을 몰라서 맨날천날 설문지 종이 프린트하고, 현장 가서 돌리고, 찢어지고, 무겁게 수거하고, 밤새도록 기입하고 고생이 이만저만이 아니었는데, 아직 많이 부족하긴 하지만 html 간단하게 만들어서 SQL로 데이터 쌓고, 학부모님들한테 링크 찍어 돌리면 얼마나 편해질까. 물론 핸드폰들이 다들 아직 2G폰이여서 웹사이트 조회가 안되는 분들도 많겠지만, 직원 스탭들에게 모바일 디바이스를 줘서 현장에 종이 대신 탭을 들고 나간다면 훨씬 간편할 것이다.

 

 

_문자열 거꾸로 출력하기

print(a[::-1])

 

 

_파이썬 함수에서 인자 여러 개 받기

def add(*args):
    result = 0
    for i in args:
        result += i

    return result


numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(add(*numbers))

*args 라는 애를 괄호안에 써 준다.

그리고 넣을 리스트도 함수를 부를 때 대괄호를 풀어서 넣어준다. 어떻게? 앞에 *을 써서.

print(add(*numbers))

 

그리고 꼭 예시처럼 리스트가 아니더라도, add 함수의 인자 자리에, 인자를 한 개든, 두 개든, 세 개든, 리스트든

갯수에 불편 없이 넣고 싶은 만큼 넣으면 된다.

 

print(add(1))

print(add(1, 2))

print(add(*list))

 

단! 딕셔너리를 넣을 때는 좀 다르다. 이때는 별을 2개씩 붙여야 한다. 그리고 인자 이름도 args가 아니라 kwargs 라고 씀.

def sample(**kwargs):
	print(kwargs)
    
sample_dict = {
	"key":"value",
	"key2":"value2",
	"key3":"value3"
}

sample(**sample_dict)

 

 

'About coding > Today I learned' 카테고리의 다른 글

2023년 03월 28일 TIL  (0) 2023.03.28
2023년 03월 27일 TIL  (0) 2023.03.27
2023년 03월 23일 TIL  (2) 2023.03.23
2023년 03월 22일 TIL  (0) 2023.03.22
2023년 03월 20일 TIL  (0) 2023.03.20