if문에 대한 설명은 생략하고, if문의 구조를 바로 살펴보기로 하자.
if 조건문:
수행할_문장1
수행할_문장2
...
else:
수행할_문장A
수행할_문장B
...
파이썬의 if문이 다른 언어의 if문과 다른 점은 들여쓰기에 매우 민감하다는 것이다. C/C++이나 Java는 if의 실행문이 중괄호 안에 감싸져있기 때문에 들여쓰기를 지키지 않아도 전혀 문제가 없지만, 파이썬은 오직 들여쓰기로만 if의 실행문을 인식한다. 또한 들여쓰기의 깊이도 같아야 한다. 덜 들여쓰거나 더 들여쓰는 것 모두 indentation(들여쓰기) error를 발생시킨다. 들여쓰기의 깊이는 공백 문자 4개를 일반적인 경우로 본다. VS Code와 같은 파이썬 에디터를 사용할 경우, Tab이 공백 문자 4개로 자동 변환되기 때문에 Tab키를 사용하면 된다.
money = True
if money:
print("택시를")
print("타고")
print("가라")
① 비교연산자
② 논리연산자
>>> money = 2000
>>> card = True
>>> if money >= 3000 or card:
... print("택시를 타고 가라")
... else:
... print("걸어가라")
③ 포함 연산
>>> 1 in [1, 2, 3]
True
>>> 'a' in ('a', 'b', 'c')
True
>>> 'j' not in 'python'
True
C/C++과 Java의 else if와 동일하다.
>>> pocket = ['paper', 'cellphone']
>>> card = True
>>> if 'money' in pocket:
... print("택시를 타고가라")
... elif card:
... print("택시를 타고가라")
... else:
... print("걸어가라")
...
택시를 타고가라
※ if문을 한 줄로 작성하기
C/C++과 Java 모두 if의 실행문이 한 줄이면, 중괄호를 생략할 수 있다. 파이썬에서도 이와 비슷한 기능이 있는데, if의 실행문이 한 줄일 경우, 콜론 뒤에 바로 적을 수 있다.>> pocket = ['paper', 'money', 'cellphone'] >> if 'money' in pocket: pass ... else: print("카드를 꺼내라")
C/C++, Java에서 사용하던 삼항 연산자와 비슷한 개념이다. 삼항 연산자는 조건문보다 코드는 간결해지지만, 오히려 가독성이 낮아지는 이유 때문에 자주 사용되지 않았다. 하지만, 파이썬의 조건부 표현식은 코드를 간결하게 해줌과 동시에 가독성도 높은 편이다.
message = "success" if score >= 60 else "failure"
참고로 위의 식을 C++의 삼항 연산자로 나타내면, string message = (score >= 60) ? "success" : "failure"; 와 같이 될 것이다.
while문도 바로 구조를 살펴보기로 하자.
while 조건문:
수행할_문장1
수행할_문장2
수행할_문장3
...
① while 루프 빠져나오기
>>> coffee = 10
>>> money = 300
>>> while money:
... print("돈을 받았으니 커피를 줍니다.")
... coffee = coffee -1
... print("남은 커피의 양은 %d개입니다." % coffee)
... if coffee == 0:
... print("커피가 다 떨어졌습니다. 판매를 중지합니다.")
... break
② while 루프의 맨 처음으로 돌아가기
>>> a = 0
>>> while a < 10:
... a = a + 1
... if a % 2 == 0: continue
... print(a)
...
1
3
5
7
9
for문은 우리가 C/C++, Java에서 사용하던 방식과 조금은 다르지만, 역시 매우 직관적이기 때문에 어렵지는 않다. 먼저 for문의 기본 구조는 아래와 같다.
for 변수 in 리스트(또는 튜플, 문자열):
수행할_문장1
수행할_문장2
...
>>> test_list = ['one', 'two', 'three']
>>> for i in test_list:
... print(i)
...
one
two
three
튜플 패킹을 for문의 변수로 사용할 수도 있다. 참고로, 아래와 같이 튜플의 값을 각각 first와 last에 할당하는 것을 튜플 언패킹이라 한다.
>>> a = [(1,2), (3,4), (5,6)]
>>> for (first, last) in a:
... print(first + last)
...
3
7
11
C/C++, Java의 for-each 구문을 의미한다. 응용 for문은 일반 for문으로 대체할 수 있기 때문에 그 중요성을 모르는 사람이 많은데, 오히려 숙련이 되면 일반 for문보다 응용 for문을 더 많이 사용할 정도로 매우 유용하고 중요한 구문이다.
marks = [90, 25, 67, 45, 80] # 학생들의 시험 점수 리스트
number = 0 # 학생에게 붙여 줄 번호
for mark in marks: # 90, 25, 67, 45, 80을 순서대로 mark에 대입
number = number +1
if mark >= 60:
print("%d번 학생은 합격입니다." % number)
else:
print("%d번 학생은 불합격입니다." % number)
1번 학생은 합격입니다.
2번 학생은 불합격입니다.
3번 학생은 합격입니다.
4번 학생은 불합격입니다.
5번 학생은 합격입니다.
while문과 동일하게 continue, break 키워드를 사용할 수 있다.
marks = [90, 25, 67, 45, 80]
number = 0
for mark in marks:
number = number +1
if mark < 60:
continue
print("%d번 학생 축하합니다. 합격입니다. " % number)
for문은 숫자 리스트를 자동으로 만들어주는 range 함수와 함께 사용되는 경우가 많다. 아래의 range 함수는 0부터 10 미만의 숫자를 포함하는 range 객체를 만들어 준다.
>>> a = range(10)
>>> a
range(0, 10)
① 1부터 10까지의 덧셈
>>> add = 0
>>> for i in range(1, 11):
... add = add + i
...
>>> print(add)
55
② 구구단
>>> for i in range(2,10): # 1번 for문
... for j in range(1, 10): # 2번 for문
... print(i*j, end=" ")
... print('')
...
2 4 6 8 10 12 14 16 18
3 6 9 12 15 18 21 24 27
4 8 12 16 20 24 28 32 36
5 10 15 20 25 30 35 40 45
6 12 18 24 30 36 42 48 54
7 14 21 28 35 42 49 56 63
8 16 24 32 40 48 56 64 72
9 18 27 36 45 54 63 72 81
리스트 컴프리헨션이란, 파이썬에서 리스트를 간단하게 생성하는 방법 중 하나로, 반복문과 조건문을 사용하여 새로운 리스트를 생성하는 문법이다. 만약 아래와 같이 a 리스트의 각 요소에 3을 곱한 값으로 result 리스트를 채우는 상황을 가정해보자.
>>> a = [1,2,3,4]
>>> result = []
>>> for num in a:
... result.append(num*3)
...
>>> print(result)
[3, 6, 9, 12]
① 리스트 컴프리헨션
>>> a = [1,2,3,4]
>>> result = [num * 3 for num in a]
>>> print(result)
[3, 6, 9, 12]
② 조건문과 함께 사용
>>> a = [1,2,3,4]
>>> result = [num * 3 for num in a if num % 2 == 0]
>>> print(result)
[6, 12]
③ 이중 포문에서의 리스트 컴프리헨션
>>> result = [x*y for x in range(2,10)
... for y in range(1,10)]
>>> print(result)
[2, 4, 6, 8, 10, 12, 14, 16, 18, 3, 6, 9, 12, 15, 18, 21, 24, 27, 4, 8, 12, 16,
20, 24, 28, 32, 36, 5, 10, 15, 20, 25, 30, 35, 40, 45, 6, 12, 18, 24, 30, 36, 42
, 48, 54, 7, 14, 21, 28, 35, 42, 49, 56, 63, 8, 16, 24, 32, 40, 48, 56, 64, 72,
9, 18, 27, 36, 45, 54, 63, 72, 81]