03-1 if문

  • if문: 프로그래밍에서 조건을 판단하여 해당 조건에 맞는 상황을 수행
In [1]:
money = 1

if money:
    print("택시를 타고 가라")
else:
    print("걸어가라")
택시를 타고 가라

if문의 기본 구조

if 조건문:
    수행할 문장1
    수행할 문장2
    ...
else:
    수행할 문장A
    수행할 문장B
    ...
  • 파이썬에서는 위 예문의 "수행할 문장"을 반드시 들여쓰기 해야 한다.
In [1]:
money = 1

if money:
    print("택시를")
print("타고 가라")
else:
    print("걸어가라")
  File "<ipython-input-1-74379be01843>", line 6
    else:
       ^
SyntaxError: invalid syntax

조건문이란 무엇인가?

  • "조건문"이란 참과 거짓을 판단하는 문장이다.
자료형 거짓
숫자 0 이 아닌 숫자 0
문자열 "abc" ""
리스트 [1, 2, 3] []
튜플 (1, 2, 3) ()
딕셔너리 {"a": "b"} {}

비교연산자

  • 조건문에서는 자료형보다는 비교연산자(<, >, ==, !=, >=, <=)를 쓰는 경우가 많다.
비교연산자 설명
x < y x가 y보다 작다
x > y x가 y보다 크다
x == y x와 y가 같다
x != y x와 y가 같지 않다
x >= y x가 y보다 크거나 같다
x <= y x가 y보다 작거나 같다
In [2]:
x = 3
y = 2

x > y
Out[2]:
True
In [3]:
x < y
Out[3]:
False
In [4]:
x == y
Out[4]:
False
In [5]:
x != y
Out[5]:
True
In [6]:
money = 2000

if money >= 3000:
    print("택시를 타고 가라")
else:
    print('걸어가라')
걸어가라

and, or, not (논리연산자)

연산자 설명
x or y x와 y 둘중 하나만 참이면 참이다
x and y x와 y 모두 참이어야 참이다
not x x가 거짓이면 참이다
In [7]:
money = 2000
card = 1

if money >= 3000 or card:
    print("택시를 타고 가라")
else:
    print("걸어가라")
택시를 타고 가라

x in s, x not in s

in not in
x in 리스트 x not in 리스트
x in 튜플 x not in 튜플
x in 문자열 x not in 문자열
In [1]:
1 in [1, 2, 3]
Out[1]:
True
In [2]:
1 not in [1, 2, 3]
Out[2]:
False
In [3]:
'a' in ('a', 'b', 'c')
Out[3]:
True
In [4]:
'j' not in 'python'
Out[4]:
True
In [5]:
# 만약 주머니에 돈이 있으면 택시를 타고, 없으면 걸어가라

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

if 'money' in pocket:
    print("택시를 타고 가라")
else:
    print("걸어가라")
택시를 타고 가라

[조건문에서 아무 일도 하지 않게 설정하고 싶다면?]

In [6]:
# 주머니에 돈이 있으면 가만히 있고 주머니에 돈이 없으면 카드를 꺼내라

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

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

다양한 조건을 판단하는 elif

주머니에 돈이 있으면 택시를 타고, 돈은 없지만 카드가 있으면 택시를 타고, 돈도 없고 카드도 없으면 걸어가라

In [7]:
# if와 else만으로 표현

pocket = ['paper', 'handphone']
card = 1

if 'money' in pocket:
    print("택시를 타라")
else:
    if card:
        print("택시를 타라")
    else:
        print("걸어가라")
택시를 타라
In [8]:
# elif를 사용

if 'money' in pocket:
    print("택시를 타라")
elif card:
    print("택시를 타라")
else:
    print("걸어가라")
택시를 타라

03-2 while 문

while문의 기본 구조

  • while문은 조건문이 참인 동안에 while문 아래에 속하는 문장들을 반복해서 수행한다.
while <조건문>:
    <수행할 문장1>
    <수행할 문장2>
    <수행할 문장3>
    ...
In [9]:
# "열번 찍어 안 넘어 가는 나무 없다"라는 속담을 표현

treeHit = 0

while treeHit < 10:
    treeHit = treeHit + 1
    print("나무를 %d번 찍었습니다." % treeHit)
    
    if treeHit == 10:
        print("나무 넘어갑니다.")
나무를 1번 찍었습니다.
나무를 2번 찍었습니다.
나무를 3번 찍었습니다.
나무를 4번 찍었습니다.
나무를 5번 찍었습니다.
나무를 6번 찍었습니다.
나무를 7번 찍었습니다.
나무를 8번 찍었습니다.
나무를 9번 찍었습니다.
나무를 10번 찍었습니다.
나무 넘어갑니다.
  • 위 while문이 반복되는 과정
treeHit 조건문 조건 판단 수행하는 문장 while문
0 0<10 나무를 1번 찍었습니다. 반복
1 1<10 나무를 2번 찍었습니다. 반복
2 2<10 나무를 3번 찍었습니다. 반복
3 3<10 나무를 4번 찍었습니다. 반복
4 4<10 나무를 5번 찍었습니다. 반복
5 5<10 나무를 6번 찍었습니다. 반복
6 6<10 나무를 7번 찍었습니다. 반복
7 7<10 나무를 8번 찍었습니다. 반복
8 8<10 나무를 9번 찍었습니다. 반복
9 9<10 나무를 10번 찍었습니다. 나무 넘어갑니다. 반복
10 10<10 거짓 종료

while문 직접 만들기

In [10]:
prompt = """
1. Add
2. Del
3. List
4. Quit

Enter number: """

number = 0

while number != 4:
    print(prompt)
    number = int(input())
1. Add
2. Del
3. List
4. Quit

Enter number: 
1

1. Add
2. Del
3. List
4. Quit

Enter number: 
4

while문 강제로 빠져나가기

In [11]:
coffee = 10
money = 300

while money:
    print("돈을 받았으니 커피를 줍니다.")
    coffee = coffee - 1
    print("남은 커피의 양은 %d 개입니다." % coffee)
    
    if not coffee:
        print("커피가 다 떨어졌습니다. 판매를 중지합니다.")
        break #강제로 빠져나가기
돈을 받았으니 커피를 줍니다.
남은 커피의 양은 9 개입니다.
돈을 받았으니 커피를 줍니다.
남은 커피의 양은 8 개입니다.
돈을 받았으니 커피를 줍니다.
남은 커피의 양은 7 개입니다.
돈을 받았으니 커피를 줍니다.
남은 커피의 양은 6 개입니다.
돈을 받았으니 커피를 줍니다.
남은 커피의 양은 5 개입니다.
돈을 받았으니 커피를 줍니다.
남은 커피의 양은 4 개입니다.
돈을 받았으니 커피를 줍니다.
남은 커피의 양은 3 개입니다.
돈을 받았으니 커피를 줍니다.
남은 커피의 양은 2 개입니다.
돈을 받았으니 커피를 줍니다.
남은 커피의 양은 1 개입니다.
돈을 받았으니 커피를 줍니다.
남은 커피의 양은 0 개입니다.
커피가 다 떨어졌습니다. 판매를 중지합니다.

조건에 맞지 않는 경우 맨 처음으로 돌아가기

In [12]:
# 1부터 10까지의 숫자 중에서 홀수만 출력

a = 0

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

무한 루프

  • 무한 루프의 기본적인 형태
while True:
    수행할 문장1
    수행할 문장2
    ...

03-3 for 문

for문의 기본 구조

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

예제 이용해 for문 이해하기

In [1]:
# 1. 전형적인 for문

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

for i in test_list:
    print(i)
one
two
three
In [2]:
# 2.다양한 for문의 사용

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

for (first, last) in a:
    print(first+last)
3
7
11
In [3]:
# 3. for문의 활용
# 총 5명의 학생 중 점수가 60점이 넘으면 합격, 아니면 불합격. 결과 보여주시오.

marks = [90, 25, 67, 45, 80]
number = 0

for mark in marks:
    number += 1
    
    if mark >= 60:
        print("%d번 학생은 합격입니다" % number)
    else:
        print("%d번 학생은 불합격입니다" % number)
1번 학생은 합격입니다
2번 학생은 불합격입니다
3번 학생은 합격입니다
4번 학생은 불합격입니다
5번 학생은 합격입니다

for와 함께 자주 사용하는 range 함수

In [7]:
# 1부터 10까지 합

sum = 0

for i in range(1, 11):
    sum += i
    print("i = %d, sum = %d" % (i, sum))
i = 1, sum = 1
i = 2, sum = 3
i = 3, sum = 6
i = 4, sum = 10
i = 5, sum = 15
i = 6, sum = 21
i = 7, sum = 28
i = 8, sum = 36
i = 9, sum = 45
i = 10, sum = 55
In [9]:
# 성적 예제를 range 함수를 사용해서...

marks = [90, 25, 67, 45, 80]

for number in range(len(marks)):
    if marks[number] < 60: continue
    print("%d번 학생 축하합니다. 합격입니다" % (number+1))
1번 학생 축하합니다. 합격입니다
3번 학생 축하합니다. 합격입니다
5번 학생 축하합니다. 합격입니다
In [11]:
# 구구단

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 

리스트 안에 for문 포함하기

  • 다음의 예제를 리스트 내포(List comprehension)를 이용하여 변경해 보자.
In [12]:
a = [1, 2, 3, 4]
result = []

for num in a:
    result.append(num*3)
    
print(result)
[3, 6, 9, 12]
In [13]:
# 리스트 내포 사용하여 변경

result = [num * 3 for num in a]

print(result)
[3, 6, 9, 12]
In [3]:
# 리스트 내포에서 if 사용하기

a = [1, 2, 3, 4]
result = [num *3 for num in a if num%2 == 0]

print(result)
[6, 12]
In [5]:
# for 문 두번 사용하기

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]