티스토리 뷰
문장은 실행의 한 단위로 대화형 모드라면 바로 실행되는 단위다. 지정문이나 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가 되야 함
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))
'파이썬 프로그래밍' 카테고리의 다른 글
파이썬 리스트 (0) | 2019.01.28 |
---|---|
파이썬 스트링 (0) | 2019.01.27 |
파이썬 시작하기 (4) - 연산과 수식 (0) | 2019.01.25 |
Python 시작하기 (3) - 입출력 기본 (0) | 2017.01.02 |
Python 시작하기 (2) - 프로그램 구조, 타입과 변수 (0) | 2017.01.02 |
- Total
- Today
- Yesterday
- 콜렉션
- follow
- python exercise
- Camel Style
- TypeError
- python example
- 지연계산
- Iterator
- comparable
- contentEquals
- ToString
- CompareTo
- max
- 패턴
- zip
- sort key
- 스트링
- typedef
- APPEND
- rust
- C++ 클래스
- 자바regex
- 이터러블
- Lazy evaluation
- 이터레이터
- 스트링 +
- 동적바인딩
- indexof
- contains
- format
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |