파이썬 - 함수와 흐름 제어 2

4
post-thumbnail

GOAL
1. 반복문 개념
2. for문 상세
3. while문 상세
4. break / continue
5. 리스트 컴프리헨션

1. 반복문 개념

: 같은 코드를 여러 번 실행하는 도구이다.
: 반복 작업을 자동화할 수 있음
: 예시) 10명의 학생 이름 출력하기

반복문 종류

  1. for문 : 정해진 횟수에 시퀀스 반복한다.
  2. while문 : 조건이 True일 동안 반복한다. (조건이 계속 True이면 계속 반복됨. 즉 무한 루프에 걸릴 수 있음)

for문 예시)

for name in ["철수","영희","민수"]:
print("안녕,", name)

출력
안녕, 철수
안녕, 영희
안녕, 민수

for문 내부 동작

리스트 = ["철수", "영희", "민수"]
1회전: name = "철수"
2회전: name = "영희"
3회전: name = "민수"

각 요소가 차례대로 변수에 들어간다.

여기서 for문 뒤에 어떠한 객체를 하나씩 꺼낼지 지정해줘야 한다.
이를 이터러블이라고 한다.

이터러블(Iterable)이란?

: 하나씩 꺼낼 수 있는 객체를 말한다.
: 내부적으로 iter() 메서드를 가진다.
: for문 in 뒤에는 반드시 이터러블이 와야 한다.
: 즉, “줄 을 서서 한 명씩 꺼낼 수 있는 자료 구조”

이터러블 종류

  1. 문자열 (str)
    for ch in "Python":
    print(ch)

출력:
P
y
t
h
o
n

  1. 리스트 (list
    for fruit in ["사과","바나나","체리"]:
    print(fruit)

출력:
사과
바나나
체리

  1. 튜플 (tuple
    for item in (1,2,3):
    print(item)

출력:
1
2
3

  1. 딕셔너리(dict → key 기준 반복)
    person = {"name":"철수","age":20}
    for key in person:
    print(key,":", person[key])

출력:
name : 철수
age : 20

  1. 집합 (set)
    for num in {10,20,30}:
    print(num)

출력 (순서는 일정치 않음):
10
20
30

  1. range
    for i in range(3):
    print(i)

출력:
0
1
2
번호표를 하나씩 꺼내주는 느낌입니다.

  1. enumerate()
    : (인덱스, 값)쌍을 차례대로 반환
    : 반복문에서 번호와 값을 동시에 써야 할 때 가장 깔끔한 방법

names = ["Kim","Lee","Park"]
for i, name in enumerate(names, start=1):
print(i, name)

출력
1 Kim
2 Lee
3 Park

  1. zip()
    names = ["철수","영희","민수"]
    scores = [85, 92, 78]
    for name, score in zip(names, scores):
    print(name,":", score)

출력
철수 : 85
영희 : 92
민수 : 78

name 3개의 값, scores 3개의 값을 입력하고, 합쳤을 때에는 1 : 1 대응으로 짝지어서 출력이 됩니다.

또 다른 경우도 있습니다.

names = ["철수","영희"]
scores = [90, 80, 70] # 더 길다
for n, s in zip(names, scores):
print(n,":", s)

출력
철수 : 90
영희 : 80

이렇게 name 2개의 값, scores 3개의 값을 입력하고, 합쳤을 때에는 score 1개는 남아서 출력이 따로 안됩니다.

2. for문 상세

for문을 2개 이상 동시에 쓰는 중첩 for문에 대해 알아보도록 하겠습니다.
어떻게 쓰이냐면,
for i in range(2, 5):
for j in range(1, 4):
print(i,"x", j,"=", i*j)

이렇게 for문 안에 for문을 써서 중첩이 되게 코드 작성을 해줍니다.
이 코드의 의미는 i는 2,3,4(5전까지 출력!)을 입력 받을 동안, j는 1부터 4까지 i가 한번 입력 받을 때 1~4까지 출력됩니다. 이를 어떻게 보여주냐, 바로 print문을 확인해보면
i x j = i 랑 j 곱한값! 으로 출력하도록 되어있습니다.
즉 구구단의 일부를 출력하는게 됩니다.

출력값은
2 x 1 = 2
2 x 2 = 4
2 x 3 = 6
2 x 4 = 8
3 x 1 = 3
3 x 2 = 6
3 x 3 = 9
3 x 4 = 12
4 x 1 = 4
4 x 2 = 8
4 x 3 = 12
4 x 4 = 16
이렇게 됩니다.

3. while문 상세

x = 3
while x > 0:
print("카운트:", x)
x -= 1

출력
카운트: 3
카운트: 2
카운트: 1
이렇게 0 전까지 실행되는 걸 볼 수 있습니다. 0은 왜 안되냐면 두 번째 줄에 while문을 보면 x > 0인데 0 > 0 이 식은 false이기 때문에 while문이 실행되지 않기 때문입니다.

while문 예시

잔액이 0이 될 때까지 반복합니다.

money = 3000
while money > 0:
print("음료 구매")
money -= 1000

출력: 3번만 실행

4. break / continue

먼저 break는 위에서 봤던 반복문을 즉시 종료하는 역할을 합니다.

예시)
for i in range(1, 10):
if i == 5:
print("5에서 멈춤!")
break
print(i)

출력: 1 2 3 4

예시)
x = 1
while True:
if x > 3:
break
print(x)
x += 1

출력
1
2
3

이렇게 예시를 통해 확인해볼 수 있습니다.

continue란 현재 회차를 건너뛰는걸 말합니다.

예시)
for i in range(1, 6):
if i % 2 == 0:
continue
print(i)

출력
1
3
5

또 다른 예시 있습니다.

예시)
x = 0
while x < 5:
x += 1
if x % 2 == 0:
continue
print(x)

출력
1
3
5

break & continue 차이

: break 👉 회의 자체 종료
: continue 👉 특정 안건만 건너뜀

5. 리스트 컴프리헨션

[표현식 for 변수 in iterable] 구조로 이루어져 있습니다.
먼저 어떻게 쓰는지 코드 먼저 보겠습니다.

squares = [x**2 for x in range(1,6)]
print(squares)

출력
[1,4,9,16,25]

이 구문은 if문 조건식도 포함할 수 있습니다.

예시)
evens = [x for x in range(10) if x%2==0]
print(evens)

출력
[0,2,4,6,8]
뒤쪽에 if 조건을 붙여 필터링 가능합니다.

이 구문은 for문도 포함이 됩니다.

예시)
gugudan = [f"{i}x{j}={i*j}" for i in range(2,10) for j in range(1,10)]
print(gugudan[:10])

출력
['2x1=2','2x2=4','2x3=6', ...,'2x9=18','3x1=3', ...]

또한 문자열도 처리가 가능합니다.

예시)
text = "hello"
upper_chars = [ch.upper() for ch in text]
print(upper_chars)

출력
['H','E','L','L','O']

이렇게해서 오늘 함수와 흐름 제어에 대해서 알아보았습니다!
조금 복잡한 내용들도 있는 것 같고, 처음 받아들이시기에는 조금 하드(hard)한 난이도의 내용이 아닐까... 생각합니다. 왜냐면 저도 이번에 이번에 공부한 내용이 좀 있었고, 생소했거든요..ㅎㅎ
한번에 이해하고 알아들으신 분 정말 박수와 찬사를 보냅니다. 👏🏻👏🏻👏🏻👏🏻👏🏻👏🏻👏🏻👏🏻👏🏻👏🏻👏🏻👏🏻👏🏻👏🏻👏🏻👏🏻👏🏻👏🏻
오늘 포스터 날짜 기준으로 오늘과 내일 으쌰으쌰하면 황금연휴가 기달리고 있습니다!!
다들 추석 연휴때 계획들을 세우셨는지요
저는 아직 공부하는 입장이라 어디를 딱히 가진 않을 것 같고, 이렇게 글을 쓰면서 열심히 강의를 보며 공부를
할 것 같습니다.
풀 공부하면 얼~~마나 좋게요~ ㅎ핳ㅎㅎ



,,
이만 가보도록 하겠습니다. 긴 글을 끝까지 읽어주셔서 감사합니다.

profile
안녕하세요, 개발자이지만 잡다한 얘기도 좋아해요.

2개의 댓글

comment-user-thumbnail
2일 전

ㅋㅋㅋ 저도 연휴 기간동안 박혀서 공부할 것 같습니다 너무 공감되네요,,,, 그래도 저희 파이팅합시다 ..! 글 잘 읽었습니다😊

답글 달기
comment-user-thumbnail
2일 전

ㅎㅎ 열심히 해보시게요!!

답글 달기