본문 바로가기

Etc/Python

#07 제어문 (if, while, for)

< 제어문 >


 제어문과 같은 문법은 모든 언어에서 빠지지 않고 등장하는 문법이고, 모든 언어에서 사용하는 형식은 조금씩 다르지만 결국 같은 과정, 결과를 내놓기 때문에 C언어를 해왔던 경험을 살려 접근하면 어렵지 않게 이해할 수 있다.




 if문

if 조건문:

수행할 문장1 수행할 문장2 ... else: 수행할 문장A 수행할 문장B ...

 일단 파이썬은 중괄호 및 세미콜론이 없기 때문에 들여쓰기를 주의해서 사용해야한다. Tab이냐 space*4에 논란이 있지만 space*4를 추천하고 있다고 한다.


 비교연산자나 if, else에 대한 설명은 생략하고 차이점으로는

c에서의 else if 는 파이썬에서는 elif로 표현하고 ||, &&, ! 는 or, and, not으로 표현한다.


 더 나아가 파이썬에서는 in, not in이 있는데 이는 다음 예제를 보면 이해할 수 있다.

>>> 1 in [1, 2, 3] True >>> 1 not in [1, 2, 3

False

>>> 'j' not in 'python' True


 또 아무 일도 하지 않게 하고 싶다면 pass를 사용하면된다.

>>> pocket = ['paper', 'money', 'cellphone']

>>> if 'money' in pocket: ... pass ... else: ... print("카드를 꺼내라") ...


 부가적으로 수행할 문장이 한 줄인 경우에는 간략하게 : 뒤에 이어적어주면 보기 더 편할 수 있다.




 while문


 while문 기본 구조

while <조건문>:

<수행할 문장1> <수행할 문장2> <수행할 문장3> ...

 c의 while과 python의 if구조를 이해하면 곧바로 이해될법한 생김새이다. 조건문이 참인 동안에 while문에 속하는 문장들이 수행된다.


>>> treeHit = 0 >>> while treeHit < 5: ... treeHit = treeHit +1 ... print("나무를 %d번 찍었습니다." % treeHit) ... if treeHit == 5: ... print("나무 넘어갑니다.") ... 나무를 1번 찍었습니다. 나무를 2번 찍었습니다. 나무를 3번 찍었습니다. 나무를 4번 찍었습니다. 나무를 5번 찍었습니다. 나무 넘어갑니다.

 위와 같은 형식으로 이용할 수 있다.


 나중에 배우겠지만 입력을 받는 int(input())을 이용하여 조금 더 고급진 응용을 해본다면

>>> prompt = """

1. Add

2. Del

3. List

4. Quit


Enter number: """

>>> number = 0

>>> while number != 4:

print(prompt)

number = int(input())

 위와 같이 입력을 할 수 있고 이렇게 한다면 4를 입력할때까지 지속적으로 prompt를 출력하고, 입력받고를 반복하게 된다.


 while문 강제로 빠져나가기, 맨 처음으로 돌아가기


  부제만 보아도 c를 했다면 대강 떠오르는 단어가 있을텐데 그 예상대로 break문과 continue문이다.

 일단 break문으로 간단하게 자판기 작동 과정을 만든 아래 예시를 보자


# coffee.py coffee = 10 while True: money = int(input("돈을 넣어 주세요: ")) if money == 300: print("커피를 줍니다.") coffee = coffee -1 elif money > 300: print("거스름돈 %d를 주고 커피를 줍니다." % (money -300)) coffee = coffee -1 else: print("돈을 다시 돌려주고 커피를 주지 않습니다.") print("남은 커피의 양은 %d개 입니다." % coffee) if not coffee: print("커피가 다 떨어졌습니다. 판매를 중지 합니다.") break


 이제 continue문을 활용한 홀수 출력 예시를 보자


>>> a = 0

>>> while a < 10: ... a = a+1 ... if a % 2 == 0: continue ... print(a) ... 1 3 5 7 9



 무한 루프


 무한루프 또한 잘 따라왔다면 안보고도 추측할 수 있을텐데 조건문에 참인 값을 넣으면 된다. 1이나 true같은 값이 대표적이다.


무한루프를 만든 간단한 아래의 예시를 보자

>>> while 1:

print(int(input()))


5
5
1
1


 무한히 입력을 받아 한번 더 출력하는 예이고, 역시 정지시키는것은 [Ctrl] + C 이다.




 for문


 실제 c 코딩할때에도 다른 반복문보다 for문을 더 자주 사용하는데 파이썬에서도 for는 파이썬의 직관적 특징을 가장 잘 대변해주는 문법이고 여러모로 장점 많다.


기본 구조는 조금 c와는 다르다. 


for 변수 in 리스트(또는 튜플, 문자열): 수행할 문장1 수행할 문장2 

...

 리스트튜플, 문자열첫번째 요소부터 마지막 요소까지 차례로 변수대입되어 for안의 문장들이 수행된다.


 예시를 보면 조금 더 쉽게 이해할 수 있다.

>>> test_list = ['one', 'two', 'three']

>>> for i in test_list: ... print(i) ... one two three


 이렇게 좀 독특한 for문은 독특한만큼 다양한 활용이 가능하다. 이또한 예시로써 이해하면 되겠다.


>>> a = [(1,2), (3,4), (5,6)]

>>> for (first, last) in a: ... print(first + last) ... 3 7 11


 이런 방식으로도 사용할 수 있고 c에서 작성하던 for문을 적용시킨다면 아래와 같은 예시가 있다.


# marks1.py marks = [90, 25, 67, 45, 80] number = 0 for mark in marks: number = number +1 if mark >= 60: print("%d번 학생은 합격입니다." % number) else:  

print("%d번 학생은 불합격입니다." % number)


C:\Python>python marks1.py 1번 학생은 합격입니다. 2번 학생은 불합격입니다. 3번 학생은 합격입니다. 4번 학생은 불합격입니다. 5번 학생은 합격입니다.


 Continue


 while문에서도 했던 continue는 역시나 for문에서도 사용가능하고 사용시 for문의 처음으로 돌아간다.

# marks2.py marks = [90, 25, 67, 45, 80] number = 0 for mark in marks: number = number +1 if mark < 60: continue  

print("%d번 학생 축하합니다. 합격입니다. " % number)


Range()


 for문숫자리스트자동으로 만들어주는 range함수와 함께 자주 사용된다. range()의 기본적인 사용법은 다음과 같다.


>>> a = range(10) >>>

range(0, 10)

 위의 range(10)0부터 10미만의 숫자포함하는 range객체를 만들어 준다. 끝 숫자포함되지않는 것이 중요하다.


 그래서 1부터 10까지더하는 것은 다음과 같이 쉽게 구현할 수 있다.

>>> sum = 0

>>> for i in range(1, 11): ... sum = sum + i ... >>> print(sum) 55


 여기서 리스트 내 요소개수를 돌려주는 함수인 len함수를 이용해 다음과 같은 소스도 만들 수 있다.


#marks3.py marks = [90, 25, 67, 45, 80] for number in range(len(marks)): if marks[number] < 60: continue 

print("%d번 학생 축하합니다. 합격입니다." % (number+1))

 상당히 간결해지는 것을 확인할 수 있다.


 구구단forrange를 이용하면 단 4줄로 출력할 수 있다.

>>> for i in range(2,10):

... for j in range(1, 10): ... print(i*j, end=" ") ... print('') ... 2 4 6 8 10 12 14 16 18 3 6 9 12 15 18 21 24 27 4 8 12 16 20 24 28 32 36 5 10 15 20 25 30 35 40 45 6 12 18 24 30 36 42 48 54 7 14 21 28 35 42 49 56 63 8 16 24 32 40 48 56 64 72 9 18 27 36 45 54 63 72 81

 여기서 end=" "를 넣은이유는 줄바꿈하지않고 계속해서 출력하기 위함이다. 만약 2.7버전이라면 print i*j, 처럼 콤마마지막에 넣어야한다.

.

 리스트안에 for문 포함하기


 리스트 안에 for문포함하는 List comprehension(리스트내포)를 이용하면 좀 더 편리하고 직관적인 프로그램을 만들 수 있다.


>>> a = [1,2,3,4]

>>> result = [] >>> for num in a: ... result.append(num*3) ... >>> print(result) [3, 6, 9, 12]

 위의 이러한 긴 소스를 List comprehension을 이용하면

>>> result = [num * 3 for num in a]

>>> print(result) [3, 6, 9, 12]


 만약 if 조건을 넣어 짝수에만 3을 곱해 담고프다면 아래와 같이 할 수도 있다.

>>> result = [num * 3 for num in a if num % 2 == 0]

>>> print(result) [6, 12]



리스트 내포 일반적인 문법은 아래와 같다.

[표현식 for 항목 in 반복가능객체 if 조건]


 복잡하나 for문 2개 이상 사용하는 것도 가능하다.

[표현식 for 항목1 in 반복가능객체1 if 조건1 for 항목2 in 반복가능객체2 if 조건2 ... for 항목n in 반복가능객체n if 조건n]


 이를 활용한 예시로 구구단의 모든 결과 리스트에 담는 예시가 있다.

>>> result = [x*y for x in range(2,10) ... for y in range(1,10)] >>> print(result) [2, 4, 6, 8, 10, 12, 14, 16, 18, 3, 6, 9, 12, 15, 18, 21, 24, 27, 4, 8, 12, 16, 20, 24, 28, 32, 36, 5, 10, 15, 20, 25, 30, 35, 40, 45, 6, 12, 18, 24, 30, 36, 42 , 48, 54, 7, 14, 21, 28, 35, 42, 49, 56, 63, 8, 16, 24, 32, 40, 48, 56, 64, 72, 9, 18, 27, 36, 45, 54, 63, 72, 81]



'Etc > Python' 카테고리의 다른 글

#09 클래스  (0) 2016.12.29
#08 함수, 파일 입출력  (0) 2016.11.30
#06 자료형의 참과 거짓, 변수  (0) 2016.11.27
#05 자료형-3(딕셔너리, 집합 자료형)  (0) 2016.11.27
#04 자료형-2(리스트, 튜플)  (0) 2016.11.24