티스토리 뷰

5.7 break와 continue 키워드(Keywords break and continue)

- break와 cotininue 기능은 루프문의 사용성(controls)을 더 높여준다.

- break 키워드를 이용하여 루프를 즉각적으로 종료시킬 수 있다.

 

*break 키워드 예시

1
2
3
4
5
6
7
8
9
10
11
sum = 0
number = 0
 
while number <= 20:
    number += 1
    sum += number
    if sum >= 100:
        break #sum이 100이 되면 while문을 종료하고 다음 명령어로 넘어간다.
 
print("The number is ", number)
print("The sum is ", sum)
cs

 

- while문은 변수 number가 20이 될 때까지 명령문을 반복해야한다.

- 하지만 line 7, 8에 있는 sum >= 100 일 때 break 키워드를 실행하게 되어있다.

- 변수 number가 20이 되지 않더라도, sum이 100 이상이 되면 break 키워드를 만나 루프문을 종료하도록 되어 있다. 

- 만약 line 7,8이 없다면 number는 20까지 반복하고 sum 역시 210이 출력된다.

 

- continue 키워드는 현재 수행중인 반복(iteration)을 종료시킨 후, 루프문 바디(body)의 끝부터 해석한다.

- 즉 continue 키워드는 하나의 반복(iteration)을 끝내고, break문루프문(loop)을 끝내는 키워드이다.

- 아래는 1부터 20까지, 숫자 10과 11을 제외한 합들을 구하는 프로그램이다.

 

* continue 키워드 예시

1
2
3
4
5
6
7
8
9
10
sum = 0
number = 0
 
while number < 20:
    number += 1
    if number == 10 or number == 11:
        continue #숫자 10과 11을 만나면 continue 아래에 있는 명령어를 건너뛰고 body 끝으로...
    sum += number
print("The number is ", number)
print("The sum is ", sum)
cs

 

- line 6,7에서 변수 number가 10, 11이 되었을 때, continue 키워드가 실행된다.

- continue 키워드가 실행되면 현재 진행중인 반복을 중단하고 continue 키워드 이후의 루프문 바디(body)안에 있는 명령어들은 실행되지 않은 채 음 반복을 진행한다.

- 만약 line 6,7이 없다면 sum의 값은 210으로 출력 된다.

 

* 인수 구하는 프로그램

break 키워드 이용

n = eval(input("Enter an integer >= 2: "))

factor = 2

 

while factor <= n:

if n % factor == 0:

break

factor += 1

print("The smallest factor other than 1 for", n, "is", factor)

 

break 키워드 이용 X

n = eval(input("Enter an integer >= 2: "))

found = False

factor = 2

 

while factor <= n and not found:

if n % factor == 0:

found = True

else:

factor += 1

print("The smallest factor other than 1 for", n, "is", factor)

 

- 위 처럼 적당한 break 키워드와 continue 키워드는 코드를 간단하게 만들어 주지만, 무분별한 사용은 너무 많은 종료 포인트를 만들어 내기 때문에 가독성을 떨어트린다.

- 다른 프로그래밍 언어에서는 goto 명령문도 있지만, 에러를 야기시키기 쉬워 잘 사용하지 않는게 관례이다.

- 파이썬break문과 continue문은 일반적인 goto 명령문과 달리 오직 루프문 안에서만 실행이 가능하다.

 

5.8 소수 출력하기(Displaying Prime Numbers) 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
number = eval(input("표시할 최대 소수 입력 : "))
count = 0
 
for i in range(2,number+1):#나누어질 숫자 i
    for k in range(2,number+1):# 나눌 숫자 k
        if(i%k == 0):# i가 k로 나누어 떨어진다면 break
            break
        
    if(i == k):#나눈 수 k가 나누어진 수 i와 같다면(자기 자신이라면) 출력
        print(format(k,"5d"), end = '')
        count += 1
        
    if(count == 10):#10개의 숫자가 출력되면 다음줄로 enter
        print()
        count = 0
cs

 

 

5.9 랜덤 워크(random walk)

 

- 이 예제는 터틀(turtle)이 격자안에서 무작위로 움직이는 프로그램이다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
import turtle as t
from random import randint
 
t.speed(1)
 
#16 x 16 격자 만들기
t.color("gray")
= -80
for y in range(-80,80+1,10): # 10픽셀 간격으로 수평선 그리기
    t.penup()
    t.goto(x,y)
    t.pendown()
    t.forward(160)
 
= 80
t.right(90)
for x in range(-8080 + 110): # 10 픽셀 간격으로 수직선 그리기
    t.penup()
    t.goto(x,y)
    t.pendown()
    t.forward(160)
 
t.pensize(3)
t.color("red")
 
t.penup()
t.goto(0,0# 중앙으로 이동
t.pendown()
 
= y = 0#격자를 그렸던 x,y값 초기화
while abs(x) < 80 and abs(y) < 80 #격자의 끝에 도달하면 이동 종료
    r = randint(0,3# 위, 아래, 좌, 우를 결정할 변수 r
    
    if r == 0#오른쪽으로 한 칸 이동
        x += 10
        t.setheading(0)
        t.forward(10)
        
    elif r == 1#아래쪽으로 한 칸 이동
        y -= 10
        t.setheading(270)
        t.forward(10)
        
    elif r == 2#왼쪽으로 한 칸 이동
        x -= 10
        t.setheading(180)
        t.forward(10)
        
    elif r == 3#위쪽으로 한 칸 이동
        y += 10
        t.setheading(90)
        t.forward(10)
 
t.done()
cs


 

참고 문헌 : Introduction to Programming Using Python / Y.DANIEL LIANG



본 게시물은 개인적인 용도로 작성된 게시물입니다. 이후 포트폴리오로 사용될 정리 자료이니 불펌과 무단도용은 하지 말아주시고 개인 공부 목적으로만 이용해주시기 바랍니다.


교재 영어 원서를 직접 번역하여 정리한 게시물이므로 일부 오타, 의역이 존재할 수 있습니다. 틀린 부분이 있다면 댓글로 알려주시면 감사하겠습니다. 

 

댓글