파이썬 코칭스터디 1기 - 모두를 위한 파이썬(PY4E) 5강 (반복문)

태온·2021년 8월 2일
0
post-thumbnail

5. 반복문

컴퓨터는 사람보다 비슷한 작업을 반복하는 일을 더 잘한다. 반복이 매우 흔한 일이어서, 파이썬에서 반복 작업을 쉽게 하도록 몇 가지 반복문 기능을 제공한다.

➰1. while문 (indefinite loop;불확정 루프)

n = 5

while n > 0: # n이 0보다 크면 반복
    print(n)
    n = n - 1 

print('Blastoff!')
print(n)

# 결과
5
4
3
2
1
Blassoff!
0
  • while문의 조건이 참 값을 가지는 경우 while문 아래 들여쓰기 되있는 문장들은 조건이 거짓이 될 때까지 코드를 반복해서 작동한다.

n이 0보다 크면 while문은 계속 실행한다. n=5이기 때문에 while문의 조건에 만족하므로 반복문을 실행한다. n=0이 되면 while문 조건에 만족하지 않으므로 반복문을 빠져나오게 된다.

while 다음 : (콜론)을 써주는 것을 잊지말자!

- 루프(Loop) 제어하기 - break

while True:
    line = input('> ') 
    if line == 'done': # 만약 line이 'done'이면
        break # 반복문 빠져나오기
    print(line)
print('Done!')

# 결과
# > hello there로 입력
# hello there로 출력됨
# > finished로 입력
# finished로 출력됨
# > done로 입력
# Done!으로 출력됨
  • 반복문을 사용하다가 어떤 조건에서는 반복문을 종료하고 싶을 때가 있다. 그 경우 break문을 사용하면 된다.
  • 루프가 break를 만나게되면 루프는 실행이 종료되고 while문이 끝난 뒤의 코드를 찾아 실행한다.

- continue

  • 때때로 루프를 반복하는 중간에서 반복을 끝내고, 다음 반복으로 즉시 점프하고 싶을 때가 있다. 현재 반복 루프 전체를 끝내지 않고 다음 반복으로 건너뛰기 위해 continue 문을 사용한다.
while True:
    line = input('> ')
    if line[0] == '#' : # 입력단어 첫 번째가 #이라면 
        continue # 다음 코드를 실행 하지않고 loop 시작점으로 감
    if line == 'done' :
        break
    print(line)
print('Done!')

# 결과
# > hello there 입력
# hello there로 출력
# # don't print this 
# > print this! 입력
# print this!로 출력
# > done 입력
# Done!
  • 위의 코드에서 '#'을 입력하게 되면 continue를 만나게 되고 continue는 loop의 시작점으로 다시 돌아가서 loop를 실행하게 됩니다.(아무것도 출력하지 않음)
  • done을 입력하게 되면 break를 만나게 되고 break는 loop끝나는 점 바로 다음에 오는 코드를 실행하게 됩니다. (Done! 출력)

while문은 조건문이 거짓이 되기 전까지 계속 실행 되기 때문에 "불확정 루프" 라고 부른다.
코드의 길이가 길어지고 종료 조건이 복잡해지면 코드가 정말 종료할 수 있는지 불분명 해진다. while문을 이용해 많은 것을 할 수 있지만 대부분의 반복문을 만들기 위해 확정 루프라고 불리는 것을 사용한다.

➿ 2. for문 (definite loop; 확정 루프)

  • 단어의 리스트, 파일의 줄, 숫자 리스트 같은 사물의 집합에 대해 루프 반복
  • 파이썬 for문을 이용해서 집합의 각 항목에 대해서 반복문을 실행하는 루프를 만들 수 있음
  • 확정된 항목의 집합에 대해서 실행되므로 "확정 루프"라고 함.
  • 확정 루프는 집합의 원소를 통해 반복

  • 숫자 리스트
for i in [5, 4, 3, 2, 1] :
    print(i)
print('Blastoff!')

# 결과
5
4
3
2
1
Blastoff!

포함 연산자인 in을 사용하여 반복변수 i가 리스트 [5,4,3,2,1]을 순서대로 인덱싱한다. 즉, 5 4 3 2 1 이 출력이 된다.

  • 문자열 리스트
friends = ['Connect', 'Korea', 'NHN']
for friend in friends:
    print('Happy New Year!! ', friend)
print('Done!')

# 결과
Happy New Year!!  Connect
Happy New Year!!  Korea
Happy New Year!!  NHN
Done!

문자열에서도 마찬가지로 in 을 사용하여 friend라는 반복변수를 friends 리스트안을 순서대로 인덱싱한다.


👓 반복문 응용

  • 가장 큰 값 구하기
largest_so_far = -1 # 작은 수로 -1로 선언
print('Before', largest_so_far) # 최초의 값과 루프 이후의 값을 비교하기 위해 print 함수로 현재의 값을 확인
numbers = [9, 41, 12, 3, 74, 15] # numbers라는 int를 원소로 가지는 list를 선언
for the_num in numbers
    if the_num > largest_so_far : # 현재의 값(the_num)이 현재 가장 큰 값이 할당 되어 있는 largest_so_far보다 크다면
        largest_so_far = the_num # largest_so_far의 값을 the_num으로 바꿔줌
    print('largest_so_far: ', largest_so_far, 'current number: ',the_num)

print('After', largest_so_far)

Before -1
largest_so_far:  9 current number:  9
largest_so_far:  41 current number:  41
largest_so_far:  41 current number:  12
largest_so_far:  41 current number:  3
largest_so_far:  74 current number:  74
largest_so_far:  74 current number:  15
After 74

1. 루프를 사용하여 개수 세기

  • 리스트에 몇 개의 원소가 있는지를 알고자 할 때
zork = 0
print('Before', zork)
numbers = [9, 41, 12, 3, 74, 15]
for thing in numbers :
    zork = zork + 1
    print(zork, thing)
print('After', zork)

# 결과
Before 0
1 9
2 41
3 12
4 3
5 74
6 15After 6

2. 루프를 사용하여 합계 구하기

  • 각 원소를 누적해서 더해 총합을 알아 낼 수 있다.
zork = 0
print('Before', zork)
numbers = [9, 41, 12, 3, 74, 15] 
for thing in numbers :
    zork = zork + thing
    print(zork, thing)
print('After', zork)

# 결과
Before 0
9 9
50 41
62 12
65 3
139 74
154 15
After 154

3. 루프를 사용하여 평균 구하기

  • 원소의 수와 총합을 활용하여 평균을 구할 수 있다.
count = 0 # 평균을 전체 원소의 수로 나누기 위해 total number를 확인합니다.
sum = 0
print('Before', count, sum)
numbers = [9, 41, 12, 3, 74, 15] 
for value in numbers :
    count = count + 1
    sum = sum + value
    print(count, sum, value)
print('After', count, sum, sum/count)


# 결과
Before 0 0
1 9 9
2 50 41
3 62 12
4 65 3
5 139 74
6 154 15
After 6 154 25.666666666666668

4. 루프를 사용하여 필터링 하기

  • if문을 사용하여 특정 값보다 큰 수를 print를 이용해 확인 할 수 있다.
print('Before')
numbers = [9, 41, 12, 3, 74, 15]
for value in numbers :
    if value > 20:
        print('Large number', value)
print('After')

# 결과
Before
Large number 41
Large number 74
After

5. 부울값을 사용하여 특정 값을 검색하기

  • 부울 변수를 사용하여 list 안에 특정 값을 찾을 수 있다.
  • 부울 변수는 True(참) 또는 False(거짓)의 값을 가진다.
found = False
print('Before', found)
numbers = [9, 41, 12, 3, 74, 15]
for value in numbers :
    if value == 3 :
        found = True
        print(found, value)
        break
print('After', found)

# 결과
Before False
True 3
After True

6. 가장 작은 수를 찾는 코드 완성하기

  • 가장 작은 수를 찾는 루프를 완성하기 위해서는 우리는 None 자료형에 대해서 알아야 한다. None은 값이 없다는 것이다. 하나의 빈 상자에 이 상자는 비어 있다라고 명시적으로 표시하고 있다고 생각하면 된다.
  • 또한, isis not의 연산자는 자료형과 값이 동일할 때 True를 반환한다. 예를 들어, 0 == 0.0은 True이지만 0 is 0.0은 False입니다. 값은 동일하지만 자료형이 전자는 int이고 후자는 float 이기 때문이다.
smallest = None
print('Before')
numbers = [9, 41, 12, 3, 74, 15]
for value in numbers :
    if smallest is None :
        smallest = value
    elif value < smallest :
        smallest = value
    print(smallest, value)
print('After', smallest)

# 결과
Before
9 9
9 41
9 12
3 3
3 74
3 15
After 3

📗 참고

모두를 위한 파이썬 (PY4E)

profile
코딩도시락(배워서 남 주자)

0개의 댓글