본문 바로가기
Programming/Python

10. 반복문과 while 반복문

by IT learning 2021. 3. 14.
728x90

반복문과 while 반복문에 대해 공부해보겠다.

 

범위

리스트, 딕셔너리 외에 for 반복문과 함께 많이 사용되는 범위(Range) 자료형의 사용법을 알아보자.

 

첫째, 매개변수에 숫자를 한 개 넣는 방법.

range(5)

0 부터 A-1까지 정수로 범위를 만든다.

 

둘째, 매개변수에 숫자를 두 개 넣는 방법

range(0,5)

첫번째 매개변수의 범위부터 두번째 매개 변수 - 1 까지의 범위를 만든다.

 

셋째, 매개변수에 숫자 세 개 넣는 방법

range(0,5,1)

0 부터 5 - 1 까지 1개씩 올라간다. 라는 의미

 

위 코드들의 특징 중 하나는 , 마지막 숫자인 5가 범위에 포함되지 않는다는 것이다.

C++ 에서 배우는 배열의 경우 배열 인덱스의 마지막 범위는 마지막 숫자 - 1 이다. 이와 같이 매개변수로 들어가 있는 숫자에서 하나를 뺀 숫자가 마지막 범위의 숫자임을 기억하자.

 

범위를 만들때 수식도 사용이 가능하다.

range(0, 10 + 1)

n = 10
range(0, n // 2)

위와 같이 연산자 실행이 가능하다.

 

하지만, range() 함수의 매개변수로는 반드시 정수를 입력해야하기 때문에 기존 나눗셈으로는 연산자 실행이 불가하다.

따라서, int() 함수를 사용하여 정수형태로 바꾸거나, 정수 나누기 연산자를 사용하는 것이다.

 

for 반복문 : 범위와 함께 사용하기

# for 반복문과 범위
# for 반복문과 범위를 함께 조합해서 사용합니다
for i in range(5) : # range(5) 라는 뜻은 0 부터 5 - 1 까지의 범위를 지정한다라는 뜻
    print(str(i) + "= 반복 변수")
print()

for i in range(5, 10) : # range(5,10) 라는 뜻은 5 부터 10 -1 까지의 범위를 지정한다라는 뜻
    print(str(i) + "= 반복 변수")
print()

for i in range(0,10,3) : # range(0,10,3) 라는 뜻은 0부터 10 - 1 까지 3 씩 떨어져서 나오는 범위를 지정한다라는 뜻
    print(str(i) + "= 반복 변수")
print()

위 코드에서도 나와 있듯이, for 반복문과 범위를 함께 조합하여 사용한다.

첫번째 코드는 0 부터 5 - 1까지의 범위를 i 에게 넘겨 수행한다. 라는 뜻으로 풀이가 가능하다.

두번째 코드는 5 부터 10 - 1까지의 범위를 i 에게 넘겨 수행한다. 라는 뜻으로 풀이가 가능하다.

세번째 코드는 0 부터 10 - 1 까지 3씩 떨어져서 나오는 범위를 i에게 넘겨 수행한다. 라는 뜻으로 풀이가 가능하다.

위 코드의 실행결과이다.

for 반복문 : 리스트와 범위 조합하기

# 리스트와 범위를 조합해서 사용하기

#리스트 선언
list_a = [273, 32,103, 57, 52]

# 리스트에 반복문을 적용합니다
for i in range(len(list_a)) :
    print("{} 번째 반복 : {}".format(i, list_a[i]))
    
    # 가장 기본적인 방법과 형태이다

위 코드는 for반복문의 반복이 얼마나 진행됐는지 알아보기 위한 코드이다.

리스트를 출력하는 반복문에, 현재 몇번째 반복을 진행하고 있는지를 알려주는 코드 또한 삽입했다.

위 코드의 실행결과이다.

아까 말했듯이 리스트의 첫 인덱스는 0부터 시작한다. 유의하길 바란다.

 

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

# 반대로 반복하기(1)
for i in range(4,-1, -1) :
    print("현재 반복 변수 : {}".format(i))
    
# range() 매개변수 3개 방법

이번에는 for 반복문을 반대로 출력해보는 코드를 작성해보았다.

range() 함수에 매개변수를 추가할때 저렇게 마지막 매개변수에 -1 과 같은 수를 넣어주면 반대로 반복을 진행한다.

위 코드와 같은 의미로 현재 어떤 수가 반복 됐는지 출력해주는 코드 또한 삽입했다.

위 코드의 실행결과이다.

실행결과도 반대로 반복한 결과가 나오게 됐다. 거의 리버스 투블럭 수준이다.

 

반대로 반복하는 방법이 또 한가지 존재한다.

# 반대로 반복하기(2) 
for i in reversed(range(5)) :
    print("현재 반복 변수 : {}".format(i))

# reversed() 사용하기

바로 reversed() 함수를 이용하는 것이다. 

위 함수는 자신이 반대로 사용할 매개변수 하나를 넣고 돌리면 반대로 반복하는 함수이다.

 

while 반복문

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

(C++이나 C나 모든 언어에 for와 while은 존재한다)

# while 반복문을 사용합니다.
while True :
    # "."을 출력합니다
    # 기본적으로 end가 '\n'이라 줄바꿈이 일어나는데
    # 빈 문자열 ""로 바꿔서 줄바꿈이 일어나지 않게 합니다.
    print(".", end="")

while 반복문의 사용법은 위 코드와 같다.

위 코드는 while이 돌아가는 조건을 True로 해놓았기 때문에 별도의 break 문이 없으니 무한 루프를 돌게 되는 코드이다.

무한으로 .을 찍게 되는데, 기존의 print() 함수는 출력이 끝나면 한줄을 넘기게 되는데,

넘김을 막기 위해 매개변수로 end = "" 를 추가했다.

C++ 에서 cout << "Hello" << ' ' 와 같은 느낌인듯 하다.

 

따로 출력된 모습을 보여주진 않겠다.

무한루프 싫어한다.

 

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

다음은 while 반복문을 for 반복문처럼 사용할 수 있다.

# while 반복문을 for 반복문처럼 사용하기

# 반복 변수를 기반으로 반복하기
i = 0
while i < 10 :
    print("{}번째 반복입니다.".format(i))
    i += 1

위와 같은 코드로 for 반복문 처럼 사용이 가능하다.

while 문에 i < 10 과 같은 조건을 걸어주면 조건이 충족됐을때는 True가 동작되고, 불충족 할경우에는 False 를 return 하게 된다.

따라서 for 과 같은 역할을 수행한다.

위 코드의 실행결과이다.

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

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

# 해당하는 값 모두 제거하기
# 변수를 선언합니다
list_test = [1,2,1,2]
value = 2

while value in list_test :
    list_test.remove(value)
    
print(list_test)

위 코드는 리스트를 생성하고, value라는 변수를 선언하여 

while이 돌때 value가 리스트에 있을 경우 value 와 같은 값을 제거하는 코드이다.

다 제거 될때 까지 돌려지는 코드이다.

 

따라서 위 코드는 리스트에 2가 존재할 경우 모든 2를 제거할 때까지 계속 돌아가고, 출력된다.

위 코드의 출력결과이다.

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

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

# 5초 동안 반복하기
# 시간과 관련된 기능을 가져옵니다.
import time

number = 0

# 5초 동안 반복됩니다.
target_tick = time.time() + 5
while time.time() < target_tick :
    number += 1
    
# 출력합니다.
print("5초동안 {}번 반복했습니다.".format(number))

위 코드는 시간을 이용하여 반복하는 코드이다.

 

먼저 import로 시간과 관련된 기능을 가져오고,

number 라는 변수를 선언했다.

 

여기서 사용되는 개념은 유닉스 타임(Uinx Time)이다.

유닉스 타임이란, 세계 표준시로, 1970년 1월1일 0시 0분 0초를 기준으로 몇 초가 지났는지를 정수로 나타낸 것을 의미한다.

 

파이썬에서 유닉스 타임을 구하기 위해서는 

time.time()

을 사용하면 지난 시간을 확인할 수 있다.

 

따라서, 유닉스 타임을 이용하여 + 5 를 추가해 5초를 target_tick에 선언해놓고,

 

 while 문에 현재부터 5초 뒤까지 돌아가는 반복문을 작성해놓고 돌리면 5초뒤에 number가 카운트 된 숫자가 출력된다.

위 코드의 실행결과이다.

위 코드가 실행될때, 5초 후에 출력이 되니, 약 5초간 아무것도 뜨지 않을것이다.

이후에 카운트가 완료된 number 값이 출력이 된다.

time 관련된 개발을 할 때 유용할듯 하다.

 

while 반복문 : break 키워드 / continue 키워드

# while 반복문 :break 키워드/ continue 키워드

# break 키워드

# 변수를 선언합니다.
i = 0

while True :
    # 몇 번째 반복인지 출력합니다.
    print("{}번째 반복문입니다.".format(i))
    i = i + 1
    input_next = input("> 종료하시겠습니까?(y/n): ")
    if input_next in ["Y", "y"] :
        print("반복을 종료합니다.")
        break

while 문에는 반복문 내부를 벗어나게 해주는 break키워드가 존재한다.

 

코드는 몇번째 반복문인지를 출력하는 프로그램이다. 

출력이 된 후 input을 넣어 종료를 할 지 물어본다.

종료를 안 할 경우, 다시 i++이 되어 몇번째 반복문인지 나오게 된다.

위 코드에서 사용되는 break는 input이 실행될때 만일 y를 input 했을 경우 종료를 원하는 것이니, break를 이용하여 while 문을 종료시키는 것이다.

위 코드의 실행결과이다.

while의 bool이 True였단걸 살펴보면 y를 만나기 전까지는 무한 루프를 돈다.

저렇게 n을 입력할 경우 다시 while 문이 돌아 i++이 된 결과를 나타내게 되고, 마지막 y를 입력했을 경우, 종료하는 모습을 볼 수 있다.

 

# continue 키워드

# 변수를 선언합니다.
numbers = [5,15,6,20,7,25]

# 반복을 돌립니다.
for number in numbers :
    # number가 10 보다 작으면 다음 반복으로 넘어갑니다.
    if number < 10 :
        continue
        
    print(number)

continue키워드는 현재 반복을 생략하고, 다음 반복으로 넘어갈때 사용하는 키워드이다.

이게 무슨 말이냐면,

위 코드에서 사용하는 continue는 for 반복문이 돌아갈때 만일 number가 10을 넘지 못한다면,

아래에 있는 코드들을 실행시키지 않은 채로 다시 첫 for 문으로 number를 증가 시키고 돌아간다.

대충 코드가 흘러가는걸 적어보면 그렇다.

위 코드의 실행결과이다.

결과를 보면 이해하기가 쉬울 것이다.

변수는 다양하게 적어놨지만, 모두 10 이상의 숫자들만 출력이 된것을 확인할 수 있다.

이는 아까 말했던 continue가 실행되어 출력 자체도 안시키고 바로 다음 숫자로 넘어갔기 때문이다.

 

정리

범위
는 정수의 범위를 나타내는 값이다. range() 함수로 생성한다.
while 반복문은 조건식을 기반으로 특정 코드를 반복해서 실행할 때 사용하는 구문이다.
break 키워드는 반복문을 벗어날 때 사용하는 구문이다.
continue 키워드는 반복문의 현재 반복을 생략할 때 사용하는 구문이다.
728x90

'Programming > Python' 카테고리의 다른 글

12. 함수 만들기  (0) 2021.03.18
11. 문자열, 리스트, 딕셔너리와 관련된 기본 함수  (0) 2021.03.16
9. 딕셔너리와 반복문  (0) 2021.03.12
8. 리스트와 반복문  (0) 2021.03.12
7. 조건문  (0) 2021.03.10

댓글

IT_learning's Commit