관리 메뉴

나구리의 개발공부기록

2장 - 프로그래밍 언어 활용 | 섹션13. Python의 기초, 섹션14. Python의 활용 본문

2024정보처리기사 준비 정리(필기 - 시나공, 실기 - 수제비)/필기 4강 - 프로그래밍 언어 활용

2장 - 프로그래밍 언어 활용 | 섹션13. Python의 기초, 섹션14. Python의 활용

소소한나구리 2024. 5. 10. 12:18

2024년도 시나공 필기 책 내용 정리 


섹션14. Python의 기초

 

1. Python의 기본 문법

 

  • 변수의 자료형에 대한 선언이 없음
  • 분장의 끝을 의미하는 세미콜론(;)을 사용할 필요가 없음
  • 변수에 연속하여 값을 저장하는 것이 가능함, ex) x, y, z = 10, 20, 30
  • if 나 for와 같이 코드 블록을 포함하는 명령문을 작성할 때 코드 블록은 콜론(:)과 여백(들여쓰기)로 구분함
  • 여백은 일반적으로 4칸 혹은 한 개의 탭만큼 띄워야 하며 같은 수준의 코드들은 반드시 동일한 여백을 가져야 함
if a > b:
    print('a is big')
    print('b is small')
else:
    print('a is small')
    print('b is big')

2. Python의 데이터 입/출력 함수

 

  • input() 함수 : Python의 표준 입력 함수로 키보드로 입력받아 변수에 저장하는 함수, 입력되는 값은 문자열로 취급
# 형식1
변수 = input(출력문자) # 출력문자는 생략이 가능하며 변수는 사용자가 임의로 지정,
                       # 값을 입력하고 enter를 누르면 입력한 값이 변수에 저장됨
                       
# 형식2
변수1, 변수2, ... = input(출력문자).split(분리문자)
# 화면에 출력문자가 표시되고, 입력받은 값을 분리문자로 구분한 값을 각선언한 변수에 저장,
# 분리문자를 생략하면 공백으로 값들을 구분함

x, y = input().split('-') // gilbut-sinagong 입력시
print(x, y)               // x에는 gilbut, y에는 sinagong 저장되여 출력됨

 

  • print() 함수
# 형식1
print(출력값1, 출력값2, ..., sep = 분리문자, end = 종료문자)

# 출력값에는 숫자, 문자, 문자열, 변수 등 다양한 값이나 식이 올 수 있음
# sep 여러 값을 출력할 때 값과 값 사이를 구분하기 위해 출력하는 문자, 생략할 경우 기본값은 공백 1칸
# end는 맨 마지막에 표시할 문자로 생략할 경우 기본값은 줄 나눔(줄건너뛰기)임
print(82, 24, sep = '-', end = ".") // 결과 82-24.

#형식2
print(서식 문자열 %(출력값1, 출력값2, ...))
# C와 Java에서 사용했던 printf의 서식문자열과 동일하게 적용
# 출력값이 한 개일 경우 출력값에 대한 괄호를 생략할 수 있음

print('%-8.2f' %200.20) // 결과 200.20, 왼쪽부터 출력자리수를 8자리, 소수점을 2자리로 지정하고 실수로 출력

 

입력 값의 형변환(Casting)

 

  • input() 함수는 입력되는 값을 무조건 문자열로 저장하므로 숫자로 사용하기 위해서는 형변환을 해야함
변수 = int(input())   # 정수로 변환
변수 = float(input()) # 실수로 변환

# map 함수는 input().split()를 통해 입력받은 2개 이상의 값을 원하는 자료형으로 변환할때 사용하는 함수
# map(자료형, input().split())
변수1, 변수2, ... = map(int, input().split())
변수1, 변수2, ... = map(flot, intput().split())
a, b = map(int, input().split())

3. 리스트(List)

 

  • C와 Java의 배열와 동일한 기능, 여러 요소를 하나의 이름으로 처리하는 자료형
  • 필요에 따라 개수를 늘이거나 줄일 수 있기 때문에 리스트를 선언할 때 크기를 적지 않음
  • 배열과 달리 하나의 리스트에 정수, 실수, 문자열 등 다양한 자료형을 섞어서 저장할 수 있음, 
  • 리스트의 위치는 0부터 시작함(인덱스)
# 형식
리스트명 = [값1, 값2, ...] # [] 대괄호 사이에 값을 입력하고 쉼표(,)로 값을 구분
리스트명 = list([값1, 값2, ...])

a = [10, 'mike', 23.45]
print(a)   # [10, 'mike', 23.45]
a[0] = 1
print(a)   # [1, 'mike', 23.45]

4. 딕셔너리(Dictionary)

 

  • 연관된 값을 묶어서 저장하는 용도로 사용함, Java의 map과 동일
  • 사용자가 원하는 값을 키로 지정해 사용(인덱스를 사용하지 않음)
  • 딕셔너리에 접근할 때는 딕셔너리 뒤에 [ ] 대괄호를 사용하며, 대괄호 안에 키를 지정
# 형식
딕셔너리명 = {키1:값1, 키2:값2, .....}       # 중괄호 사이에 {키:값, 키:값} 형태로 입력
딕셔너리명 = dict({키1:값1, 키2:값2, .....})

a = {'이름':'홍길동', '나이':25, '주소':'서울'}
print(a)     # {'이름': '홍길동', '나이': 25, '주소': '서울'}
a['이름'] = '이순신'
print(a)     # {'이름': '이순신', '나이': 25, '주소': '서울'}

5. Range

 

  • 연속된 숫자를 생성하는 것으로 리스트, 반복문 등에서 많이 사용됨
# 형식 (Java의 for문과 흡사함)
range(최종값)                 # 0에서 최종값 -1 까지 연속된 숫자를 생성
range(초기값, 최종값)         # 초기값에서 최종값-1 까지 연속된 숫자를 생성
range(초기값, 최종값, 증가값) # 초기값에서 최종값-1까지 증가값만큼 증가하면서 증가
                              # 증가값이 음수인경우 감소,

a = list(range(10))
print(a)                  # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
a = list(range(4,10))
print(a)                  # [4, 5, 6, 7, 8, 9]
a = list(range(1,10,3))
print(a)                  # [1, 4, 7]
a = list(range(10,1,-2))
print(a)                  # [10, 8, 6, 4, 2]

6. 슬라이스

 

  • 문자열이나 리스트와 같은 순차형 객체에서 일부를 잘라서 반환하는 기능
# 형식
객체명[초기위치:최종위치]        # 초기위치에서 최종위치-1까지의 요소들을 가져옴
객체명[초기위치:최종위치:증가값] # range와 동일하게 증가값을 설정하여 요소를 가져올 수 있음

# 일부 인수를 생략하여 사용할 수 있음
객체명[:] 혹은 객체명[::]   # 객체의 모든 요소 반환
객체명[초기위치:]           # 객체의 초기위치에서부터 마지막까지의 요소들 반환
객체명[:최종위치]           # 객체의 0번째 위치에서 최종위치-1까지의 요소들 반환
객체명[::증가값]            # 객체의 모든 요소를 증가값만큼 증가(감소)하면서 요소들을 반환

a = ['a','b','c','d','e']
a[1:3]       # ['b', 'c']
a[0:5:2]     # ['a', 'c', 'e']
a[3:]        # ['d', 'e']
a[:3]        # ['a', 'b', 'c']
a[::3]       # ['a', 'd']
# 예제
a = 'sinagong'
print(a[3:7])             # agon

a = lint(range(10))
print(a[:7:2])            # [0, 2, 4, 6]

a = 'hello, world'
print(a[7:])              # world

a = list(range(5,22,2))   # [5, 7, 9, 11, 13, 15, 17, 19, 21]의 요소를 3씩 증가하면서 꺼냄
print(a[::3])             # [5, 11, 17]

a = list(range(8))
print(a[2::2])            # [2, 4, 6]

a = list(range(8,3,-1))
print(a[:3])              # [8, 7, 6]

# 각 객체의 첫 번째 요소는 위치가 0임, -1은 객체의 마지막요소가됨
# range와 slice의 최종값이나 최종위치는 증가값에 따라 감소하거나 증가함

a = 'Programming'
# a[-11] = P ... a[-1]  = g
# 초기위치가 음수이고 최종위치가 생략된 상태에서 증가값이 양수일 때는 최종위치가 -1 이됨
print(a[-7::2])           # [rmig] -7위치의 값부터 최종위치까지 2씩 증가하면서 값을 꺼냄

a = 'Concurrency Control'
# a[-19] = C, a[-1] = l
# 초기위치가 생략되고 최종위치가 음수인 상태에서 증가값이 음수일 경우 초기위치는 -1 이됨
print(a[:-10:-2])         # [lrnCy] -1위치(초기)의 값부터 최종위치까지 -2씩 감소하면서 값을 꺼냄

섹션14. Python의 활용

 

1. if문

# 형식1 : 조건이 참일 때만 실행
if 조건:
    실행할 문장
    
a = 15
if a > 10:
    a = a - 10
print(a)
# 출력결과 : 5


# 형식2 : 조건이 참일 때와 거짓일 때 실행할 문장이 다름
if 조건:
    실행할 문장1
else:
    실행할 문장2
    
a, b = 10, 20
if a > b:       # a(10)가 b보다 크면(20) true로 if문을 작으면 false로 else문을 실행
    cha = a - b
    print(cha)
else:
    cha = b - a
    print(cha)

# 출력결과 : 10


# 형식3 : 조건이 여러개이고, 조건마다 실행할 문장이 다름
if 조건1:
    실행할 문장1
elif 조건2:       # 자바, C의 else if 를 파이썬에서는 elif로 작성
    실행할 문장2
elif 조건3:
    실행할 문장3
    ...
else:
    실행할 문장4
    
jum = 85
if jum >= 90:
    print('학점은 A입니다.')
elif jum >= 80:
    print('학점은 B입니다.')
elif jum >= 70:
    print('학점은 c입니다.')
elif jum >= 60:
    print('학점은 D입니다.')
else:
    print('학점은 F입니다.')
# 출력결과 : 학점은 B입니다.


# 형식4 : if문 안에 if문
if 조건1:
    if 조건2:
        실행할 문장1
    else:
        실행할 문장2
else:
    실행할 문장3

a, b = 21,10
if a % 2 == 0:
    if b % 2 == 0:
        print('모두 짝수')
    else:
        print('a : 짝수, b : 홀수')
else:
    if b % 2 == 0:
        print('a : 홀수, b : 짝수')
    else:
        print('모두 홀수')
# 출력 결과 : a: 홀수, b : 짝수

2. for문

# 형식1 : range를 이용하는 방식
for 변수 in range(최종값):    # 0에서 최종값-1까지 연속된 숫자를 변수에 저장하여 실행할 문장을 반복 수행
    실행할 문장
    
for i in range(10):    # i에 0에서 9까지 순서대로 저장하면서 문장을 반복 수행
    sum += i           # 0 ~ 9 까지의 값을 sum에 누적 연산, sum = 45가됨
    
for i in range(11, 20):  # i에 11에서 19까지 반복문 실행
    sum += i             # 11 ~ 19까지의 값을 sum에 누적 연산, sum = 135

for i in range(-10, 20, 2):  # i에 -19에서 19까지 2씩 증가하면서 반복문 실행
    sum += i                 # -10 ~ 19까지의 값을 sum에 누적 sum = 60
    

# 형식2 : 리스트(List)를 이용하는 방식
for 변수 in 리스트:    # 리스트의 0번째 요소에서 마지막 요소까지 순서대로 변수에 저장하여 반복문 수행
    실행할 문장

a = [35, 55, 65, 84, 45]
hap = 0

for i in a:    # a의 요소를 0부터 끝까지 순서대로 꺼내서 변수에 저장하여 반복문을 수행

    hap += i   # a의 요소를 hap에 누적연산, hap = 284
    
avg = hap / len(a)  # hap의 값과 리스트 a의 길이의 값을 나누어서 평균을 구해 avg 변수에 저장, avg = 56.8
print(hap, avg)
# 출력 결과 284 56.8

3. while문

# 형식
while 조건:  # 다른언어와 마찬가지로 참 or 거짓 결과를 갖는 수식 조건을 입력, 1(true), 0(flase)직접 입력 가능
    실행할 문장
    
i, hap = 0, 0

while i < 5:    # i가 5보다 작을동안 반복(5회)

    i += 1      # i의 값을 1씩 누적연산 (++ 연산자가 없음)
    hap += i    # hap에 hap + i의 값을 누적연산
    
print(hap)
# 출력결과 : 15

4. 클래스

  • 정의 형식
class 클래스명:               # class = 클래스를 정의하는 예약어, 클래스명은 임의로 정의
    실행할 문장
    def 메소드명(self, 인수): # def = 메소드를 정의하는 예약어, 메소드명은 임의로 정의
                # self = 메소드에서 자기 클래스에 속한 변수에 접근할 때 사용하는 명칭,
                # 일반적으로 self를 사용하지만, 사용자가 임의로 지정해도 됨
                # 인수 = 메소드를 호출하는 곳에서 보낸 값을 저장할 변수, 사용자가 임의로 지정
        실행할 문장
        return 값  # return은 메소드를 호출한 위치로 값을 돌려주기위해 사용하는 예약어
                   # return값이 없을 경우 생략할 수 있고 값에는 변수, 객체, 계산식 등이 올 수 있음
  • 객체의 선언 형식
변수명 = 클래스명()
# 임의로 지정한 변수명에 클래스명()으로 객체를 선언,
# Java의 new 클래스명()과 비슷한 느낌
  • 예제 - 두 수를 교환하는 프로그램
class Cls:
    x, y = 10, 20
    
    def chg(self):       # 두 변수의 값을 교환하기 위한 메서드 chg 선언 및 구현
        temp = self.x    # 빈 변수 temp에 self.x의값을 저장
        self.x = self.y  # self.y의 값을 self.x에 저장
        self.y = temp    # temp의 값을 self.y에 저장
        
a = Cls()         # 변수 a에 클래스의주소를 저장
print(a.x, a.y)   # a.x와 a.y의 값을 출력, 출력결과 : 10 20
a.chg()           # Cls 클래스의 chg 메소드를 호출(실행)
print(a.x, a.y)   # a.x와 a.y의 값을 출력(값이 바뀜) 출력결과 : 20 10
  • 예제 - 0 부터 10까지 더하는 프로그램
class Cls:
    def rep(self, r):           # rep 메소드 선언 및 구현
    
        hap = 0
        for i in range(r + 1):  # 매개변수로 입력받은 값까지 반복문을 수행
                                # 10이 들어왔으므로 0부터 10+1(10) -1(마지막 값은 빠짐) 까지 반복문을 수행
            hap += i            # hap + i(0 ~ 10)의 값을 hap에 누적
        return hap              # hap을 반환

a = Cls()           # a변수에 Cls 클래스 선언
b = a.req(10)       # b변수에 a.req(10)메서드를 호출한 값을 반환

print(b) # 출력결과 55

 

클래스 없는 메소드의 사용

 

  • C언어의 사용자 정의 함수와 같이 클래스 없이 메소드만 단독으로 사용할 수 있음
def calc(x, y):   # 함수 정의
    x *= 3        # 매개변수의 값에 3을 곱해서 저장
    y /= 3        # 매개변수의 값에 3을 나눈 몫을 저장
    print(x, y)   # 출력 9 4.0
    return x      # x의 값을 반환

a, b = 3, 12
a = calc(a, b)    # calc함수에 a와 b의 값을 매개변수로 하여 호출하고 연산 결과를 a에 저장

print(a,b)  # 출력 9, 12
""" 출력결과
9 4.0
9 12
"""