[정보처리기사 실기] 파이썬 문법 정리

꼼영 🌱·2023년 7월 25일
1

예상문제

https://chobopark.tistory.com/273

정보처리기사 실기 시험에서 파이썬 문법이 출제될 가능성이 높은 주제는 다음과 같습니다.

  1. 제어문
    파이썬에서 제공하는 제어문에 대한 이해가 필요합니다. if문, for문, while문 등이 해당됩니다.
  2. 함수
    파이썬에서 함수는 def 키워드를 사용하여 정의하며, 반환값과 매개변수를 설정할 수 있습니다. 또한, 람다(lambda) 함수도 이해하고 있어야 합니다.
  3. 클래스와 객체지향 프로그래밍
    파이썬에서 클래스와 객체지향 프로그래밍은 매우 중요한 개념입니다. 클래스의 정의, 생성자(constructor), 메소드(method), 상속(inheritance), 다형성(polymorphism) 등의 개념을 이해할 수 있어야 합니다.
  4. 예외 처리
    파이썬에서 예외 처리는 try-except문을 사용하여 처리할 수 있습니다. 예외 처리에 대한 이해와 예외 처리 방법을 알고 있어야 합니다.
  5. 정규 표현식
    파이썬에서 정규 표현식은 re 모듈을 사용하여 처리할 수 있습니다. 문자열 패턴 매칭, 문자열 치환, 문자열 분리 등 다양한 용도로 사용할 수 있습니다.

이 외에도 파이썬에서 제공하는 내장 함수와 라이브러리 등에 대한 이해도가 필요합니다. 자주 사용되는 내장 함수로는 print(), len(), range(), sorted() 등이 있습니다.

자주 사용되는 내장함수

print(sep=”구분자”, end=””)

print() 함수는 문자열, 숫자, 변수 등을 출력할 때 사용합니다. 기본적으로 출력값을 화면에 출력하지만, 파일에 출력하는 것도 가능합니다. 다음은 예시입니다.

pythonCopy code
print("Hello, world!")  # 문자열 출력
print(10)  # 숫자 출력
x = 3
y = 5
print("x = {}, y = {}".format(x, y))  # 변수 출력
# 여러 값 출력 시 값들 사이에 공백 들어감
# print 함수문이 끝나면 개행 됨
print("a","b","c")
print("d","f","g")
# a b c
# d f g

# print문 출력시 맨 뒤에 붙는 것
print("a","b","c", end="")
print("a","b","c")
# a b ca b c

print("a","b","c", end=" ")
print("a","b","c")
# a b c a b c

print("a","b","c", end="$$")
print("a","b","c")
# a b c$$a b c

# print 출력시 문자 값 사이에 붙는 것
print("010","3701","1394", sep="")
# 01037011394

print("010","3701","1394", sep="-")
# 010-3701-1394

len()

len() 함수는 문자열, 리스트, 튜플, 딕셔너리 등의 길이를 반환합니다. 다음은 예시입니다.

pythonCopy code
string = "Hello, world!"
print(len(string))  # 문자열 길이 출력

my_list = [1, 2, 3, 4, 5]
print(len(my_list))  # 리스트 길이 출력

range()

range() 함수는 지정된 범위의 숫자를 생성하는 함수입니다. 주로 for문에서 사용됩니다. 다음은 예시입니다.

pythonCopy code
for i in range(1, 11):
    print(i)  # 1부터 10까지 출력

sorted()

sorted() 함수는 리스트, 튜플, 딕셔너리 등을 정렬합니다. 다음은 예시입니다.

pythonCopy code
my_list = [3, 2, 1, 4, 5]
print(sorted(my_list))  # 오름차순 정렬
print(sorted(my_list, reverse=True))  # 내림차순 정렬

input()

input() 함수는 사용자로부터 입력을 받는 함수입니다. 다음은 예시입니다.

pythonCopy code
name = input("이름을 입력하세요: ")
print("당신의 이름은 {}입니다.".format(name))

대문자로 변환하는 메소드

  • upper() : 모두 대문자
  • capitalize() : 맨 첫글자만 대문자
  • title() : 알파벳 외의 문자로 나누어져 있는 영단어들 첫 글자를 대문자로
"abc-def efg".upper() #ABC-DEF EFG
"abc-def efg".capitalize() #Abc-def efg
"abc-def efg".title() #Abc-Def Efg

split(’구분자’, 분할횟수)

s = "Life is too short"
s.split() # 아무것도 없으면 공백을 기준으로 문자열을 나눈다.
['Life', 'is', 'too', 'short']

b = "a:b:c:d"
b.split(':')
['a', 'b', 'c', 'd']

c = "a,b,c,d,e,f,g"
c.split(',', 3) # ,기준으로 3개만 나누고 리스트를 반환함
['a', 'b', 'c', 'defg']

반복문

https://tagilog.tistory.com/1046

for 문

for 변수 in 시퀀스:
    실행할 코드

fruits = ["apple", "banana", "cherry"]
for fruit in fruits:
    print(fruit)

while 문

while 조건식:
    실행할 코드

x = 0
while x < 10:
    x += 1
    print(x)

배열 관련 메소드

  1. append(element): 리스트의 끝에 새로운 요소를 추가합니다.
  2. insert(index, element): 지정한 인덱스에 새로운 요소를 추가합니다.
  3. remove(element): 리스트에서 첫 번째로 발견된 해당 요소를 제거합니다.
  4. pop(index): 지정한 인덱스의 요소를 제거하고 반환합니다. 인덱스를 지정하지 않으면 리스트의 마지막 요소를 제거합니다.
  5. index(element): 해당 요소의 인덱스를 반환합니다. 요소가 리스트에 없으면 ValueError가 발생합니다.
  6. count(element): 리스트 내에서 해당 요소의 개수를 반환합니다.
  7. sort(): 리스트의 요소를 오름차순으로 정렬합니다.
  8. reverse(): 리스트의 요소를 역순으로 뒤집습니다.
  9. clear(): 리스트의 모든 요소를 제거합니다.
# 리스트 생성
my_list = [3, 1, 4, 1, 5, 9, 2, 6, 5]

# 요소 추가
my_list.append(8)

# 요소 삽입
my_list.insert(2, 7)

# 요소 제거
my_list.remove(1)

# 요소 추출
popped_element = my_list.pop(3)

# 요소 인덱스 확인
index_of_five = my_list.index(5)

# 요소 개수 확인
count_of_one = my_list.count(1)

# 정렬
my_list.sort()

# 역순으로 뒤집기
my_list.reverse()

# 리스트 초기화
my_list.clear()

배열 슬라이싱

a[start : end : step]

start : 시작할 위치

end : 끝낼 위치 (end는 포함하지 않음!! 그 전까지만 포함)

step : 보폭+방향 : 몇개씩 어느 방향으로 끊어서 가져올지

a = ['a', 'b', 'c', 'd', 'e']

// Index References
-------------------------------
|  a  |  b  |  c  |  d  |  e  |
-------------------------------
|  0  |  1  |  2  |  3  |  4  |          // 양수의 경우
-------------------------------
| -5  | -4  | -3  | -2  | -1  |          // 음수의 경우
-------------------------------

a[1:]
# ['b', 'c', 'd', 'e']

# 제일 뒤에서 -1을 시작으로 번호를 앞쪽으로 감소하면서 매긴다.
# -3일 경우 'e'가 -1, 'd'가 -2, 'c'가 -3
a[-3:]
# ['c', 'd', 'e']

# 처음부터 인덱스 1까지 가져오기
a[:2]
# ['a', 'b']

# 처음부터 인덱스 -1전까지, 즉 -2까지 가져오기
a[:-1]
# ['a', 'b', 'c', 'd']

a[2:4]
# ['c', 'd']

# -4 인덱스 부터 -2의 전까지, 즉 -3까지 가져오기
a[-4: -2]
# ['b', 'c']

# 인덱스 1~3까지 값 거꾸로 가져오기
a[3:0:-1]
# ['d', 'c', 'b']

# 2칸씩 건너뛰고 가져오기
a[ : : 2 ]
# ['a', 'c', 'e']

a[ -5 : : 3 ]
#['a', 'd']

# 전체 거꾸로 가져오기
a[ : : -1 ]
# ['e', 'd', 'c', 'b', 'a']

map()

map(함수, 리스트)

**reduce()**

누적산

reduce(함수, 시퀀스)

reduce(lambda x, y: x + y, [0, 1, 2, 3, 4])
# 10

reduce(lambda x, y: y + x, 'abcde')
# 'edcba'

lambda

람다(lambda) 함수는 이름이 없는 익명 함수입니다. 람다 함수는 일반 함수와 같이 입력값을 받아 출력값을 반환하는데, 간단한 함수를 한 줄로 작성할 수 있습니다.

람다 함수의 기본적인 문법은 다음과 같습니다.

lambda 인수: 표현식

예를 들어, 2를 곱하는 함수를 람다 함수로 작성하면 다음과 같습니다.

multiply = lambda x: x * 2
print(multiply(3))  # 6 출력

위의 코드에서, multiply 변수는 람다 함수를 할당한 변수입니다. 이 함수는 인수로 x를 받아 x에 2를 곱한 값을 반환합니다. 따라서 multiply(3)은 6을 반환합니다.

람다 함수는 주로 filter(), map() 함수와 함께 사용됩니다. 예를 들어, 리스트에서 홀수만 걸러내는 코드를 작성하면 다음과 같습니다.

my_list = [1, 2, 3, 4, 5]
odd_numbers = list(filter(lambda x: x % 2 == 1, my_list))
print(odd_numbers)  # [1, 3, 5] 출력

위의 코드에서, filter() 함수는 첫 번째 인수로 조건식을 받습니다. 이 조건식은 람다 함수로 작성됩니다. 람다 함수는 x가 홀수인지 판별하고, 홀수인 경우에만 True를 반환합니다. 따라서, odd_numbers 변수에는 [1, 3, 5]가 할당됩니다.

my_list = [1, 2, 3, 4, 5]
result = list(map(lambda x: x * 2 if x % 2 == 1 else x ** 2, my_list))
print(result)

위의 코드에서, square 변수에 람다 함수를 할당합니다. 이 함수는 입력값 x의 제곱을 반환합니다. 그리고 map() 함수를 사용하여 my_list의 각 원소에 square 함수를 적용합니다. 마지막으로, 결과값을 리스트로 변환하여 result 변수에 할당합니다. 따라서, result 변수에는 [1, 4, 9, 16, 25]가 할당됩니다.

(lambda x,y: x + y)(10, 20)
# 30

list(map(lambda x: x ** 2, range(5)))
# [0, 1, 4, 9, 16]

예외처리

파이썬에서 예외(Exception)란 프로그램이 실행되는 동안 발생하는 문제를 의미합니다. 예외는 보통 프로그래머가 의도하지 않은 상황에서 발생하며, 이러한 예외를 처리하지 않으면 프로그램이 중단될 수 있습니다. 파이썬에서는 try-except 구문을 사용하여 예외를 처리할 수 있습니다.

다음은 파이썬에서 예외를 처리하는 예시입니다.

try:
    x = int(input("숫자를 입력하세요: "))
    result = 10 / x
    print("결과는:", result)
except ValueError:
    print("숫자를 입력해야 합니다.")
except ZeroDivisionError:
    print("0으로 나눌 수 없습니다."

위의 코드에서, 사용자로부터 숫자를 입력받고 이를 변수 x에 할당합니다. 그리고 10x로 나눈 값을 result 변수에 할당하고, 이 값을 출력합니다. 하지만, 만약 사용자가 숫자 대신 문자열을 입력하거나, x0이 입력되는 경우에는 예외가 발생하게 됩니다.

따라서, 이러한 예외를 처리하기 위해 try-except 구문을 사용합니다. try 블록 내부의 코드가 실행되다가 예외가 발생하면, except 블록의 해당하는 예외 처리 코드가 실행됩니다. 위의 코드에서는 ValueErrorZeroDivisionError 예외를 처리하기 위해 각각 except 블록을 사용합니다.

만약 사용자가 숫자 5를 입력하면, 출력 결과는 다음과 같습니다.

숫자를 입력하세요: 5
결과는: 2.0

하지만, 사용자가 0을 입력하면 다음과 같은 결과가 출력됩니다.

숫자를 입력하세요: 0
0으로 나눌 수 없습니다.

객체지향 프로그래밍

파이썬은 객체지향 프로그래밍(Object-Oriented Programming, OOP)을 지원하는 언어로, 클래스와 객체를 이용한 프로그래밍을 할 수 있습니다. 객체지향 프로그래밍은 데이터와 해당 데이터를 처리하는 메소드(함수)를 하나의 단위로 묶어서 다루는 프로그래밍 패러다임입니다.

파이썬에서 클래스는 객체를 정의하는 틀입니다. 클래스는 멤버 변수(속성)와 멤버 함수(메소드)를 가질 수 있습니다. 객체는 클래스의 인스턴스(instance)이며, 클래스에서 정의한 멤버 변수와 멤버 함수를 상속받아 사용할 수 있습니다.

다음은 파이썬에서 클래스를 정의하는 예시입니다.

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def say_hello(self):
        print(f"안녕하세요, 저는 {self.name}이고, {self.age}살입니다.")

위의 코드에서 Person 클래스는 nameage라는 두 개의 멤버 변수를 가지고 있으며, __init__ 함수를 통해 이 변수들을 초기화합니다. say_hello라는 멤버 함수는 객체가 인사하는 메시지를 출력합니다.

위의 클래스를 이용해 객체를 생성하고 사용하는 예시를 보겠습니다.

person1 = Person("홍길동", 20)
person1.say_hello(

위의 코드에서 person1 객체는 Person 클래스의 인스턴스입니다. 이 객체를 생성할 때, __init__ 함수에 "홍길동"20이라는 두 개의 인자를 전달하였습니다. person1.say_hello() 코드는 Person 클래스의 say_hello 메소드를 호출합니다. 이 메소드는 person1 객체의 nameage 변수 값을 이용하여 메시지를 출력합니다.

실행 결과는 다음과 같습니다.


안녕하세요, 저는 홍길동이고, 20살입니다.

위와 같이, 객체지향 프로그래밍을 이용하면 클래스와 객체를 이용하여 데이터와 메소드를 한 덩어리로 묶어서 다룰 수 있습니다. 이를 통해 코드의 가독성과 재사용성을 높일 수 있습니다.

class Animal:
    def __init__(self, name, species):
        self.name = name
        self.species = species

    def __str__(self):
        return f"{self.name} ({self.species})"

class Dog(Animal):
    def __init__(self, name):
        super().__init__(name, species="dog")

    def bark(self):
        return "Woof!"

class Cat(Animal):
    def __init__(self, name):
        super().__init__(name, species="cat")

    def meow(self):
        return "Meow!"

class Shelter:
    def __init__(self):
        self.animals = []

    def add_animal(self, animal):
        self.animals.append(animal)

    def get_animals(self):
        return self.animals

    def get_dogs(self):
        return [animal for animal in self.animals if isinstance(animal, Dog)]

    def get_cats(self):
        return [animal for animal in self.animals if isinstance(animal, Cat)]

    def __str__(self):
        animal_list = [str(animal) for animal in self.animals]
        return f"Shelter with {len(self.animals)} animals: {', '.join(animal_list)}"

shelter = Shelter()
shelter.add_animal(Dog("Fido"))
shelter.add_animal(Cat("Kitty"))
shelter.add_animal(Dog("Buddy"))
shelter.add_animal(Cat("Lucy"))

dogs = shelter.get_dogs()
for dog in dogs:
    print(dog.bark())

cats = shelter.get_cats()
for cat in cats:
    print(cat.meow())

print(shelter)

# 답 
Woof!
Woof!
Meow!
Meow!
Shelter with 4 animals: Fido (dog), Kitty (cat), Buddy (dog), Lucy (cat)
profile
까먹지 않을 거예요

0개의 댓글