TIL no.24 - Python - 5. Loops

박준규·2019년 10월 12일
0

Python

목록 보기
5/15

1. while

Python의 while문은 else 문이 추가될 수 있습니다.
if 문의 else 문과 유사합니다.
While문의 else 문도 while의 조건문이 False 이면 실행됩니다.
즉 while문이 종료되면 else 문이 실행된다는 뜻입니다.

while <조건문>:
    <수행할 문장1>     
    <수행할 문장2>     
    <수행할 문장3>     
    ...
    <수행할 문장N> 
else:
    <while문이 종료된  수행할 문장1>     
    <while문이 종료된  수행할 문장2>     
    <while문이 종료된  수행할 문장3>     
    ...
    <while문이 종료된  수행할 문장N>

while문에 if문을 사용해 적절히 break와 continue를 사용하는 것이 좋습니다.

while의 조건은 true이지만
다른 요인으로 인해 while문이 종료하는 상황도 염두에 두어야할 때는
break를 써서 while문을 빠져나와야 합니다.

break를 사용하는 예제

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 coffee == 0:
        print("커피가 다 떨어졌습니다. 판매를 중지 합니다.")
        break

또한, while문을 빠져나가지 않고 해당 조건만 건너뛰고 싶을 때는 continue를 사용합니다. continue는 while문의 맨 첫줄로 돌아가게 해줍니다. 예를 들어, 화면에 1부터 10까지 출력하는데 5인 경우에만 출력하지 않는 코드는 다음과 같습니다.

continue를 사용하는 예제

num = 0
>>> while num < 10:
        num += 1
        if num == 5:
                continue
        print(num)

1
2
3
4
6
7
8
9
10

2. for

for문의 문법은 다음과 같습니다.
for 요소 in list(or tuple, string):
여기서 요소는 list(or tuple, string)의 요소를 뜻합니다.

간단한 예제를 들어보겠습니다.

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

for num in a:
	print(num)
    
>>>1
>>>2
>>>3
>>>4
>>>5

2-1. List comprehension

comprehension의 사전적 의미는 이해, 포괄 등이 있습니다.
저희가 주목해야할 의미는 포괄입니다.

list에 반복저이고 특정한 조건을 만족하는 요소를 포함해야하는 경우, list comprehension을 사용하면 편하게 구현할 수 있습니다.

기본 문법은 다음과 같습니다.
[표현식 for 항목 in 반복가능객체 if 조건문]

예를 들어, 숫자들이 담겨있는 list를 input으로 받아 짝수만 남겨 return해주는 함수를 구현할 때, list comprehension을 사용하지 않은 코드와 사용한 코드를 보여드리겠습니다.

list comprehension을 사용하지 않는 경우 (1)

def remove_odd_numbers(numbers):

	for num in numbers[:]:
    	if num % 2 == 1:
        	numbers.remove(num)
    
	return numbers

list comprehension을 사용한 경우 (2)

def remove_odd_numbers(numbers):
	return [num for num in numbers if num % 2 == 0]

(1)번이 (2)번보다 코드도 훨씬 길고
홀수일 때마다 요소를 지워주는 로직이다 보니 slicing도 매번 해줘야 합니다.

반면에, (2)번의 경우, 코드도 짧고 직관적인 로직을 사용해서 구현해주었습니다.

profile
devzunky@gmail.com

0개의 댓글