본문 바로가기

Python Basic/혼공파

[혼공파] Chapter 04 반복문 ③for 반복문과 while 반복문


  • 는 개념 정리
  •  개인적으로 새롭게 알게 된 점 

3. 반복문과 While 반복문

범위 자료형

  1. 매개변수에 숫자를 한 개 넣는 방법
    • range(A) : 0부터 A-1 까지의 정수로 범위를 만듦
  2. 매개변수에 숫자를 두 개 넣는 방법
    • range(A,B) : A부터 B-1까지의 정수로 범위를 만듦
  3. 매개변수에 숫자를 세 개 넣는 방법
    • range(A,B,C) : A부터 B-1까지의 정수로 범위를 만드는데, 앞뒤의 숫자가 C만큼의 차이를 가짐. 
  • 파이썬의 모든 기능들은 범위를 지정할 때 뒤에 입력한 숫자를 포함하지 않음. 
  • 범위를 만들 때 매개변수 내부에 수식을 사용하는 경우도 있음. 
    • 마지막 숫자를 포함해야 한다는 것을 강조하고 싶을 때.
      • e.g. 10을 반드시 포함해야 한다는 것을 강조하고 싶을 때 다음과 같이 작성하기도 함. 
a = range(0, 10 + 1)

print(list(a))

 

  • 수식에 나누기 연산자를 사용한 경우
    • range() 함수의 매개변수로는 반드시 정수를 입력해야 하기 때문에 TypeError 발생. 
      • int() 함수 등으로 실수를 정수로 바꾸는 방법도 있으며, 정수 나누기 연산자를 많이 사용함. 
n = 10
a = range(0, n/2) #매개변수로 나눗셈을 사용한 경우 오류 발생

a = range(0, int(n/2)) #실수를 정수로 바꾸는 방법도 사용 가능하지만, 
a = range(0, n//2) # 정수 나누기 연산자를 많이 사용함. 

type(n/2) 는 float

for 반복문

반복문의 기본 형태: 

for 반복자 in 반복할 수 있는 것:
    코드

* 반복할 수 있는 것: 문자열, 리스트, 딕셔너리, 범위 등이 있음 !!* 

 

1) 문자열에서의 for 반복문

CODE

# 리스트에 반복문 적용
for character in "안녕하세요":
	print(character)

OUTPUT

안
녕
하
세
요

글자 하나하나에 반복이 적용됨. 

2) 리스트에서의 for 반복문

CODE

# 리스트 선언
array = [281, 193, 4, 1101, 109]

# 리스트에 반복문 적용
for element in array:
	print(element)

OUTPUT

281
193
4
1101
109

리스트에 있는 요소 하나하나가 element 라는 변수에 들어가며, 차례차례 반복하게 됨. 

3) 딕셔너리에서의 for 반복문

* 딕셔너리 내부에 있는 가 변수에 들어감. *

for 키 변수 in 딕셔너리:
    코드

CODE

# 리스트 선언
dictionary = {
    "name": "7D 건조 망고",
    "type": "당절임",
    "ingredient": ["망고", "설탕", "메타중아황산나트륨", "치자황색소"],
    "origin": "필리핀"
    }
    
# for 반복문 사용
for key in dictionary:
	print(key, ":", dictionary[key])
    

OUTPUT

name : 7D 건조 망고
type : 당절임
ingredient : ['망고', '설탕', '메타중아황산나트륨', '치자황색소']
origin : 필리핀

 

4) 범위에서의 for 반복문

for 숫자 변수 in 범위:      
    코드

CODE

for i in range(5):
	print(str(i))
print()

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

OUTPUT

0
1
2
3
4

5
6
7
8
8

0
3
6
9

for 반복문: 반대로 반복하기

큰 숫자에서 작은 숫자로 반복문을 적용해야 하는 경우: 역반복문

크게 2가지 방법이 있음. 

  1. range() 함수의 매개변수를 세 개 사용하는 방법
  2. reversed() 함수를 사용하는 방법

1. range() 함수의 매개변수를 세 개 사용하는 방법

CODE

# 역반복문
for i in range(4, 0-1, -1): #-1로 사용해도 되는데, '0'을 꼭 포함시켜야 함을 강조하기 위해서 '0-1'로 사용함. 
    print("현재 반복 변수: {}".format(i))

2. reversed() 함수를 사용하는 방법

  • reversed() 함수는 주의 사항이 굉장히 많은 함수
    • +추가) 다음 장에서 다룸.

CODE

# 역반복문
for i in reversed(range(5)):
    print("현재 반복 변수: {}".format(i))

OUTPUT

현재 반복 변수: 4
현재 반복 변수: 3
현재 반복 변수: 2
현재 반복 변수: 1
현재 반복 변수: 0

While 반복문

for 반복문: 리스트 또는 딕셔너리 내부의 요소를 모두 순회하는 경우, 즉, 특정 횟수만큼 반복하는 경우에 사용

* 파이썬에는 for 반복문 이외에도 범용적으로 사용할 수 있는 while 반복문이 있음. 

가장 중요한 키워드는 조건

조건을 활용해서 반복을 사용해야 한다면, for 반복문 보다 while 반복문을 사용하는 편이 좋음 * 

 

while 불 표현식:
    문장
  • if 문과 굉장히 비슷한 형식인데, <불 표현식> 이 참인 동안 문장을 계속 반복함. 

while 반복문: for 반복문처럼 사용하기

  • for 반복문을 설명할 때 언급했던 것 이외에는 모두 while 반복문을 사용함.
    • for 반복문: 문자열, 리스트, 딕셔너리, 범위 
    • 대표적으로 무한 반복 때 사용, for 반복문으로는 무한 반복을 구현 할 수 없음. 
  • while 반복문에서 가장 중요한 키워드는 '조건'. 조건을 활용해서 반복을 사용해야 한다면, while 반복문 사용. 

1) while 반복문: 상태를 기반으로 반복하기

4-1. 리스트에서 살펴본 remove() 함수는 리스트 내부에서 해당하는 값을 하나만 제거할 수 있었음. 

while 반복문을 활용하면 여러 개를 제거할 수 있음. 

  • while 반복문의 조건을 '리스트 내부에 요소가 있는 동안'으로 지정. 

CODE

list_test = [1,2,3,2]
value = 2

#list_test 내부에 value가 있다면 반복
while value in list_test:
    list_test.remove(value)
    
print()

OUTPUT

[1,3]

2) while 반복문: 시간을 기반으로 반복하기

  • 유닉스 타임: 세계 표준시 (UTC)로, 1970년 1월 1일 0시 0분 0초를 기준으로 몇 초가 지났는지를 정수로 나타낸 것. 
  • 유닉스 타임과 while 반복문을 조합하면 특정 시간 동안 프로그램을 정지시킬 수 있음. 

CODE

import time

number = 0

# 5초 동안 반복함. 
target_tick = time.time() + 5
while time.time() < target_tick:
    number += 1
    
print("5초 동안 {}번 반복했음.".format(number))

OUTPUT

5초 동안 14223967번 반복했음.

break 키워드 / continue 키워드

반복문 내부에서만 사용할 수 있는 break, continue 키워드.

  • break: 일반적으로 무한 반복문을 만들고, 내부의 반복을 벗어날 때 많이 사용. 
  • continue: 현재 반복을 생략하고, 다음 반복으로 넘어갈 때 사용하는 키워드

CODE

numbers = [5, 15, 6, 20, 7, 25]

for number in numbers:
    if number < 10:
        continue
    
    print(number)

OUTPUT

15
20
25

 

* if else 구문을 사용해도 됨. 다만, continue 키워드를 사용하면, 이후 처리의 들여쓰기를 하나 줄일 수 있음. 

CODE

for number in numbers:
    if number >= 10:
        #문장
        #문장