본문 바로가기
코딩 이야기/파이썬(Python)

단도직입 파이썬(Python) – 반복문 (while, for)

by 아재코더 2021. 12. 15.
파이썬 - 반복문

1부터 10까지의 합을 구해야 할 때처럼 같은 명령어를 반복해서 실행해야 할 때 while과 for를 사용합니다.

While 조건문:

수행할 문장 1

수행할 문장 2

 

i = 0

sum = 0

while i < 10:

i += 1

sum += i

print (sum)

 

i 변수가 10보다 작을 때 그 아래 명령어를 실행하고, 맨 마지막 sum을 출력합니다.

반복문도 역시나 들여 쓰기를 유의해야 합니다.

(참고로 i += 1 은 i = i + 1을, sum += i는 sum = sum + i와 같은 의미입니다.)

 

조건이 참(True)일 때 while은 계속 반복 실행하게 되는데 이때 강제로 빠져나올 때 break를 사용합니다.

i = 0

sum = 0

while True:

i += 1

sum += i

if i == 10:break

print (sum)

break가 while 문을 빠져나온다면 continue는 while의 맨 처음으로 돌아갑니다. 예를 들어 1~10 중 홀수를 출력하고 합을 구할 때 아래와 같이 continue를 사용합니다.

i = 0

sum = 0

while I < 10 :

i += 1

if i%2 == 0 : continue

print(i)

sum += i

print (sum)

간혹 반복문을 작성하다 보면 결괏값이 무한 루프로 빠져들게 됩니다. 이때는 키보드 인터럽트(keyboard interrupt)를 사용! Ctrl + C를 누르면 강제로 실행이 중단됩니다.

while과 마찬가지로 좀 더 직관적인 반복문 for에 대해 알아봅니다. for 변수 in 리스트(또는 튜플, 문자열, range()):의 구조로 되어 있습니다.

t_list = ['a', 'b', 'c']

for i in t_list:

print(i)

리스트의 요솟값이 차례로 i 변수에 대입되고 출력됩니다.

 

t_list2 = [(1,2), (3,4), (5,6)]

for (a, b) in t_list2:

print (a+b)

리스트의 요솟값(튜플)이 차례로 a, b 변수에 대입되고 a+b가 출력됩니다.

 

for 문에서도 while 문과같이 continue를 사용하게 되면 for 문의 처음으로 돌아가게 됩니다.

score = [ 90, 100, 50, 60 ]

num = 0

for i in score:

num += 1

if i < 60 : continue

print(‘%d 번째 학생은 합격’ %num)

 

range()는 for 문의 숫자 리스트를 생성하는 함수입니다. range(시작, 끝, 증가 값)으로 사용하며, range(0,10,2)는 0부터 10미만까지 2씩 증가한다는 의미입니다.

for i in range(0, 10, 3) : print (i)

출력될 값을 상상해 보시죠^^;

 

다중 for 문과 range()를 이용하여 구구단 결괏값을 만들어 보겠습니다.

다중 반복문 - 1

i는 2~9까지, j는 1~9까지 반복하며 i*j를 계산합니다. 매개변수 end=’’는 옆으로 붙여서 출력할 때 사용하며, 맨 마지막 print(‘’)는 i가 1회 실행을 마칠 때마다 줄바꿈 한다는 의미입니다.

다중 반복문 - 2

언뜻 같아 보이지만 전혀 다른 결괏값을 보여 줍니다. i, j의 range 범위 변경만으로 가로세로 값이 바뀌었습니다.

 

다중 for 문 또는 while 문을 사용하여 아래와 같은 별 모양을 만들어 보겠습니다.

1번
2번
*
**
***
****
*****
******
*******
* *
* *
* *
*
* *
* *
* *

1번 예제

for i in range(7,0, -1):

for j in range(1,8):

if i <= j : print('*',end='')

else : print(' ',end='')

print ('')

 

2번 예제

for i in range(1,8):

for j in range(1,8):

if i == j or 8-i == j : print ('*',end='')

else : print(' ',end='')

print ('')

정답은 없습니다. 본인이 작성한 코드가 생각한 대로 결괏값으로 나오는지 확인하시면 되겠네요.

 

리스트 내포 함수에 대해 알아보겠습니다. 반복문을 이렇게도 사용할 수 있구나 싶을 정도로 직관적입니다.

a = [1, 2, 3, 4]

b = [ num*3 for num in a ]

print (b)

[3, 6, 9, 12]

 

b = [num*3 for num in a if num%2 == 0] 와 같이 if 문과 결합하게 되면 짝수만 b에 들어가게 됩니다. 쉬운 듯! 어려운 듯! 하네요.

 

다중 for 문도 리스트 내포를 사용하여 구현할 수 있습니다.

result = [x*y for x in range(2,10)

for y in range(1,10)]

print(result)

 

마지막으로 for 문을 사용하여 합계, 평균을 구해 봅니다.

score = [ 100, 70, 50, 80, 95, 80, 75, 90, 60, 65 ]

total_score = 0

for i in score: total_score += i

ave_score = total_score/len(score)

print (total_score, ave_score)

댓글