스터디/파이썬 스터디 강의자료

[4팀/이제은] 4차시 파이썬 스터디 - 반복문

알 수 없는 사용자 2023. 3. 28. 16:07

4차시_반복문_강의안.pdf
0.51MB
4차시_반복문_과제.pdf
0.28MB

1. 반복문이란?

반복문은 프로그래밍에서 가장 기본이 되는 제어문 중 하나입니다. 코드를 일정한 패턴으로 반복하여 실행할 수 있습니다. 대개 for문과 while문으로 구성되며, 두 제어문은 실행 방식에 차이가 있습니다.

> 반복문?

반복문은 특정 조건에 따라서 반복문 코드블록 안의 내용을 반복해줍니다. 모든 기본 문법 책에서 하는 말이 있는데, 변수 10,000개, 100,000개를 처리하고 싶은데 사람 손으로 일일이 할 수 없으므로 반복문이 필요하다는 것입니다.

 

반복문, loop

- 반복문에는 for문과 while문이 있습니다. 두 가지를 같다고 볼 수도 있지만, 보통 for문은 몇 번 반복할 때 많이 사용하고, while문은 언제까지 반복할 때 많이 사용합니다. 

 

> 반복문 구성

- 반복 시작 조건, 종료 조거느 수행 명령으로 구성

- 들여쓰기와 블록으로 구분

 

2. for 문

for문은 주어진 범위 내에서 일정한 규칙으로 변수를 증가시키면서 코드를 반복 실행하는 구조입니다. for문은 초기값, 조건식, 증감식을 지정하여 반복 범위를 정합니다.

> for 문의 문법

for i in 범위:
    반복할 명령어1
    반복할 명령어2

for문은 이런 형태로 생겼습니다. 

- : (콜론)을 통해 반복문의 시작을 알리고, 반복할 명령어들이 있는 블럭들은 들여쓰기를 해줍니다. 

- 들여쓰기를 스페이스바 4칸으로 해줄 것을 권장합니다. 

- i 는 이 for문 안에서만 일하는 변수로, 특별히 중요한 역할이 정해져있다면 다른 문자를 사용하기도 하지만 그게 아닐 경우 보통 i 를 사용합니다. 

> for 문의 사용법 1 (list와 함께)

mylist = ['슈리', '웬디', '유시']
for i in mylist:
    print(i)
print('반복 끝')

결과: 

슈리
웬디
유시
반복 끝

1행 : 첫째줄 : myilst 라는 리스트를 만들었습니다. 리스트에 슈리, 웬디, 유시를 넣어주었습니다. 

2행 : for i in mylist 의 뜻은, mylist 의 요소 중 앞에서부터 하나씩 변수 i 에 대입하겠다는 말입니다. 즉 첫 번째에는 i = '슈리', 두번째에는 i = '웬디', 세번째에는 i = '유시'가 됩니다. 

3행 : 매 반복마다 들여쓰기 된 명령어 print(i) 를 실행합니다.

4행 : 세 번째까지 반복했으면 리스트가 끝났으므로 반복을 종료하고, 반복문 밖에 있는 문장을 출력하게 됩니다. 

 

> for 문의 사용법 2 (range와 함께)

이번에는 range()함수를 사용하여 반복할 횟수를 정해보도록 하겠습니다.

for i in range (1, 11):
    print(i, end=" ")
print('반복 끝')
1 2 3 4 5 6 7 8 9 10 반복 끝

여기서 i는 1부터 시작해서 증가하다가 10까지 출력하고, 11이 되면 반복을 탈출합니다.

 

> for 문의 응용

>> list 예문

for문의 쓰임새를 알기 위해 다음과 같은 문제를 생각해봅시다.

더보기

총 5명의 학생이 시험을 보았는데 시험 점수가 60점 이상이면 합격이고 그렇지 않으면 불합격이다. 합격인지 불합격인지 결과를 보여 주시오.

우선 학생 5명의 시험 점수를 리스트로 표현해봅시다.

marks = [90, 25, 67, 45, 80]

이 점수를 차례로 검사해서 합격했는지 불합격했는지 통보해주는 프로그램을 만들어보도록 하겠습니다.

# marks1.py
marks = [90, 25, 67, 45, 80]

number = 0 
for mark in marks: 
    number = number +1 
    if mark >= 60: 
        print("%d번 학생은 합격입니다." % number)
    else: 
        print("%d번 학생은 불합격입니다." % number)

- 먼저, 각각의 학생에게 번호를 붙여 주기 위해 number 변수를 사용하였습니다. 

- 점수 리스트 marks에서 차례로 점수를 꺼내어 mark라는 변수에 대입하고 for문 안의 문장들을 수행하도록 코드를 작성했습니다.

- for문이 한 번씩 수행될 때마다 number는 1씩 증가합니다.

이 프로그램을 실행하면 mark가 60 이상일 때 합격 메시지를 출력하고 60을 넘지 않을 때 불합격 메시지를 출력합니다.

1번 학생은 합격입니다.
2번 학생은 불합격입니다.
3번 학생은 합격입니다.
4번 학생은 불합격입니다.
5번 학생은 합격입니다.

 

>> range 예문 1

우리가 앞에서 살펴본 "60점 이상이면 합격"이라는 문장을 출력하는 예제도 range 함수를 사용해서 다음과 같이 바꿀 수 있습니다. 

# marks2.py
marks = [90, 25, 67, 45, 80]

for number in range(len(marks)):
    if marks[number] >= 60:
        print("%d번 학생은 합격입니다." % (number+1))
    else:
        print("%d번 학생은 불합격입니다." % (number+1))

- len 함수는 리스트 안의 요소 개수를 돌려주는 함수입니다. 

- 따라서 len(marks)는 5가 될 것이고 range(len(marks))는 range(5)가 될 것입니다. 

- number 변수에는 차례로 0부터 4까지의 숫자가 대입될 것이고, marks[number]는 차례대로 90, 25, 67, 45, 80 값을 갖게 됩니다. 결과는 marks1.py 예제와 동일하게 나옵니다.

 

>> range 예문 2 (구구단)

for와 range 함수를 사용하면 소스 코드 단 4줄만으로 구구단을 출력할 수 있습니다.

>>> 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

위 예를 보면 for문을 두 번 사용했습니다.

- 1번 for문에서 2부터 9까지의 숫자가 range(2, 10)에 의해 차례로 i에 대입됩니다.

- i가 처음 2일 때 2번 for문을 만나게 됩니다. 2번 for문에서 1부터 9까지의 숫자 (range(1, 10))가 j에 대입되고 그다음 문장 print(i*j)를 수행합니다.

- 따라서 i가 2일 때 2*1, 2*2, 2*3, … 2*9까지 차례로 수행되며 그 값을 출력하게 됩니다. 그다음으로 i가 3일 때 역시 2일 때와 마찬가지로 수행될 것이고 i가 9일 때까지 계속 반복됩니다.

- 그리고 print(i*j, end=" ")와 같이 print 함수에 end 파라미터를 설정한 이유는 해당 결괏값을 출력할 때 다음줄로 넘기지 않고 그 줄에 계속해서 출력하기 위해서입니다.

 

3. while 문

while문은 주어진 조건식이 참일 경우 반복하여 코드를 실행하는 구조입니다. while문은 조건식만으로 반복 범위를 정합니다.

> whil 문의 문법

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

다음은 while문의 기본 구조입니다. while문은 조건문이 참인 동안에 while문에 속한 문장들이 반복해서 수행됩니다.

 

> whil 문의 사용법 1 (기본적인 사용)

it = 0
while (it < 5):
    it += 1
    print(it)
...
1
2
3
4
5

변수 it은 0인 상태에서 while문 안으로 들어가고, 1을 더한 뒤 출력합니다. if의 값이 5가 되면 it<5 조건을 만족하지 못하므로 while문을 탈출하게 됩니다. for문과의 차이가 보이시나요?🤭

- 반복 실행 횟수를 명확히 안다면 for문을, 반복 실행 횟수가 명확하지 않으면 while을 사용하게 됩니다.

 

> whil 문의 사용법 2 (무한루프)

코드를 짜다보면 무한루프를 만들어야하는 경우가 자주 생깁니다. 무한루프 코드를 알아보도록 합시다.

it = 0
while True:
  it += 1
  print(it)

코드를 실행하게 되면 아마 숫자가 계속계속 늘어가게 될 것입니다.

무한루프를 사용했을 때 보통 break문을 활용하여 탈출을 시도하는데, 이는 다음 장인 반복문의 제어에서 자세히 살펴보도록 합시다.

 

> whil 문의 응용

>> 예제 1 (기본적인 사용)

이제 예제를 살펴보도록 합시다. 우선 기본적인 while문을 사용한 코드를 실행해봅시다!

더보기

"열 번 찍어 안 넘어가는 나무 없다"는 속담을 파이썬 프로그램으로 만들어본다면 다음과 같은 코드가 될 것 입니다.

treeHit = 0
while treeHit < 10:
     treeHit = treeHit +1
     print("나무를 %d번 찍었습니다." % treeHit)
     if treeHit == 10:
         print("나무 넘어갑니다.")
...
나무를 1번 찍었습니다.
나무를 2번 찍었습니다.
나무를 3번 찍었습니다.
나무를 4번 찍었습니다.
나무를 5번 찍었습니다.
나무를 6번 찍었습니다.
나무를 7번 찍었습니다.
나무를 8번 찍었습니다.
나무를 9번 찍었습니다.
나무를 10번 찍었습니다.
나무 넘어갑니다.

- 위 예에서 while문의 조건문은 treeHit < 10입니다. 즉 treeHit가 10보다 작은 동안에 while문에 포함된 문장들을 계속 수행합니다. 

- whlie문 안의 문장을 보면 제일 먼저 treeHit = treeHit + 1로 treeHit 값이 계속 1씩 증가합니다. 그리고 나무를 treeHit번만큼 찍었음을 알리는 문장을 출력하고 treeHit가 10이 되면 "나무 넘어갑니다."라는 문장을 출력합니다. 

- 그러고 나면 treeHit < 10조건문이 거짓이 되므로 while문을 빠져나가게 됩니다.

 

4. 반복문의 제어

- break문과 continue문을 사용하여 반복문의 흐름을 제어할 수 있습니다.

- break문은 반복문을 빠져나오는데 사용하며, continue문은 반복문의 현재 루프를 건너뛰고 다음 루프를 실행하는데 사용됩니다. 이러한 제어문을 사용하여 반복문의 실행 흐름을 제어할 수 있습니다.

> break 문, 반복문을 빠져나오기

for i in range(10):
    if i == 5: break  # i가 5가 되면 반복 종료
    print(i)
print("End of Program")  # 반복 종료 후 'End of Program' 출력
...
0
1
2
3
4
End of Program

이처럼 break 명령어를 사용하면 해당 반복해서 빠져나오게 됩니다.

 

> continue 문, 남은 명령 건너뛰고 그 다음 반복으로 넘어가기

continue문은 break문과 달리 특정 조건에서 남은 명령을 건너뛰고 다음 반복문을 수행하게 됩니다.

for i in range(10):
    if i == 5: continue  # i가 5가 되면 i를 출력하지 않음
    print(i)
print("End of Program")  # 반복 종료 후 'End of Program'출력
...
0
1
2
3
4
6
7
8
9
End of Program

5를 건너뛰고 출력된 것을 확인할 수 있습니다.

 

> else 문, 어떤 조건이 완전히 끝났을 때 한번 더 실행하기

해당 반복문이 중간에 종료 없이 완벽히 수행되었는지를 명시적으로 확인하기 위해 필요합니다.

for i in range(10):
    print(i)
else:
    print("End of Program")
...
0
1
2
3
4
5
6
7
8
9
End of Program

이러한 continue, break, else문은 for문 뿐만 아니라 while문에서도 모두 사용할 수 있습니다.