파이썬의 제어문
업데이트:
1.제어문이 필요한 이유?
저희의 일상은 선택의 연속이라고 볼 수 있습니다.
“오늘 출근은 버스를 탈까 지하철을 탈까?”, “오늘 점심은 국밥을 먹을까 라면을 먹을까?”
프로그래밍에서도 선택을 해야 하는 순간이 있습니다.
프로그래밍은 이와 같은 상황을 제어문을 이용하여 선택합니다.
제어문에는 if
문, for
문, while
문이 있습니다.
2. if문
2.1 if문의 구조
if 조건문(login == true):
수행문
수행문
...
else:
수행문
수행문
...
>>> login = True
>>> if login:
... print("유저 정보창 띄워")
... else:
... print("로그인창 띄워")
...
유저 정보창 띄워
이와 같이 프로그래밍에선 조건 제어문을 이용 판단하여 해당하는 연산을 수행하는데 쓰는 것이 if
문 입니다.
조건문이 True(참)라면 if문의 수행문이 실행되고, False(거짓)이라면 else문의 수행문이 실행됩니다.
주의사항
- 조건문 안에 수행문의 들여쓰기 폭은 같아야 합니다! 다를 경우 에러를 출력합니다.
2.2 조건문의 비교연산자
비교 연산자 | |
---|---|
x<y |
x가 y보다 작다. |
x>y |
x가 y보다 크다. |
x==y |
x와 y가 같다 |
x!=y |
x와 y는 다르다 |
x<=y |
x가 y보다 작거나 같다. |
x>=y |
x가 y보다 크거나 같다. |
2.3 조건문의 논리연산자
논리 연산자 | |
---|---|
x or y |
x 또는 y 둘중에 하나만 참이면 참 |
x and y |
x 또는 y 두개 모두가 참이면 참 |
not x |
x가 참이면 거짓이다 |
사용 예시 ( 비교연산자와 논리연산자 사용 )
>>> if login and passStr=="1234":
... print("로그인 성공")
... else:
... print("로그인 실패")
...
로그인 성공
>>> if login and passStr=="12345":
... print("로그인 성공")
... else:
... print("로그인 실패")
...
로그인 실패
2.4 x in y, x not in y 조건문
파이썬에서 지원하는 조금은 독특한 조건문
in | |
---|---|
x in 리스트 | x not in 리스트 |
x in 튜플` | x not in 튜플 |
x in 문자열 | x not in 문자열 |
- x값이 {리스트,튜플,문자열} 안에 들어 있는가?
- x값이 {리스트,튜플,문자열} 안에 들어있지 않는가?
2.5 elif문
if
와 else
만으로는 해결하지 못하는 상황이 발생할 수도 있습니다. 이럴때 elif
문을 사용하여 해결하면 됩니다.
“국물이 있다면 밥을 먹고, 국물은 없지만 라면이 있다면 라면을 먹고, 국물과 라면도 없으면 굶어라”
>>> food = ["rise", "soup", "ramen"]
>>> if 'rise' in food:
... print('밥을 먹어라')
... elif 'ramen' in food:
... print('라면을 먹어라')
... else:
... print('굶어라')
...
밥을 먹어라
>>> food = ["soup", "ramen"]
>>> if 'rise' in food:
... print('밥을 먹어라')
... else:
... if 'ramen' in food:
... print('라면을 먹어라')
... else:
... print('굶어라')
...
라면을 먹어라
elif
를 사용하지 않고 [다중 if
]문을 사용해서 해결이 가능하지만 코드의 가독성 향상과 코드의 흐름이 자연스럽도록 하는게 중요합니다.
2.6 조건부 표현식
파이썬에선 삼항연산자와 비슷한 표현식을 제공합니다. javascript의 삼항연산자의 사용법은 아래와 같습니다.
grade = score > 90 ? 'A' : 'B';
조건부 표현식의 사용법
>>> if score > 90 :
... grade = "A"
... else :
... grade = "B"
위와 같은 조건식을 조건부 표현식으로 사용하려면 아래와 같이 사용하면 됩니다.
>>> grade = "A" if score > 90 else "B"
3. 반복문(while,for) 문을 사용하는 이유
반복문을 사용하는 이유는 예를 들어 list=[1,2,3,4,5]
리스트를 화면에 출력해야 한다고 하면 print(list[0],list[1]...list[4])
와 같이 출력을 합니다.
하지만 list=[1,2,3...1000]
와 같이 1000개의 데이터를 출력해야 한다고 했을때 print(list[0],list[1]...list[1000])
같이 1000번을 사용했을 경우… 코드 가독성의 문제와 비효율성의 문제가 발생합니다. 😂
이러한 문제를 반복문 제어를 통해 해결할 수 있습니다!
4. while문
4.1 while문의 구조
while <조건문>:
<수행 문장>
<수행 문장>
<수행 문장>
...
while문은 조건문이 False(거짓)
이 될때까지 반복하며 True(참)
일땐 계속해서 순회하며 반복합니다.
만약 조건문의 값을 True
or 1 로 준다면 무한 반복문이 됩니다.
>>> num = 0
>>> while num < 5:
... num+=1
... print("%d - 번" % num)
... if(num == 5):
... print('반복종료')
...
1 - 번
2 - 번
3 - 번
4 - 번
5 - 번
반복종료
4.2 while문 빠져나가기 break
우리가 아는 게임 프로그램은 무한으로 도는 루프안에서 동작하게 됩니다.
하지만 무한루프에서 빠져나올 때도 있습니다. 그건 게임종료 버튼을 눌렀을 때 비로소 무한루프에서 탈출하게 됩니다.
while문의 조건문이 거짓이 되지 않거나, 무한루프 일때 빠져나오는 방법은 break
키워드를 사용하는 것 입니다.
>>> play = 0
>>> while True:
... play = input('1. 게임 계속 2.게임 종료 : ')
... if int(play) == 2:
... print('게임 종료')
... break
... print("게임 플레이중")
...
1. 게임 계속 2.게임 종료 : 1
게임 플레이중
1. 게임 계속 2.게임 종료 : 1
게임 플레이중
1. 게임 계속 2.게임 종료 : 2
게임 종료
위와 같이 조건문에 break
키워드를 사용하여 가장 근접한 반복문을 빠져나갈 수 있습니다.
if int(play) == 2:
앞에 int를 해준 이유는 문자열 “2” 과 정수 2 는 다르기 때문에 형을 맞춰야 합니다.
4.3 while문 처음으로 이동 continue
continue
문은 가장 근접한 while문의 첫번째로 이동하는 키워드입니다.
>>> play = 0
>>> while True:
... play = input('1. 게임 계속 2.게임 종료 : ')
... if int(play) == 2:
... print('게임 종료')
... break
... print("게임 플레이중")
... continue
... print("여기 아래로는 실행이 안됩니다!!!")
... print("여기 아래로는 실행이 안됩니다!!!")
...
1. 게임 계속 2.게임 종료 : 1
게임 플레이중
1. 게임 계속 2.게임 종료 : 1
게임 플레이중
1. 게임 계속 2.게임 종료 : 2
게임 종료
continue
문이 실행되면 while문에서 수행해야하는 문장 전체를 실행하지 않고 continue
키워드 까지의 문장만 실행하고 그 밑 부분들은 무시하고 다시 while문의 첫 번째로 이동하여 해당 문장을 수행하게 됩니다.
5. for문
while문과 비슷한 반복문이지만 for문은 조금더 직관적인 특징을 가지고 있습니다.
5.1 for문의 구조
range() 함수 이용시
for i in range(start,end,interval):
>>> for i in range(0,10,2):
... print(i)
...
0
2
4
6
8
>>> for i in range(0,3):
... print(i)
...
0
1
2
list, tuple, 문자열 이용시
for i in list(tuple,문자열):
>>> list1 = [1,2,3,4]
>>> for n in list1:
... print(n)
...
1
2
3
4
>>> list2 = ["Hello","World"]
>>> for n in list2:
... print(n)
...
Hello
World
>>>
5.2 다양한 for문 사용 예
for문과 range(), if조건문 사용
>>> score = [90, 60, 78, 86, 96]
>>> for i in range(0, 5):
... if score[i] > 95:
... print("%d 번 학생의 점수는 A+" % i)
... elif score[i] > 85:
... print("%d 번 학생의 점수는 A" % i)
... elif score[i] > 75:
... print("%d 번 학생의 점수는 B+" % i)
... else:
... print("%d 번 학생의 점수는 B" % i)
...
0 번 학생의 점수는 A
1 번 학생의 점수는 B
2 번 학생의 점수는 B+
3 번 학생의 점수는 A
4 번 학생의 점수는 A+
>>>
5.3 for문 continue
for문도 while문과 마찬가지로 continue
문을 사용할 수 있습니다.
>>> for i in range(0, 5):
... if i == 3:
... print("continue!")
... continue
... print(i)
...
0
1
2
continue!
4
5.4 for문 리스트를 내포하여 사용하기
리스트 안에 for문을 포함하여 사용하는 리스트 내포를 사용하면 조금 더 편하고 직관적인 코딩을 짤 수 있습니다.
일반적으로 리스트 내포를 사용하지 않았을 때
>>> num = [1, 2, 3, 4]
>>> result = []
>>> for n in num:
... result.append(n % 2)
...
>>> result
[1, 0, 1, 0]
리스트 내포를 사용했을때
> > > num = [1,2,3,4]
> > > result = [n % 2 for n in num]
> > > result
> > > [1, 0, 1, 0]
코드가 조금 더 직관적이고 간결해진 것을 볼 수 있습니다.
6. for문과 while문의 차이 (개인적인 생각)
저같은 경우 프로그래밍을 처음 배울 때 “그럼 같은 반복문인데 굳이 나눌 필요가 있을까??”,”그냥 하나만 사용해야지” 라고 생각했었습니다.
어떨 때 for
, while
문을 구분해서 사용해야 할까요??
저도 의구심에 구글링을 해서 여러가지 차이점을 찾아본 결과 “코딩하는데 반복문이 필요한 상황에 for
문이 편하면 for
문을 쓰고, while
문이 편하면 while
문을 쓴다는게 결론이었습니다.
근데 어느 순간 코딩할 때 for
,while
반복문을 저도 모르게 상황에 따라 사용하고 있었습니다…
개인적인 생각으로 조금 더 자세히 차이점을 설명해보자면
while
: 조건이 참인 동안에 반복for
: 순서열에 처음부터 끝까지 반복
댓글남기기