파이썬

반복문 - if , while

96__혀누 2024. 3. 15. 16:50

반복문이란?

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

 


while 반복문

 

while문의 기본 구조

while 조건문:  # 조건문의 결과가 True인 경우, 결과가 False가 될 때 까지, 수행할 문장들을 반복하여 실행한다.  
    수행할_문장1
    수행할_문장2
    수행할_문장3
    ...
예시 )

i = 1

while i <= 5:  #  아래 문장을 5번 실행
  print('Hello Python')
  i += 1

>>
Hello Python
Hello Python
Hello Python
Hello Python
Hello Python
예시2 )
# 1부터 10까지의 총합

i = 1
sum = 0

while i <= 10:
  sum += i # sum = sum + i
  i += 1

print(sum)

>> 55

 

 

※ while 반복문의 주의사항

 

무한루프 : 만약 조건이 항상 True일 경우, 반복문이 무한하게 실행된다. 의도적으로 무한루프를 사용하는 경우가 아니라면, 조건을 잘 설정해야 한다.

 

조건 변경 : while문의 실행되는 동안, 조건이 변경되어야 while문이 종료되는 경우가 있다. 그럴 경우, 무한 루프에 빠질 수 있으니 주의해야 한다.

 

변수의 적절한 초기화 : 특정 조건의 변수가 while 반복문을 실행하는 동안, 값이 변경 될 수 있어, 수행할 문장 중간중간 적절한 초기화가 필요하다.

 

 


 

for 반복문

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

for문의 기본 구조

for 요소 in 시퀀스:
    # 시퀀스 요소 갯수만큼 반복할 문장

# 
요소: 반복할 시퀀스의 각 항목이 for 문의 실행 도중에 할당되는 변수입니다.
시퀀스: 반복할 데이터의 컬렉션(리스트, 튜플, 문자열 등)을 지정합니다. 이외의 다른 자료형(숫자, 불린 등)에는 사용할 수 없습니다.
작업: 각 요소에 대해 수행할 작업을 표현합니다.
예시 )

list1 = [10, 20, 30, 40]

for li in list1:
  print(li)

>>
10
20
30
40

 


반복문에서 자주 사용하는 함수

range()

설정한 정수의 범위를 지정할 수 있다.

range(start, stop, step)

# start는 생략이 가능하며, 기본값은 1 이다.
# step은 생략이 가능하며, 기본값은 0 이다.
예시 )

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

>>
1 2 3 4 5 6 7 8 9 10 

 

enumerate()

 

인덱스와 해당 값을 가져올 수 있다.

enumerate(iterable, 시작값)
예시 )
li1 = [10, 20, 30, 40, 50]

# 시작값은 실제 인덱스 번호가 아닌, 사용자가 지정하는 시작값에 따라, 순서가 지정된다.

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

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

>>
(1, 10)
(2, 20)
(3, 30)
(4, 40)
(5, 50)

 

zip()

 

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

zip(iterable1, iterable2, ...)
예시 )
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
li1 = [10, 20, 30, 40]  # 인덱스가 차이가 나도 오류 없이 실행
li2 = ['apple', 'banana', 'orange']

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

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

# 변수가 하나일 시, 튜플로 묶어서 반환
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

 


※ 중첩 반복문

 

하나의 반복문에 다른 반복문이 중첩된 구조이며, 여러 조건의 작업을 수행할 수 있다.

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

 

중첩 반복문 활용 문제

 

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

 

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

# 풀이

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

 

 

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

# 풀이

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

  print()

 

 

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

# 풀이

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

  print()

 

 

2단 부터 9단까지 구구단을 출력하기

# for문을 사용한 풀이

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

# while문을 사용한 풀이

i = 2

while i <= 9:
  print(f'{i}단')
  while j <= 9:
    print(f'{i}x{j}={i*j}', end="\n")
    j += 1
  i += 1
  j = 1
  print()