티스토리 뷰
부울값 이외의 값
if 문에서는 조건식에 부울값(비교 연산자나 부울 연산자 등)을 지정해서 처리의 흐름을 제어할 수 있다. 조건식에는 비교 연산자뿐만 아니라 값을 직접 지정할 수도 있다. 파이썬에서는 조건식 위치에 값이 기술되면, 그 값에 따라 조건의 성립 여부를 결정하는 규칙이 정해져 있다. 규칙은 다음과 같다.
조건식이 성립하지 않는다 | 조건식이 성립한다 | |
수치 | 0 | 0이 아닐 때 |
문자열 | 빈 문자열 "나 "" | 왼쪽 항의 조건 이외일 때 |
리스트 | 빈 리스트 [ ] | 왼쪽 항의 조건 이외일 때 |
튜플 | 빈 튜플 ( ) | 왼쪽 항의 조건 이외일 |
a = 3
if a:
print("a is not zero")
else:
print("a is zero")
#a is not zero
a = 0
if a:
print("a is not zero")
else:
print("a is zero")
#a is zero
변수 a에 3이 저장돼 있으면 첫 print 문이 출력된다. 즉, 조건식의 위치에 기술한 "a"는 True로 해석되는 것을 알 수 있다. 한편, 변수 a에 0을 저장하면 else 다음의 print 문이 출력된다. 0은 False로 해석되는 것이다.
bool() 함수를 사용하면 True와 False 둘 중 어떤 것으로 해석되는지 쉽게 알아볼 수 있다.
>>> bool(0.0)
False
>>> bool(3.14)
True
>>> bool({})
False
>>> bool({1,2,3})
True
>>> bool("hello")
True
>>> bool("")
False
삼항 연산자
if else를 사용하면 조건식에 따라 처리를 바꿀 수 있다. 조건에 따라서 대입하는 값을 선택하려면 다음과 같이 기술한다.
if a > 0:
x = 10
else:
x = 20
a가 0보다 클 때는 x에 10을 대입하고 그렇지 않으면 20을 대입한다. 양자 택일이다.
이러한 간단한 if else는 더욱 쉽게 기술하는 방법이 준비돼 있다.
x = 10 if a > 10 else 20
얼핏보면 "알기 어려운데..."라고 느낄지도 모른다. 이것은 파이썬을 만든 사람이 영어권의 사람이기 때뭉닐지도 모른다. 영어권에서는 결론을 먼저 말하는 게 일반적이다. 이번에는 x에 10을 대입함을 전제로 그 조건(a > 0)을 보충한다. 마지막으로 조건이 성립하지 않으면 부사적으로 추가한다.
C등 다른 언어에서는 이렇게 기술해서 좀 더 헷갈리는 듯 하다.
x = (a>0) ? 10 : 20
while
while 문은 반복(루프) 처리를 하기 위한 명령이다.
while 조건식:
명령1
명령2
명령3
조건식이 True인 동안, 정해진 블록(위의 예에서는 명령1과 명령2)을 반복 실행한다. 조건식이 False가 되면 루프를 빠져나와 다음 명령(위의 예에서는 명령3)으로 간다.
>>> counter = 0
>>> while counter < 3:
print(counter)
counter += 1
#0
#1
#2
이 예에서는 먼저 변수 counter를 0으로 초기화한다. counter가 3보다 작은 동안, while 문의 블록이 실행된다. 이 예에서는 counter 값을 print로 출력하고, counter 값이 1 증가한다. 즉, 루프가 1회 실행될 때마다 counter가 1 증가한다. counter 값이 3이 되면 조건식이 Flase가 되므로 루프 실행이 끝난다. 각 교과의 평균점수를 구하는 예를 while 문으로 다시 작성한다.
>>> total = 0
>>> index = 0
subject = (78, 95, 68, 62)
while index < len(subject):
total += subject[index]
index += 1
>>> average = total / len(subject)
>>> average
#75.75
len()은 리스트나 튜플의 요소 수를 반환하는 함수다. 위의 예에서는 요소가 4개이므로 len(subject)은 4이다. index가 4보다 작은 동안 while 문이 실행된다. subject[index]에서 순서대로 점수를 꺼내 total에 추가한다. 또, index를 1씩 증가하고 있다. while 문을 빠져나간 후에 합계 점수인 total을 요소 수로 나눠 평균점수를 구한다.
만약 다음처럼 잘못 썻다고 하자. 어떻게 될까?
>>> while index < len(subject):
total += subject[index]
total += 1
index 값은 0인 채 바뀌지 않는다. 즉, while 문은 무한 반복하게 되고, 중단하려면 파이썬 쉘을 종료할 수 밖에 없다.