본문 바로가기

프로그래밍/Python

파이썬 공부 2주차

반응형

오늘은 주로 분기, 반복에 대해서 다뤘다.

분기는 if문, 반복은 while문.

또한 함수를 정의하고, 호출하는 방법에 대해 익혔다.

키보드의 입력을 받아 변수에 값으로 저장하는 방법을 배웠고,

다양한 변수의 타입이 있다는 것도 배웠다.

Type(~)을 통해 특정 요소의 데이터 타입을 알아낼 수 있었다.

특히, 신기한 점은 Type(Type))을 통해 Type의 데이터 타입은 Type이라는 것을 알 수 있다는 것이다.

인터렉티브 모드에서 Alt+P를 통해 Previous의 입력을 불러올 수 있고, Alt+N을 통해 Next의 입력을 불러올 수 있다.

마지막으로는 흔한 예제!

삼각형 그리기!

# -*- coding: euc-kr -*-
 
def tri_width():
    width = int(raw_input('삼각형의 너비를 입력하세요>'))
    loop1 = 1
    while width > 0:
        loop2 = loop1;
        while loop2 > 0:
            print '*',
            loop2 -= 1
        loop1 += 1
        width -= 1
        print 
 
def tri_height():
    height = int(raw_input('삼각형의 높이를 입력하세요>'))
    loop1 = 1
    const_height = height
    while height > 0:
        loop2 = const_height-loop1
        while loop2 > 0:
            print ' ',
            loop2 -= 1
        loop2 = loop1*2-1;
        while loop2 > 0:
            print '*',
            loop2 -= 1
        loop1 += 1
        height -= 1
        print
 
def tri_height_double():
    height = int(raw_input('마름모의 한 변의 길이를 입력하세요>'))
    const_height = height
    start = -(height*2-2)
    loop1 = 1
    while start < height*2 - 1:
        #먼저 북반구의 경우, start 가 0보다 작습니다.
        if start <= 0:
            loop2 = loop1*2-1
            loop2 = const_height-loop1
            while loop2 > 0:
                print ' ',
                loop2 -= 1
            loop2 = loop1*2-1;
            while loop2 > 0:
                print '*',
                loop2 -= 1
            loop1 += 1
            
        #남반구에 진입하게 되면 start가 0보다 커집니다.
        if start > 0:
            if start == 2:
                loop1 = const_height - 1   
            loop2 = const_height-loop1
            while loop2 > 0:
                print ' ',
                loop2 -= 1
            loop2 = loop1*2-1
            while loop2 > 0:
                print '*',
                loop2 -= 1            
            loop1 -= 1; #북반구와 달리, loop1을 1씩 뺍니다.
        print           #개행
        start += 2      #start에 2씩 더합니다.
 
def run():
    select = raw_input('유형을 선택하세요. (1~3 중 하나) >')
    if(select == 1):
        tri_width()
    if(select == 2):
        tri_height()
    if(select == 3):
        tri_height_double()
 
# -*- coding: euc-kr -*-
# 위의 문장(주석)은 한글 입출력을 위해 추가된 문장입니다. euc-kr은 UTF-8로 대체될 수 있습니다.
 
def tri_width():                        # 삼각형의 너비를 받으면, 해당 너비를 가진 직각삼격형을 출력하는 함수를 정의합니다.
    width = int(raw_input('width : '))  # 삼각형의 너비를 문자열 형식으로 받아온 뒤, 정수 형식으로 변환합니다.
    row = 1                             # 현재 출력할 줄의 위치를 나타내는 변수, row를 선언하고 초기 값으로 1을 대입합니다.
    while row < width + 1 :             # row가 width가 될 때까지, while이 묶고 있는 코드를 반복합니다.
        print '*' * row                 # row번째 줄에서는 *을 row만큼 반복시킨 뒤, 출력합니다.
        row += 1                        # row = row + 1을 의미합니다.
        
def tri_height():                        # 삼각형의 높이를 받으면, 해당 높이를 가진 피라미드 꼴의 삼각형을 출력하는 함수를 정의합니다.
    height = int(raw_input('height : ')) # 삼각형의 높이를 문자열 형식으로 받아온 뒤, 정수 형식으로 변환합니다.
    row = 1                              # 현재 출력할 줄의 위치를 나타내는 변수입니다.
    while row < height + 1 :             # row가 height가 될 때까지 하위 코드를 반복합니다.
        star = row * 2 - 1               # 매 줄에서 출력할 *의 갯수를 나타내는 star라는 변수를 선언합니다. star는 항상 홀수입니다.
        print ' ' * (height - row),      # 관찰을 통해 발견한 규칙을 적용합니다. 피라미드에서 좌측 공백은 height - row와 같습니다.
        print '*' * star                 # 위에서 print 문장에 ,가 붙어있어서 개행되지 않았습니다. 위 출력 우측에 *을 출력합니다.
        row += 1                         # 매 반복의 마무리마다 row에 1씩 더합니다.
 
def rhom():                          # 마름모의 한 변의 길이를 입력받으면 그에 맞는 마름모를 출력하는 함수입니다.
    side = int(raw_input('side : ')) # 마름모의 한 변의 길이를 side라는 변수에 정수형으로 저장합니다.
    row = 1                          # 현재 출력할 줄의 위치를 나타내는 변수입니다.
    while row < side + 1:            # 이 이하로는 tri_height에서와 유사한 패턴입니다.
        star = row * 2 - 1           # "
        print ' ' * (side - row),    # "
        print '*' * star             # "
        row += 1                     # 여기까지는 tri_height와 동일합니다.
    row -= 2                         # 이하로는 tri_height에서의 작업을 역으로 반복합니다. 중간줄은 반복되지 않으므로 row에 2를 뻅니다.
    while row > 0 :                  # row가 다시 1이 될 때까지 하위 코드를 반복합니다.
        star = row * 2 - 1           # 
        print ' ' * (side - row),    # ps. 같은 코드를 반복하는 것에 거부감을 느끼지 않는 것이 좋습니다. 코드 길이와 급여는 비례합니다.
        print '*' * star             #
        row -= 1                     # tri_height에서와 역순이므로 row도 매줄마다 1씩 뺍니다.
    
def run():                               # 이 프로그램에서 가장 먼저 실행되는 함수입니다.
    select = int(raw_input('select : ')) # 수행할 함수를 선택합니다. tri_width는 1 / tri_height는 2 / rhom은 3입니다.
    if(select == 1):                     # 만약 select의 값(즉, 입력값)이 1일 경우 if가 묶고 있는 코드가 실행됩니다.
        tri_width()                      # tri_width라는 함수를 호출하는 문장입니다.
    if(select == 2):                     # 만약 select의 값이 2일 경우 if가 묶고 있는 코드가 실행됩니다.
        tri_height()                     # tri_height라는 함수를 호출하는 문장입니다.
    if(select == 3):                     # 만약 select의 값이 3일 경우 if가 묶고 있는 코드가 실행됩니다.
        rhom()                           # rhom이라는 함수를 호출하는 문장입니다.
run()                                    # run이라는 함수를 호출합니다. 처음으로 실행되는 문장입니다.
반응형