제어문은 크게 if 문, while 문, for 문 3가지가 있다.
다른 프로그램이 언어와 다르지 않다.
문법은 오히려 다른 언어들부터 더 간단하다는 느낌이였다.
(괄호를 안 쓴다던지, 실행문도 괄호로 안 감싸고 그냥 들여쓰기로 나타내던지)
money = True
if money:
print("택시를 타고 가라")
else:
print("걸어간다")
money = 2000
card = True
if not money >= 3000:
print("택시타")
else:
print("걸어가")
if 문의 사용은 간단하다.
if (조건) :
(실행문)
else :
(실행문)
조건의 참 거짓 유무에 따라 어떤 실행문을 실행할 지 결정한다.
첫번쨰 예시의 경우 money가 True이므로 "택시를 타고 가라"가 출력될 것이고
두번째 예시의 경우 money가 3000보다 작으므로 걸어가라는 결론이 나올 것이다.
저번에 살펴봤던 불 자료형이 이 조건문에서 쓰인다.
비교 연산자를 통한 참, 거짓 뿐만 아니라 빈 리스트, 문자열 등의 확인도 가능하다.
조건문을 쓸 때 주의해야하는 것은 바로 '들여쓰기'이다.
money = True
if money:
print('택시를')
print('타고')
print('가라')
이런 식으로 들여쓰기가 들쭉날쭉으로 되면 unexpected indent 라는 에러를 출력하면서 실행되지 않는다.
들여쓰기와 더불어 항상 콜론(:)을 쓰는 것도 절대 까먹지 말자.
if 뿐만 아니라 while, for, def, class도 콜론(:)이 들어가므로 실수하지 않도록 유의하자.
조건을 판단하기 위한 연산자로는 비교 연산자 뿐만 아니라 and, or, not이 있다.
x or y | x와 y 둘 중 하나만 참이어도 참이다. |
x and y | x와 y 모두 참이어야 참이다. |
not x | x가 거짓이면 참이다. |
money = 2000
card = True
if money>=3000 or card:
print('택시를 타고 가라')
else:
print('걸어가라')
// 택시를 타고 가라
둘 다 참이기에 조건문은 참을 반환하고 if의 실행문을 실행한다. or 대신 and가 와도 참이다.
여기까지는 그래도 다른 언어들과 거의 똑같다.
근데 이번에 살펴볼 연산자는 다른 언어들에서는 보기 어려운 재미있는 조건문이다.
바로 in 과 not in이다.
1 in [1,2,3]
// True
1 not in [1,2,3]
// False
리스트, 튜플, 문자열에서 어떤 원소나 문자가 있는지 없는지 확인하는 조건문이다.
다른 언어에서는 내장함수로 하는 경우가 많은데 파이썬은 이렇게 in, not in 연산자를 활용하여 편리하게 포함 여부를 확인할 수 있었다.
가끔은 조건문의 참, 거짓에 따라 아무 행동도 하지 않게 설정할 필요가 있다. 이 때는 pass를 활용하면 된다.
pocket = ['money', 'paper','cellphone']
if 'money' in pocket:
pass
else:
print('카드를 꺼내라')
이렇게 pass를 하게 되면 아무런 결과값도 보여주지 않고 if 문을 빠져나오게 된다.
if else만 사용하기에는 조건이 복잡한 경우가 실제로 훨씬 많다.
이를 위해 elif를 활용한다.
pocket = ['paper','cellphone']
card = True
if 'money' in pocket:
print('택시를 타고 가라')
elif card:
print('택시를 타고 가라')
else:
print('걸어가라')
if의 첫 조건문을 확인하고 false라면 뒤에 elif로 이동하여 조건을 또 확인한다. 그리고 나서 거짓이라면 else에 있는 실행문을 실행한다.
위에 있는 조건문들을 활용해서 조건부 표현식을 쓸 수 있다.
message = 'success' if score >= 60 else 'failure'
message라는 변수에 score가 60 이상이면 success 아니라면 failure 값을 대입해주는 식이다.
조건에 따른 변수 값 할당을 한 줄로 작성할 수 있어 매우 유용하다.
다음 살펴볼 제어문은 while문이다.
while문은 문장을 반복해서 수행해야할 경우 사용한다.
기본 구조는
while 조건문:
수행할_문장
.
.
.
열 번 찍어 안 넘어가는 나무 없다는 속담을 파이썬으로 나타내면 이렇게 나타낼 수 있다.
treeHit = 0
while treeHit < 10:
treeHit += 1
print("나무를 {}번 찍었습니다".format(treeHit))
if treeHit == 10:
print("나무 넘어갑니다.")
나무를 10번 미만으로 찍었다면 계속해서 찍는 반복문이다.
만약 반복문을 중간에 강제로 빠져나가고 싶다면 어떻게 해야될까?
이 때는 break를 사용하면 된다.
coffee = 10
money = 300
while money:
print("돈을 받았으니 커피를 줍니다.")
coffee -= 1
print("남은 커피의 양은 {}입니다.".format(coffee))
if coffee == 0:
print("커피가 다 떨어졌습니다. 판매를 중지합니다.")
break
자판기에서 팔 수 있는 커피가 10잔 밖에 없다는 상황이 있을 때 자판기 동작에 대한 파이썬 코드이다.
money 값은 300으로 고정이므로 while문에서 조건은 항상 참이다.
하지만 커피가 다 떨어지면 돈을 넣어도 커피를 뽑을 수가 없다. 그러므로 조건문이 참임에도 불구하고 break을 통해서 자판기의 동작을 중지시켜야한다.
이번에는 while문을 수행할 때 while문을 빠져나가지 않고 다시 조건문으로 돌아가게 만들어보자.
이때는 continue를 사용하면 된다.
a = 0
while a < 10:
a += 1
if a % 2 == 0:
continue
print(a)
10이하의 자연수 중에서 홀수만 출력하는 코드이다.
a를 1씩 증가하면서 while문을 수행하는데 짝수라면 print를 하기 전에 continue를 수행하여 다시 a<10 조건으로 돌아간다.
다음 살펴볼 제어문은 for 문이다.
while문과 비슷하게 반복문인 for 문은 구조가 한 눈에 파악하기 더 쉬워서 사용빈도가 while보다 더 높을 것이다.
for 변수 in 리스트(또는 튜플, 문자열):
수행할 문장
.
.
.
for과 in을 활용하는 것이 기본적인 구조이다.
test_list = ["one", "two", "three"]
for i in test_list:
print(i)
a = [(1, 2), (3, 4), (5, 6)]
for first, second in a:
print(first * second)
이런 식으로 활용이 가능하다.
for문에서도 while과 동일하게 continue을 사용할 수 있다.
marks = [90, 25, 67, 45, 80]
number = 0
for i in marks:
number += 1
if i < 60:
continue
print("{}번 학생은 합격입니다. 축하드립니다.".format(number))
이렇게 되면 i<60일때는 조건문으로 다시 돌아가서 print문은 실행되지 않는다.
for 문왁 함께 자주 사용되는 함수가 있다.
바로 range함수이다.
add = 0
for i in range(1, 101):
add += i
print(add)
range 함수를 활용해서 1부터 100까지의 합을 구하는 코드이다.
range(1,101)이면 1부터 100까지, 즉 두번째 수는 포함하지 않는 정수 범위를 말한다.
for i in range(2, 10):
for j in range(1, 10):
print(i * j, end=" ")
print(" ")
이건 for 문과 range를 활용한 구구단 코드이다.
for문을 중첩해서 사용할 수 있다.
리스트 안에 for 문을 포함하는 리스트 컴프리헨션을 사용하면 좀 더 편리하고 직관적으로 코드를 짤 수 있다.
a = [1, 2, 3, 4]
result = [num * 3 for num in a if num % 2 == 0]
조금 복잡한 예시이긴 하나 for + if로 리스트 컴프리헨션을 활용한 것이다.
1. a 리스트에 대해서 반복문을 도는데
2. 짝수인 num에 대해서만
3. 3을 곱해준 리스트이다.
따라서 결과로는 [6,12]가 출력된다.
result = [x * y for x in range(2, 10) for y in range(1, 10)]
구구단의 결과를 담은 리스트를 한 줄로 표현한 것이다.
1. range(2,10)에 있는 x에 대해서 반복문을 도는데
2. 각 x에 대해서 range(1,10)에 있는 y를
3. 곱해준 값이 들어있는 리스트이다.
[2,4,......72,81]까지 구구단의 모든 결과가 들어있는 리스트가 출력되게 된다.
'Python' 카테고리의 다른 글
Python 스터디 5장 - 파이썬 날개 달기 (1) (0) | 2023.06.30 |
---|---|
Python 스터디 4장 - 파이썬의 입출력 (0) | 2023.06.27 |
Python 스터디 2장 - 파이썬 프로그래밍의 기초, 자료형 (2) (0) | 2023.06.25 |
Python 스터디 2장 - 파이썬 프로그래밍의 기초, 자료형 (1) (0) | 2023.06.25 |
Python 스터디 1장 - 파이썬이란 무엇인가? (0) | 2023.06.21 |