7 분 소요


4. Control Statement

Control statement란?

  • 프로그램의 흐름을 제어하는 명령어를 말한다.

    프로그램의 흐름 = 컴퓨터가 어떤 일을 해야하는지에 대한 과정.

  • 조건과 반복에 따라서 프로그램의 진행 과정이 바뀌게 된다.

    프로그램은 조건과 반복의 나열이다.

  • 조건(Conditional Statement)로는 if문이 있다.

    if, elif, else

  • 반복(Iterative Statement)로는 while, for문이 있다.

    while, for

  • 사실상 프로그래밍이란 데이터를 사용자가 원하는대로 제어하여 원하는 결과를 내는 과정을 얘기한다.

4.1. If statement (조건문)

  • 프로그램에서 가장 중요한 조건 판단이다.

  • 모든 프로그램은 조건을 판단하여 다음 진행 과정을 결정한다.

  • 파이썬은 if, elif, else 구문을 이용하여 조건을 사용할 수 있다.

  • 파이썬에서 if문을 사용하는 방법

1
2
3
4
5
6
7
8
a = 6

# a가 5인데, a가 5와 같으면, True를 출력하고 싶다.
a = 5
if a == 5:
    print("True")
else:
    print("False")

조건문을 사용하기 위해선, 비교연산과 논리연산을 알아야 한다.

1
2
# 같다, 다르다, 크다, 작다, 크거나 같다, 작거나 같다
a == b, a != b, a > b, a < b, a >= b, a <= b # 비교 연산
1
2
3
4
5
6
# A and B
a and b # a와 b가 둘다 만족
# A or B
a or b # a와 b 중에 하나 이상 만족
# not A
not a # a가 아닌 것.

비교연산과 논리연산의 공통점은 결과가 참(True) 또는 거짓(False)라는 것이다.

1
2
3
4
5
6
7
8
9
10
# 자판기
money = int(input("돈을 입력해 주세요 : "))
if money == 300:
    print("Coffee")
elif money < 300:
    print("투입한 돈이 부족합니다.")
    print("{}원을 돌려드립니다.".format(money))
else:
    print("Coffee")
    print("{}원을 돌려드립니다.".format(money))
  • nested 구조
    elif를 사용하지 않고 if / else를 사용하는 구조
1
2
3
4
5
6
7
8
money = int(input("돈을 입력해 주세요 : "))
if money >= 300:
    print("Coffee")
    if money > 300:
        print("{}원을 돌려드립니다.".format(money - 300))
else:
    print("투입한 돈이 부족합니다.")
    print("{}원을 돌려드립니다.".format(money))

4.2. Iterative Statement (반복문)

  • 파이썬에서는 while, for 2가지의 statement를 제공한다.

4.2.1. While statement

  • while문은 조건을 만족할 때 까지 반복한다.

  • while (조건): (statement1) (statement2) (statement3)

  • 조건이 만족하는 동안(while) statement1, 2, 3을 반복한다.

1
2
3
4
5
6
7
8
9
10
# 2단을 while문으로 구현해보자.
number = 1
while number < 10:
    print("2 x %d = %d" % (number, 2*number)) # number가 1부터 9까지 반복.
    number = number + 1 # number += 1
#     2 x 1 = 2
#     2 x 2 = 4
#     2 x 3 = 6
#     ...
#     2 x 9 = 18
1
2
3
4
5
6
# 구구단 심화
num = int(input("출력할 단수를 입력하세요 : "))
x = 1
while x < 10:
    print("{} × {} = {}".format(num, x, num*x))
    x += 1

4.2.2. for statement

  • while문은 조건이 만족하는 동안 반복을 수행했지만, for문은 지정 횟수동안 반복을 수행한다.

    여기서 지정된 횟수라는 것은 반복 대상의 크기가 된다.

  • 보통 iteratable object(반복 가능한 객체)를 대상으로 수행되며, 연속형 데이터 타입 변수들이 여기에 해당된다.

    List, Tuple, string, …

  • for 변수 in 리스트(튜플, 문자열, iterator): (statement1) (statement2) (statement3)

  • 리스트(나 반복가능한 변수들)의 모든 원소를 (자동으로 끝까지) 반복한다.
1
2
3
4
# 원소가 1, 2, 3인 리스트의 원소를 하나하나 출력하는 반복문을 만든다.
L = [1, 2, 3]
for i in L:
    print(i)
1
2
3
4
# 목록의 커피를 출력해보자
coffees = ['아메리카노', '카페라떼', '카페모카', '바닐라라떼', '핸드드립', '콜드브루']
for coffee in coffees:
    print(coffee)

for문의 단짝 range() 함수

  • for문은 특정 횟수동안 반복을 하기 때문에, 횟수를 자동으로 만들어주는 기능이 있으면 좋다.

  • 파이썬에서 기본적으로 제공하는 range 함수는 특정 숫자 범위내의 값들을 자동으로 생성해주는 함수이다.

e.g. range(1, 5)는 1, 2, 3, 4를 차례대로 생성해준다. (5는 범위에서 제외된다. 즉, 마지막 숫자는 제외된다. 1 <= x < 5)

1
2
3
4
5
# range 함수를 이용해 1부터 4까지 출력하는 프로그램을 작성해보자. for문을 이용해서!
for i in range(1, 11):
    print(i)

# range(start, stop[, step])
1
2
3
4
5
6
7
# 목록의 커피 중 5000원 이하인 커피 출력하기
coffees = ['아메리카노', '카페라떼', '카페모카', '바닐라라떼', '핸드드립', '콜드브루']
prices = [4100, 4600, 4600, 5100, 6000, 5000]

for i in range(len(coffees)):
    if prices[i] <= 5000:
        print(coffees[i])
1
2
3
4
5
6
7
8
# 목록의 커피가 500원 할인 한다고 했을때 5000원으로 살 수 있는 커피 출력하기
coffees = ['아메리카노', '카페라떼', '카페모카', '바닐라라떼', '핸드드립', '콜드브루']
prices = [4100, 4600, 4600, 5100, 6000, 5000]

money = 5000
for i in range(len(coffees)):
    if prices[i] - 500 <= money:
        print(coffees[i])

반복문을 제어하는 break, continue

  • 만약 반복문을 수행하다가 더 이상 반복이 필요없는 경우에는 어떻게 해야할까?

    break statement

  • 만약 반복문을 수행하다가 특정 조건에만 건너뛰고 싶은 경우에는 어떻게 해야할까?

    continue statement

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# 자판기 심화
coffee = 5 # 자판기의 커피 수량
extra_money = 0 # 거스름돈 보관
coffee_price = 300

# 일단 작동!
while coffee > 0:
    # 실제로는 자판기를 통해서 넣은 금액.
    money = 1000
    # 매번 저장된 돈과 들어온 돈을 합산하여 생각합니다.
    money_input = money + extra_money
    if money_input == coffee_price:
        # 실제로 이 파트는 자판기에서 커피를 뽑는 명령으로 대체된다.
        print("Coffee")
        # 이제 커피를 하나씩 줄인다.
        coffee = coffee - 1
        extra_money = money_input - coffee_price

    elif money_input < coffee_price:
        # 돈을 더 받자. # 200원인 경우.
        print("돈이 모자랍니다. 추가로 금액을 입력해주세요.")
        extra_money = money_input
        continue

    else: # or elif money > 300:
        print("Coffee")
        # 커피를 뽑아주고
        coffee = coffee - 1
        # 이제 커피를 하나씩 줄인다.
        extra_money = money_input - coffee_price
        if extra_money >= coffee_price:
          add_coffee = int(input("커피추가는 1번 종료는 0번 : "))
          if add_coffee == 1:
            print("coffee")
            coffee -= 1
            extra_money -= coffee_price
            print("%d원을 반환합니다. 잔여커피갯수는 %d 개입니다" % (extra_money, coffee))
            break

          else:
            print("%d원을 반환합니다. 잔여커피갯수는 %d 개입니다" % (extra_money, coffee))
            break

        # 거스름돈을 돌려준다.
        

    # 정산
    extra_money = 0
        
    # 커피가 다 떨어진 경우 알려야한다.
print("관리자에게 문의해주세요.")
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
31
32
33
34
35
36
37
38
39
40
# 자판기 심화2
coffee = 5 # 커피 재고
ex_money = 0
coffee_price = 300
while coffee > 0:
    try:
        money = int(input("돈을 넣어 주세요 : "))
    except ValueError:
        continue
    money += ex_money
    ex_money = 0
    while money > 0:
        if money >= coffee_price:
            try:
                ch = int(input("커피를 뽑으려면 1, 취소하려면 아무 키를 입력하세요 : "))
            except ValueError:
                ch = 0
            if ch == 1:
                print("Coffee")
                coffee -= 1
                money -= coffee_price
                print("남은 금액은 {}원 입니다.".format(money))
                if coffee <= 0:
                    break
            else:
                print("{}원을 돌려드립니다.".format(money))
                break
        else:
            print("돈이 부족합니다.")
            try:
                ch = int(input("커피를 뽑으려면 1, 취소하려면 아무 키를 입력하세요 : "))
            except ValueError:
                ch = 0
            if ch == 1:
                ex_money = money
            else:
                print("{}원을 돌려드립니다.".format(money))
                ex_money = 0
            break
print("커피가 모두 소진되었으니, 관리자에게 문의해주세요.")
1
2
3
4
5
6
7
8
9
# 구구단 심화2
a, b = map(int, input("출력할 구구단 단수 범위 : ").split())
for i in range(0, 10):
    for j in range(a, b + 1):
        if i == 0:
            print(f"==={j}단===", end="\t")
        else:
            print(f"{j} × {i}{i * j}", end="\t")
    print()
1
2
3
4
# 별 찍기
n = int(input("몇라인의 별을 출력? : "))
for i in range(n, 0, -1):
    print("*" * i)
1
2
3
4
5
6
7
# 자판기2
money = int(input("돈을 넣어주세요. : "))
coffee, cocoa, yulmu = [int(x) for x in input("뽑고 싶은 커피, 코코아, 율무차의 수량을 \
            입력해 주세요. 쉼표를 기준으로 순서대로 입력해주세요. : ").split(',')]
print(coffee)
print(f"거스름돈은 {money - 300*coffee - 200*cocoa - 300*yulmu}원 입니다. \
            남은 커피는 {5-coffee}잔, 코코아는 {5-cocoa}잔, 율무차는 {5-yulmu}잔 입니다.")
1
2
# 약수 찾기 - 100 이하의 자연수 중에서 5의 배수를 모두 찾아 출력
print([x for x in range(1, 101) if x % 5 == 0])
1
2
3
4
5
6
7
8
# 단어의 갯수 구하기
# 아래 5개의 변수들은 각각 하나의 문서 - 문서를 합쳐서 단어 갯수 구해보자

news1 = "earn champion products ch approves stock split champion products inc said its board of directors approved a two for one stock split of its common shares for shareholders of record as of april the company also said its board voted to recommend to shareholders at the annual meeting april an increase in the authorized capital stock from five mln to mln shares reuter"
news2 = "acq  computer terminal systems cpml completes sale computer terminal systems inc said it has completed the sale of shares of its common stock and warrants to acquire an additional one mln shares to sedio n v of lugano switzerland for dlrs the company said the warrants are exercisable for five years at a purchase price of dlrs per share computer terminal said sedio also has the right to buy additional shares and increase its total holdings up to pct of the computer terminal s outstanding common stock under certain circumstances involving change of control at the company the company said if the conditions occur the warrants would be exercisable at a price equal to pct of its common stock s market price at the time not to exceed dlrs per share computer terminal also said it sold the technolgy rights to its dot matrix impact technology including any future improvements to woodco inc of houston tex for dlrs but it said it would continue to be the exclusive worldwide licensee of the technology for woodco the company said the moves were part of its reorganization plan and would help pay current operation costs and ensure product delivery computer terminal makes computer generated labels forms tags and ticket printers and terminals reuter"
news3 = "earn cobanco inc cbco year net shr cts vs dlrs net vs assets mln vs mln deposits mln vs mln loans mln vs mln note th qtr not available year includes extraordinary gain from tax carry forward of dlrs or five cts per shr reuter"
news4 = "earn am international inc am nd qtr jan oper shr loss two cts vs profit seven cts oper shr profit vs profit revs mln vs mln avg shrs mln vs mln six mths oper shr profit nil vs profit cts oper net profit vs profit revs mln vs mln avg shrs mln vs mln note per shr calculated after payment of preferred dividends results exclude credits of or four cts and or nine cts for qtr and six mths vs or six cts and or cts for prior periods from operating loss carryforwards reuter"
news5 = "earn brown forman inc bfd th qtr net shr one dlr vs cts net mln vs mln revs mln vs mln nine mths shr dlrs vs dlrs net mln vs mln revs billion vs mln reuter"
1
2
3
4
# 나온 단어의 총 숫자 구하기
news = news1 + " " + news2 + " " + news3 + " " + news4 + " " + news5

print("단어의 갯수 : {}".format(len(set(news.split()))))
1
2
3
4
5
6
7
8
# 단어별 나온 횟수 구하기
news_list = news1.split() + news2.split() + news3.split() + news4.split() + news5.split()
word_Dict = dict()

for word in news_list:
    word_Dict[word] = word_Dict.get(word, 0) + 1

print(word_Dict)

Reference

  • 이 포스트는 SeSAC 인공지능 SW 개발자 양성 과정 - 나예진 강사님의 강의내용을 정리한 것입니다.

태그:

카테고리:

업데이트:

댓글남기기