python 제어문

Ohyuchan·2023년 7월 12일
0
post-thumbnail

🧐 Python 제어문 : 조건문과 반복문


📶 **제어문이란?**

프로그램의 흐름을 제어하고 조작하는 데 사용되는 구문입니다. 
프로그램밍에서 제어문은 다양한 상황에 따라 다른 동작을 수행하거나 반복 작업을 수행할 수 있도록 도와줍니다.

👉 조건문(Conditional Statements)


📶 조건문은 주어진 조건을 평가하고, 조건의 결과에 따라 프로그램의 실행 경로를 변경합니다. 주로 `if` , `else` , `elif` 와 같은 키워드를 사용하여 구현됩니다. 

또한 **조건문**은 사용자 입력을 처리하거나 프로그램의 로직을 분기할 때 유용합니다. 예를 들어, 로그인 여부를 확인하거나 특정 조건에 따라 다른 작업을 수행할 때 사용됩니다.

조건문은 특정 조건이 참(True) 또는 거짓(False)인 경우에 특정 동작을 수행하도록 합니다.
age = 25

if age < 18:
    print("미성년자입니다.")
elif age >= 18 and age < 65:
    print("성인입니다.")
else:
    print("노인입니다.")

🤔 if 문은 왜 필요할까?


다음 아래와 같은 상황이 일어났다고 해 보면?

'돈이 있으면 택시를 타고 가고, 돈이 없으면 걸어간다.'

이렇듯 프로그래밍에서 조건을 판단하여 해당 조건에 맞는 상황을 수행하는 데 쓰는 것이 바로 if문이다.

파이썬에서는 다음과 같이 표현할 수 있다.

money = True
if money:
...print("택시를 타고 가라")
else:
...print("걸어 가라")
...
택시를 타고 가라

money에 True를 대입했으므로 money는 참이다. 따라서 if 문 다음 문장이 수행되어 '택시를 타고 가라'가 출력된다.

✨ if문의 기본 구조


if 조건문:
    수행할_문장1
    수행할_문장2
    ...
else:
    수행할_문장A
    수행할_문장B
    ...

조건문을 테스트해서 참이면 if문 바로 다음 문장(if 블록)들을 수행하고 조건문이 거짓이면 else 문 다음 문장(else 블록)들을 수행하게 된다.

⇲ 비교 연산자


이번에는 조건문에 비교 연산자(<, > ==, ≠, ≥, ≤)를 사용하는 방법에 대해 작성하였다.

비교연산자설명
x < yx가 y보다 작다.
x > yx가 y보다 크다.
x == yx와 y가 같다.
x != yx와 y가 같지 않다.
x >= yx가 y보다 크거나 같다.
x <= yx가 y보다 작거나 같다.
>>> money = 2000
>>> if money >= 3000:
...     print("택시를 타고 가라")
... else:
...     print("걸어가라")
...
걸어가라
>>>

⇲ and, or, not


조건을 판단하기 위해 사용하는 다른 연산자로는 and, or, not이 있다.

각각의 연산자는 다음처럼 동작한다.

연산자설명
x or yx와 y 둘 중 하나만 참이어도 참이다.
x and yx와 y 모두 참이어야 참이다.
not xx가 거짓이면 참이다.

⇲ in, not in


파이썬은 다른 프로그래밍 언어에서 쉽게 볼 수 없는 재미있는 조건문도 제공한다.

innot in
x in 리스트x not in 리스트
x in 튜플x not in 튜플
x in 문자열x not in 문자열

영어 단어 in의 뜻이 ‘~안에’라는 것을 생각해 보면 다음 예가 쉽게 이해될 것이다.

>>> 1 in [1, 2, 3]
True
>>> 1 not in [1, 2, 3]
False

앞에서 첫 번째 예는 ‘[1, 2, 3]이라는 리스트 안에 1이 있는가?’라는 조건문이다.

1은 [1, 2, 3] 안에 있으므로 참이 되어 True를 리턴한다. 두 번째 예는 ‘[1, 2, 3] 리스트 안에 1이 없는가?’라는 조건문이다.

1은 [1, 2, 3] 안에 있으므로 거짓이 되어 False를 리턴한다.

⇲ 다양한 조건을 판단하는 elif


if와 else만으로는 다양한 조건을 판단하기 어렵다.

다음 예를 보더라도 if와 else만으로는 조건을 판단하는 데 어려움을 겪게 된다는 것을 알 수 있다.

주머니에 돈이 있으면 택시를 타고 가고, 주머니에 돈은 없지만 카드가 있으면 택시를 타고 가고, 돈도 없고 카드도 없으면 걸어가라.

위 문장을 보면 조건을 판단하는 부분이 두 군데 있다.

먼저 주머니에 돈이 있는지를 판단해야 하고 주머니에 돈이 없으면 다시 카드가 있는지 판단해야 한다.

if와 else만으로 위 문장을 표현하려면 다음과 같이 할 수 있다.

>>> pocket = ['paper', 'cellphone']
>>> card = True
>>>if 'money'in pocket:
...     print("택시를 타고가라")
...else:
...if card:
...         print("택시를 타고가라")
...else:
...         print("걸어가라")
...
택시를 타고가라
>>>

언뜻 보기에도 이해하기 어렵고 산만한 느낌이 든다.
이런 복잡함을 해결하기 위해 파이썬에서는 다중 조건 판단을 가능하게 하는 elif를 사용한다.

👉 조건부 표현식


다음 코드를 살펴보자. score가 60 이상일 경우 message에 문자열 “success”, 아닐 경우에는 문자열 “failure”를 대입하는 코드이다.

if score >= 60:
    message = "success"
else:
    message = "failure"

파이썬의 조건부 표현식(conditional expression)을 사용하면 위 코드를 다음과 같이 간단히 표현할 수 있다.

message = "success"if score >= 60else "failure"

조건부 표현식은 다음과 같이 정의한다.

변수 = 조건문이_참인_경우의_값 if 조건문 else 조건문이_거짓인_경우의_값

조건부 표현식은 가독성에 유리하고 한 줄로 작성할 수 있어 활용성이 좋다.

👉 반복문(Loops)


📶 반복문은 동일한 작업을 반복해서 수행하도록 하는 제어문입니다. Python에서는 **`for`**와 **`while`** 두 가지 주요 반복문을 제공합니다.

또한 **반복문**은 리스트, 튜플, 딕셔너리 등과 같은 데이터 구조를 순회하거나, 일정한 조건을 만족할 때까지 작업을 반복할 때 사용됩니다.

✨ for 반복문


fruits = ["사과", "바나나", "딸기"]

for fruit in fruits:
    print(fruit)

⇲ for 문의 기본 구조


for 문의 기본 구조는 다음과 같다.

for 변수in 리스트(또는 튜플, 문자열):
    수행할_문장1
    수행할_문장2
    ...

리스트나 튜플, 문자열의 첫 번째 요소부터 마지막 요소까지 차례로 변수에 대입되어 ‘수행할문장1’, ‘수행할문장2’ 등이 수행된다.

for 문과 함께 자주 사용하는 range 함수


for 문은 숫자 리스트를 자동으로 만들어 주는 range 함수와 함께 사용하는 경우가 많다. 다음은 range 함수의 간단한 사용법이다.

>>> a = range(10)
>>> a
range(0, 10)

range(10)은 0부터 10 미만의 숫자를 포함하는 range 객체를 만들어 준다.

시작 숫자와 끝 숫자를 지정하려면 range(시작숫자, 끝숫자) 형태를 사용하는데, 이때 끝 숫자는 포함되지 않는다.

>>> a = range(1, 11)
>>> a
range(1, 11)

리스트 컴프리헨션 사용하기


리스트 안에 for 문을 포함하는 리스트 컴프리헨션(list comprehension)을 사용하면 좀 더 편리하고 직관적인 프로그램을 만들 수 있다. 다음 예제를 살펴보자.

>>> a = [1,2,3,4]
>>> result = []
>>>for numin a:
...     result.append(num*3)
...
>>> print(result)
[3, 6, 9, 12]

위 예제에서는 a 리스트의 각 항목에 3을 곱한 결과를 result 리스트에 담았다.

리스트 컴프리헨션을 사용하면 다음과 같이 좀 더 간단하게 작성할 수 있다.

>>> a = [1,2,3,4]
>>> result = [num * 3for numin a]
>>> print(result)
[3, 6, 9, 12]

만약 [1, 2, 3, 4] 중에서 짝수에만 3을 곱하여 담고 싶다면 리스트 컴프리헨션 안에 ‘if 조건문’을 사용하면 된다.

>>> a = [1,2,3,4]
>>> result = [num * 3for numin aif num % 2 == 0]
>>> print(result)
[6, 12]

리스트 컴프리헨션의 문법은 다음과 같다. ‘if 조건문’ 부분은 앞의 예제에서 볼 수 있듯이 생략할 수 있다.

[표현식 for 항목 in 반복_가능_객체 if 조건문]

조금 복잡하지만, for 문을 2개 이상 사용하는 것도 가능하다. for 문을 여러 개 사용할 때의 문법은 다음과 같다.

[표현식 for 항목1 in 반복_가능_객체1 if 조건문1
      for 항목2 in 반복_가능_객체2 if 조건문2
      ...
      for 항목n in 반복_가능_객체n if 조건문n]

만약 구구단의 모든 결과를 리스트에 담고 싶다면 리스트 컴프리헨션을 사용하여 다음과 같이 간단하게 구현할 수도 있다.

>>> result = [x*yfor xin range(2,10)
...for yin 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]

지금까지 우리는 프로그램 흐름을 제어하는 if 문, while 문, for 문에 대해 알아보았다.

아마도 여러분은 while 문과 for 문을 보면서 2가지가 매우 비슷하다는 느낌을 받았을 것이다.

실제로 for 문으로 작성한 코드를 while 문으로 바꿀 수 있는 경우도 많고 while 문을 for 문으로 바꾸어서 사용할 수 있는 경우도 많다.

✨ while 반복문


count = 0

while count < 5:
    print(f"카운트: {count}")
    count += 1

⇲ While 문의 기본 구조


다음은 while 문의 기본 구조이다.

while 조건문:
    수행할_문장1
    수행할_문장2
    수행할_문장3
    ...

while 문은 조건문이 참인 동안 while 문에 속한 문장들이 반복해서 수행된다.

‘열 번 찍어 안 넘어가는 나무 없다’라는 속담을 파이썬 프로그램으로 만들면 다음과 같다.

>>> treeHit = 0
>>> while treeHit < 10:
...     treeHit = treeHit +1
...     print("나무를 %d번 찍었습니다." % treeHit)
...     if treeHit == 10:
...         print("나무 넘어갑니다.")
...
나무를 1번 찍었습니다.
나무를 2번 찍었습니다.
나무를 3번 찍었습니다.
나무를 4번 찍었습니다.
나무를 5번 찍었습니다.
나무를 6번 찍었습니다.
나무를 7번 찍었습니다.
나무를 8번 찍었습니다.
나무를 9번 찍었습니다.
나무를 10번 찍었습니다.
나무 넘어갑니다.

위 예에서 while 문의 조건문은 treeHit < 10이다. 즉, treeHit가 10보다 작은 동안 while 문에 포함된 문장들을 계속 수행한다.

whlie문 안의 문장을 보면 가장 먼저 treeHit = treeHit + 1로 treeHit 값이 계속 1씩 증가한다는 것을 알 수 있다.

그리고 나무를 treeHit번만큼 찍었다는 것을 알리는 문장을 출력하고 treeHit가 10이 되면 "나무 넘어갑니다."라는 문장을 출력한다. 그러고 나면 treeHit < 10 조건문이 거짓이 되므로 while 문을 빠져나가게 된다.

while 문의 맨 처음으로 돌아가기


while 문 안의 문장을 수행할 때 입력 조건을 검사해서 조건에 맞지 않으면 while 문을 빠져나간다. 그런데 프로그래밍을 하다 보면 while 문을 빠져나가지 않고 while 문의 맨 처음(조건문)으로 다시 돌아가게 만들고 싶은 경우가 생기게 된다. 이때 사용하는 것이 바로 continue 문이다.

>>> a = 0
>>>while a < 10:
...     a = a + 1
...if a % 2 == 0:continue...     print(a)
...
1
3
5
7
9

무한 루프


이번에는 무한 루프(endless loop)에 대해 알아보자. 무한 루프란 무한히 반복한다는 의미이다. 우리가 사용하는 일반 프로그램 중에서 무한 루프 개념을 사용하지 않는 프로그램은 거의 없다. 그만큼 자주 사용한다는 뜻이다.

while True:
    수행할_문장1
    수행할_문장2
    ...

while 문의 조건문이 True이므로 항상 참이 된다. 따라서 while 문 안에 있는 문장들은 무한히 수행될 것이다.

다음은 무한 루프의 예이다.

>>>while True:
...     print("Ctrl+C를 눌러야 while문을 빠져나갈 수 있습니다.")
...
Ctrl+C를 눌러야while문을 빠져나갈 수 있습니다.
Ctrl+C를 눌러야while문을 빠져나갈 수 있습니다.
Ctrl+C를 눌러야while문을 빠져나갈 수 있습니다.
....

위 문장은 영원히 출력된다. 하지만 이 예처럼 아무 의미 없이 무한 루프를 돌리는 경우는 거의 없을 것이다. [Ctrl+C]를 눌러 빠져나가자.

🎬 마무리


업로드중..

이렇게 Python의 제어문에 대한 더 자세한 설명을 포함한 Velog 글을 작성해 보았습니다. Python의 제어문은 프로그래밍의 핵심이며, 다양한 프로그래밍 과제를 해결하는 데 필수적인 도구입니다.

profile
안녕하세요

0개의 댓글