>>> x = int(input("Please enter an integer: ")) Please enter an integer: 42 >>> if x < 0: ... x = 0 ... print('Negative changed to zero') ... elif x == 0: ... print('Zero') ... elif x == 1: ... print('Single') ... else: ... print('More') ... More
for문
파이썬에서 for문은 임의의 시퀀스(리스트나 문자열)의 항목들을 순서대로 이터레이션 할 수 있다.
1 2 3 4 5 6 7 8
>>> # Measure some strings: ... words = ['cat', 'window', 'defenestrate'] >>> for w in words: ... print(w, len(w)) ... cat 3 window 6 defenestrate 12
시퀀스를 이터레이트 하는 동안 시퀀스를 수정하는 것은 원래의 의도대로 동작하지 않을 수도 있다. 이 경우 보통 복사본을 만드는 방법을 사용한다.
1 2 3 4 5 6 7 8 9 10
# Strategy: Iterate over a copy for user, status in users.copy().items(): if status == 'inactive': del users[user]
# Strategy: Create a new collection active_users = {} for user, status in users.items(): if status == 'active': active_users[user] = status
range() 함수
숫자들의 시퀀스로 이터레이트 해야 할 때 range()를 사용하면 편리하다. range()는 수열을 만든다.
1 2 3 4 5 6 7 8 9
>>> a = ['Mary', 'had', 'a', 'little', 'lamb'] >>> for i in range(len(a)): ... print(i, a[i]) ... 0 Mary 1 had 2 a 3 little 4 lamb
주의해야 할 점은 range()는 리스트 처럼 동작하지만 리스트가 아니라는 점이다.
1 2
>>> print(range(10)) range(0, 10)
이처럼 리스트를 출력하지 않는다. 이터레이트할 때 원하는 시퀀스 항목들을 순서대로 돌려주는 객체이지만, 실제로 리스트를 만들지 않아서 공간을 절약한다.
특이하게 파이썬에서 루프문은 else를 가질 수 있다. 루프가 이터러블 소진이나 조건이 거짓이 돼서 종료할 때 실행된다. 단, 루프가 break문으로 종료될 때는 실행되지 않는다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
>>> for n in range(2, 10): ... for x in range(2, n): ... if n % x == 0: ... print(n, 'equals', x, '*', n//x) ... break ... else: ... # loop fell through without finding a factor ... print(n, 'is a prime number') ... 2is a prime number 3is a prime number 4 equals 2 * 2 5is a prime number 6 equals 2 * 3 7is a prime number 8 equals 2 * 4 9 equals 3 * 3
continue는 루프의 다음 이터레이션에서 계속 실행하도록 만든다.
1 2 3 4 5 6 7 8 9 10 11 12 13
>>> for num in range(2, 10): ... if num % 2 == 0: ... print("Found an even number", num) ... continue ... print("Found a number", num) Found an even number 2 Found a number 3 Found an even number 4 Found a number 5 Found an even number 6 Found a number 7 Found an even number 8 Found a number 9
pass문
아무것도 하지 않는다. 문법적으로 문장이 필요하지만 특별히 할 일이 없을 때 사용한다. ex) 최소한의 클래스를 만들 때
함수 정의
def를 이용해서 함수를 정의한다. 함수 이름과 괄호로 싸인 매개변수들의 목록이 뒤따른다. 함수 내부 문장들은 반드시 들여쓰기 해야 한다. “””독스트링””” 은 함수 바디의 첫번째 문장으로 사용해 함수에 대한 설명으로 사용할 수 있다.
1 2 3 4 5 6 7 8 9 10 11
>>> deffib(n):# write Fibonacci series up to n ... """Print a Fibonacci series up to n.""" ... a, b = 0, 1 ... while a < n: ... print(a, end=' ') ... a, b = b, a+b ... print() ... >>> # Now call the function we just defined: ... fib(2000) 011235813213455891442333776109871597
기본 인자 값
하나 이상의 인자들에 기본값을 지정하여 정의된 것보다 더 적은 개수의 인자들로 호출될 수 있는 함수를 만든다.
1 2 3 4 5 6 7 8 9 10 11
defask_ok(prompt, retries=4, reminder='Please try again!'): whileTrue: ok = input(prompt) if ok in ('y', 'ye', 'yes'): returnTrue if ok in ('n', 'no', 'nop', 'nope'): returnFalse retries = retries - 1 if retries < 0: raise ValueError('invalid user response') print(reminder)