본문 바로가기
코딩/파이썬

파이썬 제어문 - 반복문

by Song1234 2024. 3. 15.

1. 반복문

반복문은 동일한 작업을 여러 번 실행하기 위해 사용되는 제어 구조입니다. 주로 for 문과 while 문이 사용되며, 각각의 반복문은 다른 상황에 적합한 방식으로 사용됩니다.

2. while 문

while 문은 특정 조건이 참인 동안 반복적으로 코드 블록을 실행하는 제어 구조입니다. while 문은 주어진 조건이 참인 동안 반복하며, 거짓이 되면 멈춥니다.

  • 멈출수 있는 조건을 넣지않으면 무한히 반복되는 무한루프상태가 될수있습니다.
wihle 조건:
    조건이 참인 동안 실행될 코드

i = 1
while i <= 5:
    print('Hello Pthon')
    i += 1

결과:
Hello Pthon
Hello Pthon
Hello Pthon
Hello Pthon
Hello Pthon


# 1부터 10까지의 총합
i = 1
sum = 0
while i <= 10:
    sum += i
    i += 1

print(f'1부터 10까지의 합: {sum}')

결과:
1부터 10까지의 합: 55


# 1부터 100까지의 짝수의 합을 구하는 프로그램을 작성
i = 1
sum = 0

while i <= 100:
    if i%2 == 0:
        sum += i 
    i += 1

print(f'1부터 100까지 짝수의 합: {sum}')

결과:
1부터 100까지 짝수의 합: 2550


# 원하는 숫자를 입력받아 해당 숫자의 구구단 출력
dan = int(input('원하는 단을 입력하세요 :'))
print(f'{dan}단')

i = 1
while i <= 9:
    print(f'{dan} * {i} = {dan * i}')
    i += 1

결과:
원하는 단을 입력하세요: 5
5단
5 * 1 = 5
5 * 2 = 10
5 * 3 = 15
5 * 4 = 20
5 * 5 = 25
5 * 6 = 30
5 * 7 = 35
5 * 8 = 40
5 * 9 = 45

while 문은 반복횟수를 모를때 유용하고, for문은 반복횟수가 정해져 있을때 유용하다.

3. for 문

for 문은 시퀀스(리스트, 튜플, 문자열 등)의 각 항목에 대해 반복 작업을 수행하는 반복문입니다. for 문은 주로 "지정된 범위 내에서 반복"할 때 사용됩니다. 이것은 반복할 요소들이 미리 정해져 있는 경우에 유용합니다.

for 요소 in 시퀀스:
    # 시퀀스 요소 갯수만큼 반복할 문장
list1 = [10, 20, 30, 40]

for li in list1:
    print(li)

결과:
10
20
30
40


3-1. range() 함수

range() 함수는 파이썬에서 순차적인 정수의 시퀀스를 생성하는 데 사용되는 내장 함수입니다. 주로 for 문과 함께 사용되며, 일정한 범위 내에서 반복 작업을 수행할 때 유용하게 활용됩니다. range() 함수의 결과로 생성되는 순차적인 정수 시퀀스는 실제로 메모리에 저장되지 않고 필요할 때마다 생성되므로, 큰 범위의 반복문에도 효율적으로 사용할 수 있습니다.

range(start,stop,step)

num = range(1, 11, 1)
print(num)
for i in num:
    print(i, end=' ')

결과:
range(1, 11)
1 2 3 4 5 6 7 8 9 10

for i in range(1, 11, 1):
    print(i, end= ' ')

결과:
1 2 3 4 5 6 7 8 9 10

for i in range(1, 11, 1):
    print(i, end= ' ')

결과:
1 2 3 4 5 6 7 8 9 10

이런식으로 코드 간소화 할수있다.


for i in range(1, 11):
    print(i, end = ' ')

step은 생략할수 있고 기본값은 1이다.


for i in range(11): 
    print(i, end = ' ')

시작값을 생략할 수 있고 기본값은 0이다.


for i in range(1, 101, 2):
    print(i, end = ' ')

결과:
1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 51 53 55 57 59 61 63 65 67 69 71 73 75 77 79 81 83 85 87 89 91 93 95 97 99


# for, range()를 이용하여 1부터 100까지 홀수의 합 구하기
sum = 0

for i in range(1, 101, 2):
    sum += i

print(f'1부터 100 까지 홀수의 합: {sum}')

결과:
1부터 100 까지 홀수의 합: 2500


3-2. enumerate() 함수

enumerate() 함수는 파이썬에서 반복문을 사용할 때 인덱스와 값을 함께 가져오기 위해 사용되는 내장 함수입니다. 주로 for 문과 함께 사용되며, 반복문 내에서 순서를 추적하면서 값과 해당 값의 인덱스를 함께 사용할 때 유용합니다. enumerate() 함수는 (인덱스, 값)의 튜플을 반환하는 이터레이터(iterator)를 생성합니다.

enumerate(iterable, 시작값)#시작값은 인덱스값을 설정

li1 = [10, 20, 30, 40, 50]

for e in enumerate(li1, 0): 
    print(e)

결과:
(0, 10)
(1, 20)
(2, 30)
(3, 40)
(4, 50)

**시작값은 생략이 가능하고 기본값은 0이다.


li1 = [10, 20, 30, 40, 50]

for e in enumerate(li1, 1):
    print(e)

결과:
(1, 10)
(2, 20)
(3, 30)
(4, 40)
(5, 50)


li1 = [10, 20, 30, 40, 50]
# (0, 10)
# i, v = (0, 10)
for i, v in enumerate(li1):
    print(f'인덱스: {i}, 값: {v}')

결과:
인덱스: 0, 값: 10
인덱스: 1, 값: 20
인덱스: 2, 값: 30
인덱스: 3, 값: 40
인덱스: 4, 값: 50

튜플 형식이기 때문에 인덱스와 값을 쪼개서 저장이 가능하다.


3-3. zip()함수

zip() 함수는 파이썬에서 여러 개의 반복 가능한(iterable) 객체를 병렬적으로 묶어주는 내장 함수입니다. 각 객체로부터 순서대로 하나의 요소씩 가져와 튜플로 묶어주는 이터레이터를 반환합니다. 주로 여러 개의 리스트나 튜플을 병렬적으로 처리하고자 할 때 사용됩니다.

zip(interable1, iterable2, ...)

# li1 = [10, 20, 30, 40]
li1 = [10, 20, 30]
li2 = ['apple', 'banana', 'orange']

for i in range(0, 3):
    print(li1[i], li2[i])

결과:
10 apple
20 banana
30 orange

range안에 고정된 숫자를 넣으면 나중에 변수의 값이 수정 되었을때 코드를 직접 수정을 해줘야 하기때문에 확장성이 없다.


for i in range(len(li1)):
    print(li1[i], li2[i])

결과:
10 apple
20 banana
30 orange

len으로 값을 주면 요소 가 추가되었을때 자동으로 반복이 되지만 하나의 변수만 변경이 되면 인덱싱 에러가 난다.


li1 = [10, 20, 30]
li2 = ['apple', 'banana', 'orange']

for l1, l2 in zip(li1,li2):
    print(l1, l2)

결과:
10 apple
20 banana
30 orange

zip으로 묶어 함께 출력이 가능하다.

li1 = [10, 20, 30, 40] # 4개
li2 = ['apple', 'banana', 'orange'] # 3개

# 3번 반복
for l1, l2 in zip(li1,li2):
    print(l1, l2)

결과:
10 apple
20 banana
30 orange

zip 을 이용해 묶어주면 한개의 변수만 커졌을때 작은쪽에 맞춰서 반복이 되어서 에러가 발생하지 않는다.


li1 = [10, 20, 30, 40] # 4개
li2 = ['apple', 'banana', 'orange'] # 3개

# 3번 반복
for li in zip(li1,li2):
    print(li)

결과:
(10, 'apple')
(20, 'banana')
(30, 'orange')

하나의 변수에 묶으면 튜플로 반환할수 있다.


for n, A, a in zip('12345', 'ABCDE', 'abcde'):
    print(n, A, a)

결과:
1 A a
2 B b
3 C c
4 D d
5 E e

문자열도 순서가 있다면 zip을 사용할수있다.


4. 중첩 반복문

파이썬에서 중첩된 반복문은 하나의 반복문 안에 다른 반복문이 포함된 구조를 의미합니다. 중첩 반복문은 외부 반복문의 각 반복마다 내부 반복문이 모두 실행되는 방식으로 작동합니다. 이를 통해 다차원의 데이터를 처리하거나 복잡한 작업을 수행할 수 있습니다.

for 외부변수 in 외부시퀀스:
    for 내부변수 in 내부시퀀스:
        내부 반복문 코드
    외부 반복문 코드

for i in range(1, 4):
    print(f'😎  i: {i}')
    for j in range(1,4):
        print(f'😍      j:{j}')

결과:
😎 i: 1
😍 j:1
😍 j:2
😍 j:3
😎 i: 2
😍 j:1
😍 j:2
😍 j:3
😎 i: 3
😍 j:1
😍 j:2
😍 j:3


문제1

'🎃'를 이용하여 아래와 같은 모형을 만들어보자

🎃 🎃 🎃 🎃 🎃
🎃 🎃 🎃 🎃 🎃
🎃 🎃 🎃 🎃 🎃
🎃 🎃 🎃 🎃 🎃
🎃 🎃 🎃 🎃 🎃

for i in range(5):
    print()
    for j in range(5):
        print('🎃 ', end='')

결과:
🎃 🎃 🎃 🎃 🎃
🎃 🎃 🎃 🎃 🎃
🎃 🎃 🎃 🎃 🎃
🎃 🎃 🎃 🎃 🎃
🎃 🎃 🎃 🎃 🎃


문제2

'🎃'를 이용하여 아래와 같은 모형을 만들어보자

🎃 🎃 🎃 🎃 🎃
🎃 🎃 🎃 🎃
🎃 🎃 🎃
🎃 🎃
🎃

cnt = 5
for i in range(5):
    for j in range(cnt):
        print('🎃', end='')
    cnt -= 1
    print()

결과:
🎃🎃🎃🎃🎃
🎃🎃🎃🎃
🎃🎃🎃
🎃🎃
🎃

변수를 추가해 stop값에 넣고 반복이 1번 돌아갈때마다 cnt값을 1씩 빼주면 반복횟수가 1씩 줄어 모양을 만들수있다.


for i in range(5):
    for j in range(i, 5):
        print('🎃', end='')
    print()

결과:
🎃🎃🎃🎃🎃
🎃🎃🎃🎃
🎃🎃🎃
🎃🎃
🎃

시작값에 i 를 주면 i 값이 하나씩 증가할 때 마다 시작값이 1 씩 증가해 반복횟수를 하나씩 줄일수있다.


문제3

'🎃'를 이용하여 아래와 같은 모형을 만들어보자
🎃
🎃🎃
🎃🎃🎃
🎃🎃🎃🎃
🎃🎃🎃🎃🎃


for i in range(1,6):
    for j in range(i):
        print('🎃', end='')
    print()

결과:
🎃
🎃🎃
🎃🎃🎃
🎃🎃🎃🎃
🎃🎃🎃🎃🎃

i값이 증가할 때 마다 반복 횟수가 1씩 늘어위와 같은 모양을 만들수 있다.


문제4

2단부터 9단까지 구구단을 출력하는 프로그램을 만들어보자

  • 단, for문과 while을 사용하여 각각 별도로 작성

for i in range(2,10):
    for j in range(1,10):
        print(f'{i} * {j} = ',i*j)

결과:
2 * 1 = 2
2 * 2 = 4
2 * 3 = 6
2 * 4 = 8
...
3 * 1 = 3
3 * 2 = 6
3 * 3 = 9
3 * 4 = 12
...
9 * 5 = 45
9 * 6 = 54
9 * 7 = 63
9 * 8 = 72
9 * 9 = 81


i = 2
while i < 10:
    j = 1 # 여기서 초기화를 시켜주어야 처음으로 돌아와서 다시 계산을 하게된다.
    while j <= 9:
        print(f'{i} * {j} = ', i*j)
        j += 1
    i += 1

결과:
2 * 1 = 2
2 * 2 = 4
2 * 3 = 6
2 * 4 = 8
...
3 * 1 = 3
3 * 2 = 6
3 * 3 = 9
3 * 4 = 12
...
9 * 5 = 45
9 * 6 = 54
9 * 7 = 63
9 * 8 = 72
9 * 9 = 81

'코딩 > 파이썬' 카테고리의 다른 글

파이썬 - 사용자 정의 함수  (0) 2024.03.15
컬렉션과 반복문  (2) 2024.03.15
파이썬 제어문 - 조건문  (0) 2024.03.14
파이썬 - 연산자  (2) 2024.03.14
파이썬 - 딕셔너리  (0) 2024.03.14