python 2

본 토픽은 현재 준비중입니다. 공동공부에 참여하시면 완성 되었을 때 알려드립니다.

반복문

반복문

반복문은 프로그래밍에서 가장 중요한 요소 중의 하나다. 인간은 반복적인 작업을 잘하지 못한다. 실수하고, 지루해한다. 컴퓨터는 이런 반복적인 작업을 대행하기 위해서 만들어진 기계다. 반복문은 컴퓨터에게 반복적인 작업을 지시하는 방법이다.

반복문의 문법

반복문의 문법은 몇가지가 있다. 각각의 구문은 서로 대체 가능하기 때문에 상황과 취향에 따라서 선택해서 사용하면 된다.

while

형식은 아래와 같다.

while 조건
    코드
    코드

아래의 예제를 실행해보자.

다음 예제는 무한반복을 발생시킨다. 저장되지 않은 작업이 있다면 모두 정리한 후에 이 명령을 실행하자. 콘솔에서 실행할 경우 Ctrl+C 나 Cmd+. 단축키를 이용해서 무한반복을 중지 할 수 있다.

while True:
    print 'coding everybody'

이번에는 true를 false로 바꾼 아래의 예제를 실행해보자. 아무런 결과도 출력하지 않을 것이다.

while False:
    print 'coding everybody'

while 문은 while 과 콜론(:) 사이에 위치하는 조건이 참(True)이면 다음 행과 같은 깊이의 들여쓰기를 하고 있는 구문의 구간을 반복적으로 실행한다. 조건이 False면 반복문이 실행되지 않는다. 여기서 True와 False는 종료조건이 되는데, 반복문에서 종료조건을 잘못 지정하면 무한반복이 되거나, 반복문이 실행되지 않는다.

이번 수업의 초입에서 살펴본 반복문의 문법을 해석해보자. 아래의 반복문은 i의 값을 1씩 순차적으로 증가시킴으로서 반복의 지속 여부를 결정하고 있다. 주석으로 첨부한 설명을 주의깊게 살펴보자.

# i의 값으로 0을 할당한다. 
i = 0
# 종료조건으로 i의 값이 5보다 작다면 True, 같거나 크다면 False
while i < 10:
    print 'coding everybody'
    # 반복문이 실행될 때마다 i의 값을 1씩 증가시킨다. 그 결과 i의 값이 10이 되면 종료조건이 False가 되면서 반복문이 종료된다.
    i += 1

for

형식은 아래와 같다.

for 변수 in 리스트(또는 터플, 문자열):
    코드

다음 예제를 보자.

for i in range(0,10):
    print 'coding everybody' + str(i)

range(0,10)는 변수 i의 값을 0부터 9까지 순차적으로 할당한다. (range가 무엇인가는 곧 배우게 된다) i에 숫자가 할당 될 때 for 문의 다음 행과 같은 들여쓰기를 사용하고 있는 구문들의 구간이 실행된다. 이 때 변수i의 값이 1씩 증가하면서 전달된다. str(i)는 변수 i에 담겨진 숫자를 문자로 바꿔주는 역할을 한다. 문자와 숫자는 직접적으로 더 할 수 없기 때문에 숫자를 문자로 변경한 것이다.

반복문이 없다면

coding everybody를 10번 반복해서 출력하고 싶다고 한다면 아래와 같이 코드를 작성하면 된다.

print 'coding everybody'
print 'coding everybody'
print 'coding everybody'
print 'coding everybody'
print 'coding everybody'
print 'coding everybody'
print 'coding everybody'
print 'coding everybody'
print 'coding everybody'
print 'coding everybody'

이 정도의 작업은 복사&붙여넣기를 이용해서도 할만하다. 하지만 좀 더 큰 규모의 데이터를 다뤄야 한다면 반복문의 효용이 부각되기 시작한다. 예를들어서 'coding everybody'를 1천번 출력해야 한다면 위의 예제와 아래 예제의 코드 분량에 큰 차이가 생길 것이다.

i = 0
while i < 10:
    print 'coding everybody'
    i += 1

만약 반복문 없이 coding everybody 뒤에 숫자를 1부터 10까지 붙이고 싶다면 아래와 같이 코드를 작성해야 할 것이다. 행마다 숫자를 바꿔야 하기 때문에 Copy & Paste도 할 수 없다.

print 'coding everybody 1'
print 'coding everybody 2'
#중략
print 'coding everybody 9'
print 'coding everybody 10'

반복문에서는 아래와 같이 하면 된다.

i = 0
while i < 10:
    print 'coding everybody ' + str(i + 1)
    i += 1

coding everybody 뒤에 붙는 숫자를 2의 배수하고 싶다면 어떻게 해야할까? 반복문이 없다면 한줄 한줄 수정해야 할 것이다. 반복문에서는 내용을 조금만 변경하면 된다.

i = 0
while i < 10:
    print 'coding everybody ' + str((i + 1) * 2)
    i += 1

반복문의 제어

break

반복작업을 중간에 중단시키고 싶다면 어떻게 해야할까?  break를 사용하면 된다. 아래의 예제는 위에서 살펴본 예제를 일부 변형한 것이다.

for i in range(0,10):
    if i == 5:
        break
    print 'coding everybody ' + str(i)

위 코드의 결과는 아래와 같다. 종료조건에 따르면 10행이 출력돼야 하는데 5행만 출력되었다. 2행의 if i == 5 에 의해서 i의 값이 5일 때 break 문이 실행되면서 반복문이 완전히 종료된 것이다. 반복문 안에서 break가 실행되면 반복문을 즉시 종료시키는 것이다.

coding everybody 0
coding everybody 1
coding everybody 2
coding everybody 3
coding everybody 4

continue

그럼 실행을 즉시 중단 하면서 반복은 지속돼게 하려면 어떻게 해야 할까? 설명이 어렵다면 예제를 보자. 이전 예제의 break를 continue로 변경했을 뿐이지만 결과는 전혀 다르다.

for i in range(0,10):
    if i == 5:
        continue
    print 'coding everybody ' + str(i)

결과는 아래와 같다. 숫자 5가 보이지 않는다. 왜 그럴까? i의 값이 5가 되었을 때 실행이 중단 됐기 때문에 continue 이후의 구문이 실행되지 않은 것이다. 하지만 반복문은 중단되지 않았기 때문에 나머지 결과가 출력된 것이다.

coding everybody 0
coding everybody 1
coding everybody 2
coding everybody 3
coding everybody 4
coding everybody 6
coding everybody 7
coding everybody 8
coding everybody 9

반복문의 중첩

반복문 안에는 다시 반복문이 나타날 수 있다. 다음 예제를 보자. 다음 예제는 00, 01, 02....99 까지를 화면에 출력한다.

# 0부터 9까지 변수 i에 순차적으로 값을 할당
for i in range(0,10):
    # 0부터 9까지의 변수를 j의 값에 순차적으로 할당
	for j in range(0,10):
		# i와 j의 값을 더한 후에 출력
		print str(i) + str(j)

단순히 글자를 반복적으로 출력하기 위해서 반복문을 사용한다고 생각 할 수도 있다. 하지만 반복문의 진가는 배열과 결합했을 때 나타난다. 다음 토픽인 배열에서 반복문의 진가를 살펴보자.

 

 

댓글

댓글 본문
  1. 신나리
    전공이 cs가 아님에도 졸업시 한 클래스는 무조건 들어야된다해서 듣는 미국유학생입니다.
    python에 대한 기초지식이 전혀없고 이제 학기 두번쨰주를 맞아, string이 머고 literal이 머고 이런거 배우고 있습니다 근데 과제가 터무니없이 어려워보여 질문합니다
    you have seen that the math library contains a function that computes the square root of numbers. In this exercise, you are to write your own algorithm for computing square roots. One way to solve this problem is to use a guess-and check approach. You first guess what the square root might be and then see how close your guess is. You can use this information to make another guess and continue guessing until you have found the square root (or a close approximation to it) . One particularly good way of making guesses is to use Newton's method. Suppose x is the number we want the root of and guess is the current guessed answer .The guess can be improved by using (guess + x/guess)/2 as the next guess. Write a program that implements Newton's method. The program should prompt the user for the value to find the square root of (x) and the number of times to improve the guess. Starting with a guess value of x/2, your program should loop the specified number of times applying Newton's method and report the final value of guess. You should also subtract your estimate from the value of math.sqrt(x) to show how close it is.
  2. 호라
    붉은 색 상자 안에 있는 무한루프 종료 단축키 설명 중 빠진 부분이 있는 것 같습니다. # Cmd+ ( ? )
  3. egoing
    참고를 제거했습니다.
    대화보기
    • Ryan Cho
      참고 점프투 파이썬하면 - > 코딩도장으로 넘어갑니다 의도한건아닌것으로 보입니다.
    버전 관리
    egoing
    현재 버전
    선택 버전
    graphittie 자세히 보기