티스토리 뷰

문장은 실행의 한 단위로 대화형 모드라면 바로 실행되는 단위다. 지정문이나 print 문은 단순문장이라고 하는데, 복합문장은 여러 줄로 이루어지는 문장이다. 복합문장의 헤더는 : (콜론)으로 끝나고 줄바꿈과 들여쓰기로 복합문장에 포함되는 부분을 표시한다. 들여쓰기가 줄어들면 복합문장의 끝난 것이다.

if a > b:
    print(“a가 큼”)

복합문장 안에 또 복합문장이 들어가서 이중의 들여쓰기를 할 수도 있다. 이런 경우에도 들여쓰기로 어느 레벨이 끝났는지 알 수 있다. 파이썬에서는 들여쓰기로 블록을 표시하여 자바와 비교하면 {  ... }와 세미콜론이 모두 없어진 매우 간결한 코드가 나오게 된다. 또한 자바에서는 들여쓰기가 권장사항이므로 안 해도 그만이지만 여기서는 반드시 해야 한다. 필자는 개인적으로 이런 점 때문에 파이썬을 정말 좋아한다.

for i in range(1,11): 
    print(i) 
    if i == 5: 
        break

조건이 만족하는 경우에만 해당 부분을 실행하는 if 문은 파이썬에서는 다음과 같이 나타난다. 자바와 달라지는 점은 조건식에 괄호를 하지 않는다는 것이다. 파이썬에서는 불필요한 경우 (  )를 사용하지 않는 것을 권장한다. 

day = input("What day is today? ")
if day == "sat": 
    print("It's Saturday. Have a good weekend ^_^") 
elif day == "fri": 
    print("It's Friday. TGIF!") 
elif day == "mon": 
    print("It's Monday. Another week to go.")
else: 
    print("Have a good day!")

 다음과 같이 한줄에 쓸 수도 있지만 역시 권장되지 않는다.

if True: print('Hello'); a = 5

또한 파이썬 조건식에서 주의할 점은 앞의 포스트에서 설명했듯이 모든 값이나 수식, 변수가 참, 거짓이 될 수 있으므로 조건식 자리에 모든 수식이 가능하다. 그러나 지정문은 허용하지 않는다.

if (a):
    print(a)
if (a = b):    # 오류 - 조건식에서 지정문 허용 X
    print(a, b)

파이썬에서 반복문은 for와 while이 있다.

for 문을 사용하기 위해서는 range 함수를 먼저 알아야 한다. range는 시작값, 끝값, 증감 단위를 매개변수로 받아 range 객체를 반환하는 함수다.

range(start, upto, step)
  • start : 시작값. 범위는 시작값을 포함한다. 생략되면 0이 된다.
  • upto : 끝값. 범위는 끝값을 포함하지 않는다. 즉 시작값 이상 끝값 미만이 된다.
  • step : 증감 단위, 생략되면 1이 된다. 증감단위는 음수가 되어서 감소도 가능하다.
  • 반환값은 레인지 객체가 된다. 해당 수열의 값을 하나씩 돌려주는 객체다. 

range 함수가 돌려준 range 객체(이터레이터라고 함)은 그 자체를 출력하기 때문에 list( ... )를 통해 리스트(일종의 배열이라고 생각하면 된다)로 바꾸어 출력해야 한다.

>>> list(range(10)) 
[0,1,2,3,4,5,6,7,8,9]
>>> range(1, 7) 
range(1, 7)
>>> list(range(0, 30, 5)) 
[0,5,10,15,20,25]
>>> list(range(5, -1, -1)) 
[5,4,3,2,1,0]
>>> list(range(1, 80, 10))
>>> list(range(100, 0, -10))

range에서 시작값과 증감값은 생략가능하다.

  • range(숫자) : 0에서 숫자-1까지 차례로 반복
  • range(숫자, 숫자) : 첫 숫자에서 두 번째 숫자-1까지 차례로 반복

for 문에서 range()를 쓰는 방식은 for in을 사용하는 것이다.

for 변수 in range(…)

변수는 어떤 이름이나 사용 가능하지만 다른 곳에서 쓰이는 이름은 피하는 것이 좋다. 그 변수가 range에 속하는 값에 대해 차례로 반복을 수행하게 된다.

for x in range(10):
    print(x)

for 루프의 연습을 위해 n을 입력받아 1~n까지 짝수만 출력하는 문제를 생각해 보자. 다음과 같이 n을 입력받아 짝수만 출력하게 할 수 있다. 

n = int(input("n = "))
for a in range(1, n):
  if (a % 2 == 0):
   print(a)
또는 좀더 나은 방법으로는 range의 기능을 이용해서 다음과 같이 작성할 수 있다.
for a in range(2, n, 2):
    print(a)
유사한 문제로 n과 m을 입력받아 1~n 사이의 m의 배수를 모두 출력하는 코드를 작성해 보자. 또는 n을 입력받아 n의 약수를 모두 출력하는 문제를 생각해 볼 수 있다.
n = int(input("n = "))
for a in range(            ):
    if (                    ):
        print(a)
한편 다른 반복문으로 while 문이 있다. 이것은 조건식이 만족할 동안 포함된 문장의 동작을 반복하는 것이다.
while 조건식:
        반복할 문장들
다음 코드는 n을 입력받아 1부터 n까지 수의 합계를 구한다.
n = int(input("n = "))
sum = 0
counter = 1
while counter <= n:
    sum = sum + counter
    counter += 1
print("1에서 %d까지의 합계는 %d입니다."% (n, sum))

while 문은 조건이 만족할 때까지 반복하는데 조건식이 다음을 만족해야 한다. 

  • 조건이 처음에는 True 
  • 반복할 동안 계속 True 
  • 언젠가는 False가 되야 함
루프 수행 중에 반복을 멈추어야 하는 경우 break 문을 사용한다. 보통 break 문은 조건식에서 쓰인다. 루프 수행 중에 언제라도 특정 조건을 만족하면 나오게 된다. break를 사용한 예로 다음 문제를 살펴보자. [문제] 숫자 n을 입력 받아 1에서 a까지의 합계가 n을 넘지 않는 제일 큰 a를 구하시오.
n = int(input(‘=>’))
sum = 0
for x in range(1, n):
   sum += x
   if (sum >= n):
       a = x
       break
print(“%d에서 %d까지 합계가 %d입니다.”%(1, a, sum))
for 문에서 쓸 수 있는 다른 편리한 기능으로 for else 가 있다. for 문에서 break로 빠져나왔는지 아닌지 판단해야 하는 경우가 많이 있다. 자바에서는 그런 경우를 처리하기 위해 for 루프 인덱스 값을 검사해야 한다. 파이썬에서는 루프 인덱스 변수가 for 밖에서는 접근할 수 없는 변수이다. 대신 else 문에서 break하지 않은 경우에만 어떤 일을 수행하게 할 수 있다. 즉 for 문에서 보통 break는 if 문 안에 들어있으므로 else는 그 if에 대응하는 것이라고 볼 수 있다.
for  in range(…): 
   
else: 
  
n = int(input(‘=>’))
sum = 0
for x in range(1, 100):
   sum += x
   if sum >= n:
       a = x
       print(“%d에서 %d까지 합계가 %d입니다.”%(1, a, sum))
       break
else:
    print(“%d에서 %d까지 합계가 %d를 넘지 않습니다.”%(1, 100, n))


댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
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
글 보관함