제어문. if, while, for문

변현섭·2023년 7월 26일
0

Ⅱ. 제어문

1. if문

1) if문의 기본 구조

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("가라")

2) 조건문

① 비교연산자

  • C/C++, Java에서의 방식과 동일하다.

② 논리연산자

  • &&, ||, ! 대신 더 직관적인 and, or, not을 사용한다.
>>> money = 2000
>>> card = True
>>> if money >= 3000 or card:
...     print("택시를 타고 가라")
... else:
...     print("걸어가라")

③ 포함 연산

  • in 이라는 포함 연산자는 보통 SQL에 사용되지만, 파이썬에서는 조건문에 사용할 수 있다.
  • 리스트, 튜플, 문자열에 대해 포함 및 미포함 여부를 반환한다.
>>> 1 in [1, 2, 3]
True
>>> 'a' in ('a', 'b', 'c')
True
>>> 'j' not in 'python'
True

3) elif

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("카드를 꺼내라")

4) 조건부 표현식

C/C++, Java에서 사용하던 삼항 연산자와 비슷한 개념이다. 삼항 연산자는 조건문보다 코드는 간결해지지만, 오히려 가독성이 낮아지는 이유 때문에 자주 사용되지 않았다. 하지만, 파이썬의 조건부 표현식은 코드를 간결하게 해줌과 동시에 가독성도 높은 편이다.

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

참고로 위의 식을 C++의 삼항 연산자로 나타내면, string message = (score >= 60) ? "success" : "failure"; 와 같이 될 것이다.

2. while문

1) while문의 기본 구조

while문도 바로 구조를 살펴보기로 하자.

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

2) while문 키워드

① while 루프 빠져나오기

  • C/C++, Java에서와 마찬가지로 break 키워드를 사용하여 루프를 빠져나올 수 있다.
>>> coffee = 10
>>> money = 300
>>> while money:
...     print("돈을 받았으니 커피를 줍니다.")
...     coffee = coffee -1
...     print("남은 커피의 양은 %d개입니다." % coffee)
...     if coffee == 0:
...         print("커피가 다 떨어졌습니다. 판매를 중지합니다.")
...         break

② while 루프의 맨 처음으로 돌아가기

  • C/C++, Java에서와 마찬가지로 continue 키워드를 사용한다. continue 아래의 명령은 실행하지 않고, while의 조건문으로 이동한다.
>>> a = 0
>>> while a < 10:
...     a = a + 1
...     if a % 2 == 0: continue
...     print(a)
...
1
3
5
7
9

3. for문

1) for문의 기본 구조

for문은 우리가 C/C++, Java에서 사용하던 방식과 조금은 다르지만, 역시 매우 직관적이기 때문에 어렵지는 않다. 먼저 for문의 기본 구조는 아래와 같다.

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

2) 전형적인 for문

>>> test_list = ['one', 'two', 'three'] 
>>> for i in test_list: 
...     print(i)
... 
one 
two 
three

3) 튜플을 이용한 for문

튜플 패킹을 for문의 변수로 사용할 수도 있다. 참고로, 아래와 같이 튜플의 값을 각각 first와 last에 할당하는 것을 튜플 언패킹이라 한다.

>>> a = [(1,2), (3,4), (5,6)]
>>> for (first, last) in a:
...     print(first + last)
...
3
7
11

4) 응용 for문

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번 학생은 합격입니다.

5) for문 키워드

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)

6) range 함수

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

7) List Comprehension

리스트 컴프리헨션이란, 파이썬에서 리스트를 간단하게 생성하는 방법 중 하나로, 반복문과 조건문을 사용하여 새로운 리스트를 생성하는 문법이다. 만약 아래와 같이 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]
profile
Java Spring, Android Kotlin, Node.js, ML/DL 개발을 공부하는 인하대학교 정보통신공학과 학생입니다.

0개의 댓글