Python & Automation

Python study - day 2

모모토 2022. 1. 26. 02:13
반응형
자동화를 위한 Python 공부 2일차

 

 

제어문

- 알고리즘은 일처리 순서를 의미하고 알고리즘을 프로그램에 적용하기 위해 제어 구조를 구성한다.

- 제어 구조 종류

  1. 순차 구조 : 명령을 순차적으로 나열한 구조
  2. 선택 구조 : 조건 판단에 따른 제어 방향을 결정하는 제어 구조
  3. 반복 구조 : 일정 횟수 또는 조건에 따라 명령을 반복적으로 수행하는 구조

- 선택 구조 

if ~ elif ~ else keyword 를 사용하여 구조를 구성

if gender:
    if age > 20 and army:
        print( '나이가 20세이상이고 군대 다녀옴' )
    else:
        print( '나이가 20세이상이고 군대 안다녀옴' )
else:
    print( '미필' )

- 반복 구조 - for 문

range() 함수 : 반복 횟수를 정해주는 함수 , 반복에 따른 값을 발생 시켜주므로 반복 제어 변수에 저장해서 사용할 수 있다.

 

range( [ start ], stop, [ step ] )

start : 반복 시작값, 기본은 0, 생략 가능

stop : 반복 종료값, 반드시 기재,반복 종료값 전까지 반복

step : 반복 간격, 기본은 1, 생략 가능

# i : 반복 제어 변수, range() 함수의 결과를 기억
for i in range( 1, 10, 1 ):
    print( i, end = '\t' )

* 반복 제어 변수 _(underbar) 를 사용할 수 있으며 이때 range() 함수 결과를 사용할 수 없다. 반복만 수행할 경우 활용하자

for _ in range( 11 ):
    print( 'Python programming' )

- 중첩 for 문

print( '\t\t\tmultiple table\n' )
for i in range( 2, 10 ): # 바깥 for
    for j in range( 1, 10 ): # 안쪽 for
        print( i * j, end = '\t' )
    print()

- while 문

조건이 참인 동안 반복 : while 문 , 반복횟수가 정해지지 않은 경우 사용

#while 문

i = 1 # 반복 제어 변수 생성( 초기값 부여 )
while i < 11: # 반복 조건 판단
    print( i, end = '\t' )
    i += 1 # 반복 제어 변수 변경
    
#중첩 while문

i = 2
print( '\t\t\tmultiple table\n' )
while i < 10:
    j = 1 # reset
    while j < 10:
        print( i * j, end = '\t' )
        j += 1
    print()
    i += 1

 

실습1) 10개 이내의 정수를 입력받아 평균을 출력하는 파이썬 스크립트
# 0. 변수 정의
MAX_DATA = 10 # Symbolic Constant, 의미화 상수

sum = 0 # 합계
i = 1 # 입력 데이터 count

# 1.1 정수 입력
print( '[ ', i, ' ] 번째 정수 입력( -1이면 종료 ) : ', end = '' )
number = int( float( input() ) )
# 1. 10개 이내 반복
while number != -1 and i < MAX_DATA:
    # 1.2 합계 계산
    sum += number
    
    i += 1
    # 1.1 정수 입력
    print( '[ ', i, ' ] 번째 정수 입력( -1이면 종료 ) : ', end = '' )
    number = int( float( input() ) )

# 2. 평균 계산
average = sum / ( i -  1 )

# 3. 결과 출력
print( 'average = ', average )

결과

[  1  ] 번째 정수 입력( -1이면 종료 ) : 50
[  2  ] 번째 정수 입력( -1이면 종료 ) : 50
[  3  ] 번째 정수 입력( -1이면 종료 ) : 50
[  4  ] 번째 정수 입력( -1이면 종료 ) : 50
[  5  ] 번째 정수 입력( -1이면 종료 ) : 50
[  6  ] 번째 정수 입력( -1이면 종료 ) : 50
[  7  ] 번째 정수 입력( -1이면 종료 ) : 50
[  8  ] 번째 정수 입력( -1이면 종료 ) : 50
[  9  ] 번째 정수 입력( -1이면 종료 ) : 50
[  10  ] 번째 정수 입력( -1이면 종료 ) : 50
average =  50.0
실습2) 10개 이내의 정수를 입력받아 양수와 음수의 개수를 세고, 양수일 때 짝수와 홀수의 개수를 세어서 출력하는 파이썬 스크립트
# Symbolic Constant
MAX_DATA = 10
END_DATA = -99999 

count = 1 # 입력 데이터 갯수 저장
positive_count = 0 # 양수 갯수 저장
negative_count = 0 # 음수 갯수 저장
even_count = 0 # 짝수 갯수 저장
odd_count = 0 # 홀수 갯수 저장
error_count = 0 # 에러 데이터 갯수 저장

while True:
    print( '[ ', count, ' ] 번째 정수 입력( -99999이면 종료 ) : ', end = '' )
    number = int( float( input() ) )

    if number == END_DATA:
        break
    if number != 0: # 입력 값 에러 확인
        if number > 0: # 양수 처리
            positive_count += 1
            if number % 2 == 0:
                even_count += 1
            else:
                odd_count += 1
        else: # 음수 처리
            negative_count += 1
    else:
        error_count += 1
        print( '\nError : input zero\n' ) 
    count += 1
    if count > MAX_DATA:
        count -= 1
        break

print( '\n\ntotal input data : ', count, '\n' )
print( 'positive count : ', positive_count )
print( '\teven count : ', even_count )
print( '\todd count : ', odd_count )
print( 'negative count : ', negative_count )
print( '\nerror count : ', error_count ) 

결과

[  1  ] 번째 정수 입력( -99999이면 종료 ) : 1
[  2  ] 번째 정수 입력( -99999이면 종료 ) : 2
[  3  ] 번째 정수 입력( -99999이면 종료 ) : 3
[  4  ] 번째 정수 입력( -99999이면 종료 ) : -4
[  5  ] 번째 정수 입력( -99999이면 종료 ) : 0

Error : input zero

[  6  ] 번째 정수 입력( -99999이면 종료 ) : 6
[  7  ] 번째 정수 입력( -99999이면 종료 ) : 7
[  8  ] 번째 정수 입력( -99999이면 종료 ) : 8
[  9  ] 번째 정수 입력( -99999이면 종료 ) : 9
[  10  ] 번째 정수 입력( -99999이면 종료 ) : 10


total input data :  11 

positive count :  8
	even count :  4
	odd count :  4
negative count :  1

error count :  1

 

시퀀스 자료형 개요

- 기본 자료형은 하나의 값(원시 자료)을 저장하는 변수를 생성할 때 사용한다.

- 문제 해결시 여러개의 값을 저장해서 처리해야 하는 경우가 많이 발생한다.

- 파이썬에서는 여러개의 값을 저장할 수 있는 자료형인 Sequence 자료형을 제공하고 있다.

- Sequence 자료형은 자료구조의 선형 구조와 같은 역할을 담당한다.

- Sequence 자료형 종류

  1. str (문자열) : 문자열 표현 자료형 , 불변 자료형 하나의 문자열(문자 집합) 표현에 사용하는 Sequence 자료형 기본 자료형에 가까운 Sequence 자료형
  2. tuple (튜플) : 여러 자료형 값을 저장할 수 있는 자료형 , 불변 자료형 , 저장된 데이터가 변경되지 않는다는 보장이 된다.
  3. list (리스트) : 여러 자료형 값을 저장할 수 있는 자료형 , 가변 자료형이며 가변이라는 의미는 무엇이냐 하면 자유롭게 값 추가/삭제/변경이 가능한 자료형이라는것을 의미한다.
  4. dict (dictionary) : Key : Value 형식으로 값을 저장하는 자료형 , 가변 자료형으로 검색기능을 적용할 때 유용하다.
  5. set (집합) : 중복없이 여러값을 저장하는 자료형 , 가변 자료형

- 불변 자료형 (immutable) : 저장된 값을 변경할 때 기존 값을 바꾸는 것이 아니고 새로운 기억 공간에 값을 저장하고 reference를 변경하는 자료형이다. ex) 기본 자료형 , str , tuple

- 가변 자료형 (mutable) : 저장된 값을 변경할 수 있다.

#str 변수 생성
name1 = '홍길동'
print('name = ', name1 , '\t[ ', type( name1 ) , ']')

# str 변수 생성 (형변환)
value = 100
value_str = str( value )
print( 'value_str = ' , value_str ,
      '\t[',type(value_str),']' )
print( 'value_str = ', value_str , '\t[',id(value_str),']')
value_str = 'number:100'
print( 'value_str = ', value_str , '\t[',id(value_str),']')
# 기존 값을 지우고 채우는것이 아닌 새로운 공간을 형성하여 값을 채워준다

결과

name =  홍길동 	[  <class 'str'> ]
value_str =  100 	[ <class 'str'> ]
value_str =  100 	[ 140166626835056 ]
value_str =  number:100 	[ 140166626853296 ]

 

시퀀스 자료형 공통 연산

- Sequence 자료형에 적용되는 공통적인 동작을 수행하는 연산

  1. indexing
    • Sequence 자료형에 저장된 하나의 값에 접근할 때 사용하는 연산
    • index 시작은 0부터 시작한다.
    • index 끝은 전체 길이에서 1을 뺀값이다. (max_length - 1)
    • [] 기호를 사용한다
  2. slicing
    • Sequence 자료형에 저장된 값중 부분값을 사용하는 연산
    • [start : stop : step] 형식으로 표현한다.
    • start를 생략하면 0 , step을 생략하면 1이다.
    • step에 -1을 부여하면 reverse 된다.
  3. 연결
    • Sequence 자료형을 연결하여 길이를 늘리는 연산
    • + 연산자를 사용한다.
  4. 반복
    • Sequence 자료형에 저장된 값을 똑같이 복사하여 길이를 늘리는 연산
    • * 연산자를 사용한다.
  5. 포함 유무 확인 -in 연산자
    • Sequence 자료형에 저장된 데이터 갯수 계산 연산
    • len()함수를 사용한다.
#indexing
print('>>>>>> indexing <<<<<<')
string = 'pythonPrograming'
print( 'string = ', string,
       '\t[ ', id( string ),
       '\t', type( string ), ' ]' )

print(string[ 0 ])
print(string[ 3 ])
print(string[ -1 ]) # reverse위치에서 첫번째
print(string[ -2 ])


#slicing
print('>>>>>> slicing <<<<<<')
print( 'string = ', string,
       '\t[ ', id( string ),
       '\t', type( string ), ' ]' )
print(string[ 0:5:1 ])
print(string[ :5: ])

결과

>>>>>> indexing <<<<<<
string =  pythonPrograming 	[  140166625857008 	 <class 'str'>  ]
p
h
g
n
>>>>>> slicing <<<<<<
string =  pythonPrograming 	[  140166625857008 	 <class 'str'>  ]
pytho
pytho
pytho
gnimargorPnohtyp
in
>>>>>> indexing <<<<<<
string1 :  python 
string2 :  programming
pythonprogramming
python programming
>>>>>> 반복 <<<<<<
pythonpythonpython
pythonprogrammingprogramming
pythonprogrammingpythonprogramming
>>>>>> 포함유무 확인 <<<<<<
python programming hello world
True
False
True
>>>>>> 길이 계산 <<<<<<
string :  python programming hello world 
length :  30
yhnpormighlowrd
python programming hello world
d
print(string[ :5 ])
print(string[ ::-1 ]) # reverse
print(string[ -3:-1: ])

#연결
print('>>>>>> indexing <<<<<<')
string1 = 'python'
string2 = 'programming'
print( 'string1 : ', string1, '\nstring2 : ', string2 )

print( string1 + string2 )
print( string1 + ' ' + string2 )

#반복
print('>>>>>> 반복 <<<<<<')
print( string1 * 3 )
print( string1 + string2 * 2 )
print( ( string1 + string2 ) * 2 )

#포함유무 확인
print('>>>>>> 포함유무 확인 <<<<<<')
string = 'python programming hello world'
print( string )

print('python' in string)
print('pythin' in string)
print(not 'Hello' in string)

#길이 계산
print('>>>>>> 길이 계산 <<<<<<')
print( 'string : ', string, '\nlength : ', len( string ) )

print( string[ 1 :len( string ): 2 ] )
print( string[ :len( string ) ] )
print( string[ len( string ) - 1 ] )

 

 

시퀀스 자료형 - str

-문자 종류

  1. 단일 문자 - character
  2. 문자 집합(문자열) - string

- 문자열 값을 표현할 때 사용한 Sequence 자료형

- 파이썬에서 문자열 값(literal)은 ' , " , ''' , """ 로 묶어서 표현한다.

- 문자열 표현시 ''' , """ 로 묶어주면 white space 문자 또한 문자열에 포함된다.

- 파이썬 문자열은 UNICODE를 기본 encoding으로 사용하므로 한글 사용에 제약이 없다.

- str은 불변 자료형

- str 변수 사용

  1. 변수 생성 방법
    • 문자열 생성 방법을 활용하여 str 변수 정의
    • str() 함수를 이용하여 str로 형변환
  2. str 변수 Sequence 공통 연산
    • indexing : 값 지정 목적 , 0 부터 시작 , -1은 reverse 시 처음위치를 표현
    • slicing : 부분 위치의 값
    • 연결 : str을 연결한다. +
    • 반복 : str을 반복해서 표현한다. *
    • 포함유무확인 : 문자열 in str(변수)
    • 길이계산 : len() 함수 사용

- str을 이용한 문자열 formatting

  1. 기본 방식 문자열 : formatting
    • %s : 문자열
    • %d : 정수
    • %f : 실수
    • %10s : 전체 10자리에 문자열 formatting , 우측 정렬
    • %-10s : 전체 10자리에 문자열 formatting, 좌측 정렬
    • %3d : 전체 3자리에 정수 formatting
    • %5.1f : 전체 5자리에 소수점 이하 1자리로 실수 formatting
  2. format() 메서드( method ) 이용 문자열 formatting
    • {0:<10} : 0번 위치 내용을 전체 10자리에 왼쪽 정렬해서 formatting
  3. f-string 이용 문자열 formatting
    • f’{<formatting할 내용/변수[ : 자리수 ] }’

기본 방식 문자열 formatting

name = '홍길동'
age = 25
gender = '남'
weight = 65.7
height = 180.3
fmt = '%10s %3d %2s %5.1fkg %6.1fcm' % ( name, age, gender,
                                       weight, height )
print( fmt )

결과

       홍길동  25  남  65.7kg  180.3cm

 format() 메서드 이용 문자열 formatting

fmt = '{0:<10} {1:3} {2:2} {3:5.1f}kg {4:6.1f}cm'.format(
    name, age, gender, weight, height
)
print( fmt )

결과

홍길동         25 남   65.7kg  180.3cm

f-string을 이용한 문자열 formatting

fmt = f'{name:<10} {age:3} {gender:2} \
{weight:5.1f}kg {height:6.1f}cm'
print( fmt )

결과

홍길동         25 남   65.7kg  180.3cm
print( f'{"이름":^10} : {name:<10}' )
print( f'{"나이":^10} : {age:3}' )
print( f'{"성별":^10} : {gender:2}' )
print( f'{"몸무게":^10} : {weight:5.1f}kg' )
print( f'{"키":^10} :{height:6.1f}cm' )

결과


    이름     : 홍길동       
    나이     :  25
    성별     : 남 
   몸무게     :  65.7kg
    키      : 180.3cm

'Python & Automation' 카테고리의 다른 글

Python Study - day 6  (0) 2022.02.01
Python Strudy - day 5  (0) 2022.01.31
Python Study - day 4  (0) 2022.01.27
Python Study - day 3  (0) 2022.01.27
Python study - day 1  (0) 2022.01.25