앞서 for
문법을 사용한 반복문에 이어서, 본 수업은 while
문번을 사용한 반복문에 대해서 배우도록 합니다.
for
문법이 주로 리스트나 range()
함수에 의하여 만들어지는 값을 가지고 반복적인 작업을 수행했다면,
while
문법은 앞서 Boolean 문법과 조건문에서 배웠던 True
혹은 False
에 기반한 반복문의 수행을 실현합니다.
while
문법을 이용한 반복문 이해하기¶구구단에서 자주 접했던 다음의 for
문을 이용한 반복작업을 while
문을 이용한 형태로 변형하면 아래와 같습니다.
# for statement
for i in [1,2,3,4,5,6,7,8,9] :
print(i)
# while statement
i = 1
while i <= 9 :
print(i)
i = i + 1
위의 프로그램에서 핵심은 while i <= 9 :
이며, 조건 i <= 9
가 True
라면, :
이후에 종속된 문장(들)을 반복적으로 수행합니다.
만약 반복중에 i <= 9
가 False
가 되면, while
을 통한 반복을 중단하고, while
구문 이후의 문장을 수행하게 됩니다.
위의 프로그램 예제는 간단하지만, 아래의 입력창에 각각을 직접 입력하고 실행하여 보도록 합니다.
for i in [1,2,3,4,5,6,7,8,9] :
print(i)
# while statement
i = 1
while i <= 9 :
print(i)
i = i + 1
1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9
break
문법 이해하기¶조건만 맞으면 반복구문을 이용하여 쉽게 구현할 수 있는 형태가 무한하게 반복하는 무한 반복(infinite loop) 구문입니다.
이런 프로그램을 왜 만들까요?
통상 무한 반복하여 작업을 수행하다가, 특정 조건이 발생하는 경우에 반복문을 멈추거나, 아니면 사용자가 특정 입력을 주는 경우에 반복을 멈추는 경우가 일반적인 활용 예제입니다.
무한 하게 반복하는 프로그램은 어떻게 구현은 매우 쉬운데, while
문의 반복 여부를 검사하는 조건으로 True
주면 됩니다.
아래의 프로그램을 실제 수행하고자 한다면, 한가지 잊지 말아야 할 사항으로서, Python의 무한 반복을 중지하는 강제 키는 ctrl + C
버튼입니다.
추가로 실습을 하고 있는 jupyter notebook
에서는 무한 반복에 빠진 경우, 상단의 메뉴에서 정지
에 해당하는 검은 박스(Run 메뉴의 오른쪽
)를 누르면 됩니다.
i = 0
while True :
i = i + 1
print(i)
그러면 무한 반복이 실현되고 있을때, 반복 상황을 중지하고 싶다면, 어떻게 할까요?
이런 경우를 위한 문법이 break
입니다.
while
반복 문장이 무한하게 실행되는 안에서, 프로그램이 특정 조건을 만족하는 하여 반복을 종료 하고 싶다면, break
구문을 실행하면 됩니다.
위의 프로그램을 수정해서, i
가 10에 도달하는 경우(NEW.1
) 반복을 멈추도록(NEW.2
) 하는 프로그램이 아래와 같습니다.
i = 0
while True :
i = i + 1
print(i)
if(i == 10): #NEW.1
break #NEW.2
위의 프로그램은 무한하게 반복하지 않으므로, 겁먹지 말고 아래의 입력창에서 직접 입력하고 실행하여 봅니다.
i = 0
while True :
i = i + 1
print(i)
if(i == 10): #NEW.1
break #NEW.2
1 2 3 4 5 6 7 8 9 10
continue
문법 이해하기¶반복문을 수행하는 경우에 발생할 수 있는 요구 사항중 또 하나는, "특정 조건에서는 반복적인 작업을 skip 하지만, 반복은 계속 진행"하고 싶은 경우입니다.
이런 경우에 사용하는 문장이 continue
구문입니다.
continue
구문이 반복 구문 안에서 사용되면, 프로그램의 수행은 continue
구문이 포함된 반복문의 시작지점(예를들면 while __ :
지점)으로 이동합니다.
다음은 continue
구문을 앞서의 예제에 추가해서, i
가 짝수인 경우는 반복 구문을 수행하지만,
그렇지 않은 경우는 반복적으로 진행하는 작업을 하지 않고, 다음 반복을 수행하도록 합니다.
i = 0
while True :
i = i + 1
if i % 2 == 0:
print(i)
if(i == 100): #NEW.1
break #NEW.2
else:
continue
위의 프로그램을 아래의 입력창에서 직접 입력하고 실행하여 봅니다.
i = 0
while True :
i = i + 1
if i % 2 == 0:
print(i)
if(i == 100): #NEW.1
break #NEW.2
else:
continue
2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60 62 64 66 68 70 72 74 76 78 80 82 84 86 88 90 92 94 96 98 100
for
반복문에서의 break
와 continue
활용 이해하기¶break
와 continue
는 for
구문을 활용한 반복문에서도 동일하게 사용할 수 있습니다.
아래는 앞서 while
구문을 이용한 무한 반복 문장과 유사한 프로그램을 for
구문을 사용하여 만든 경우입니다.
for i in range(1000000) :
i = i + 1
if i % 2 == 0:
print(i)
if(i == 10): #NEW.1
break #NEW.2
else:
continue
위의 프로그램을 아래의 입력창에서 직접 입력하고 실행하여 봅니다.
for i in range(1000000) :
i = i + 1
if i % 2 == 0:
print(i)
if(i == 10): #NEW.1
break #NEW.2
else:
continue
2 4 6 8 10
다음의 요구 사항에 맞는 프로그램을 개발하여 아래의 입력창을 통해서 실행합니다.
(a) 1에서 9 사이의 숫자(1과 9 포함) 중 하나를 랜덤하게 생성합니다.
(b) 사용자에게 숫자를 추측하여 입력하게 하고, 입력한 수가 생성된 수보다 큰지, 작은지, 같은지를 알립니다.
(c) 사용자가 생성된 수와 같은 수를 입력할 때까지 프로그램은 끝나지 않고 반복됩니다.
참고로 Step.8에서 Python 언어를 활용한 난수(random number) 만들기를 언급하였습니다.
간단히 0과 10사이의 정수를 난수로 발생하려면, random
모듈을 import한 후, intRandom = random.randrange(0, 10)
과 같이 하면 됩니다.
자세한 설명은 < https://docs.python.org/3/library/random.html?highlight=random#module-random >를 참조합니다.
import random
solution = random.randint(0,10)
while True:
user_input = int(input(prompt = '0~10 사이의 정수를 입력하세요 : '))
if solution<user_input:
print("입력하신 숫자보다 작은 숫자 입니다.")
elif solution>user_input:
print("입력하신 숫자보다 큰 숫자 입니다.")
else:
print("정답입니다.")
break
0~10 사이의 정수를 입력하세요 : 5 입력하신 숫자보다 큰 숫자 입니다. 0~10 사이의 정수를 입력하세요 : 6 입력하신 숫자보다 큰 숫자 입니다. 0~10 사이의 정수를 입력하세요 : 7 정답입니다.
다음의 요구 사항에 맞는 프로그램을 개발하여 아래의 입력창을 통해서 실행합니다.
(a) 앞서 숫자 추측 게임 개발하기 (1)
문제와 반대되는 문제입니다.
(b) 이번에는 사용자(당신)가 0에서 100 사이 숫자 중 하나를 골라 머리 속에 기억합니다.
(c) 프로그램이 그 숫자가 무엇인지 맞히도록 합니다.
(d) 프로그램이 숫자를 guess할때마다 사용자는 그 숫자가 자신이 생각한 수 보다 큰지(2), 작은지(0), 혹은 똑같은지(1) 입력합니다.
(e) 프로그램이 숫자를 맞히면 종료됩니다.
a=0
b=100
computer_guess = random.randint(a,b)
while True:
print("computer_guess : ",computer_guess)
user_input = int(input(prompt="당신이 생각한 숫자보다 computer_guess가 크면 2, 작으면 0, 같다면 1을입력하세요."))
if user_input == 1:
print("정답!")
break
elif user_input==0:
a = computer_guess+1
computer_guess = random.randint(a,b)
else:
b = computer_guess-1
computer_guess = random.randint(a,b)
computer_guess : 92 당신이 생각한 숫자보다 computer_guess가 크면 2, 작으면 0, 같다면 1을입력하세요.2 computer_guess : 59 당신이 생각한 숫자보다 computer_guess가 크면 2, 작으면 0, 같다면 1을입력하세요.0 computer_guess : 85 당신이 생각한 숫자보다 computer_guess가 크면 2, 작으면 0, 같다면 1을입력하세요.2 computer_guess : 79 당신이 생각한 숫자보다 computer_guess가 크면 2, 작으면 0, 같다면 1을입력하세요.2 computer_guess : 69 당신이 생각한 숫자보다 computer_guess가 크면 2, 작으면 0, 같다면 1을입력하세요.2 computer_guess : 63 당신이 생각한 숫자보다 computer_guess가 크면 2, 작으면 0, 같다면 1을입력하세요.2 computer_guess : 62 당신이 생각한 숫자보다 computer_guess가 크면 2, 작으면 0, 같다면 1을입력하세요.2 computer_guess : 61 당신이 생각한 숫자보다 computer_guess가 크면 2, 작으면 0, 같다면 1을입력하세요.1 정답!
Step_14_Data_Collection_Types (0) | 2021.06.07 |
---|---|
Step_13_File (0) | 2021.06.04 |
Step_11_Loop_Part_1 (0) | 2021.05.30 |
Step_10_List (0) | 2021.05.28 |
Step_09_Method_and_Class (0) | 2021.05.26 |
댓글 영역