[포스코x코딩온] 스마트 팩토리 과정 11주차 회고 | 파이썬

Dana·2023년 6월 3일
0

파이썬

출력: print()

  • 여러 개 출력 시 쉼표(,)로 구분 → 무조건 띄어쓰기가 하나 들어간다
  • 띄어쓰기를 없애려면 sep옵션 추가
  • 엔터 없이 출력하려면 end옵션 추가
print("Hello", "World!", sep="")
print("안녕하세요", end="")

문자열 함수

  • len() : 문자열의 문자 개수를 반환
  • count() : 찾을 문자열이 몇 개 들어있는지 개수 반환
  • upper() : 문자열을 알파벳 대문자로 반환
  • lower() : 문자열을 알파벳 소문자로 반환
  • find, rfind() : 왼쪽, 오른쪽부터 해당 문자의 위치 찾음
  • split() : 문자열을 공백이나 다른 문자로 나누어 리스트로 반환

리스트

  • 리스트(list) : 자료 목록, 하나의 변수에 여러 값을 할당하는 자료형
  • 리스트 연산 - 더하기, 반복, 길이 len()

리스트 함수

  • sort()
  • reverse()
  • append(item)
  • remove(item)
  • insert(idx, item)
  • pop(), pop(idx)
  • del list_name[idx], del list_name[idx:idx]
  • index(item)
  • count(item)

자판기 프로그램

vending_machine = ['게토레이','게토레이','레쓰비','레쓰비','생수','생수','생수','이프로']

def check_machine():
    print("남은 음료수: ", vending_machine)
    print()

def is_drink(drink):
    if drink in vending_machine:
        return True
    else:
        return False
    
def add_drink(drink):
    vending_machine.append(drink)
    print("추가 완료")
    vending_machine.sort()

def remove_drink(drink):
    vending_machine.remove(drink)

print("\n사용자 종류를 입력하세요:\n1. 소비자\n2. 주인")
n = input()
if n=="1" or n=="소비자":
    drink = input("마시고 싶은 음료? ")
    if is_drink(drink):
        print(f"{drink} 드릴게요")
        remove_drink(drink)
        check_machine()
    else:
        print(f"{drink} 지금 없네요")
else:
    print("할 일 선택:\n1. 추가\n2. 삭제")
    work = input()
    if work=="추가" or work=="1":
        check_machine()
        drink = input("추가할 음료수? ")
        add_drink(drink)
        check_machine()
    else:
        check_machine()
        drink = input("삭제할 음료수? ")
        if is_drink(drink):
            remove_drink(drink)
            print("삭제 완료")
            check_machine()
        else:
            print(f"{drink} 지금 없네요")

튜플(tuple)

  • 읽기 전용 리스트, 리스트처럼 요소를 일렬로 저장
t1 = (10, 20, 30)

셋(set)

  • 집합을 표현하는 자료형
  • 중복된 문자는 한번만 저장된다
  • 요소의 순서가 정해져 있지 않아서 매번 요소의 순서가 바뀐다
set1 = set()
set1 = {}
number1 = {1, 2, 3, 4, 5}
number2 = set([1, 1, 2, 2, 3, 4, 5])
apple = set('apple') # {'e', 'l', 'p', 'a'}

number1.add(6)
number1.remove(1)
number1.pop()

딕셔너리(dictionary)

  • 키-값 쌍이 하나로 묶이는 자료구조
dict1 = {}
dict1 = dict()
dict1[4] = 'd'
del(dict1[4])

dict1[100] # KeyError
dict1.get(100) # None

dict1.keys()
dict1.values()
for k in dict1.keys():
    print(dict1[k])

map()

  • map(함수, 반복 가능한 객체) : 반복 가능한 객체를 함수에 넣어서 실행
def capitalize(str):
    return str.upper()

result = map(capitalize, ["a","b","c"])

클래스

  • 클래스는 자료형을 위한 일종의 템플릿
  • 파이썬에서 객체 지향 프로그래밍을 사용하기 위한 방법
class 클래스이름: # 클래스 선언
    pass

변수 = 클래스이름() # 인스턴스 생성

클래스 변수(필드, Field)

  • 필드는 클래스를 정의할 때 정의되는 변수
class Movie:
    title="BossBaby"

movie1 = Movie()
print(movie1.title)

클래스함수(메소드, Method)

  • 메소드 선언 시 첫 번째 매개변수로 self 필수 작성
  • 클래스를 인스턴스화 하지 않고 호출해서 사용하는 경우에는 필요 없음
  • 호출할 때 self에 값을 직접 넘겨주지 않음(자동 할당)
  • self는 키워드가 아닌 식별자이므로 다른 이름을 사용할 수 있지만 개발자들의 약속
class Movie:
    #field
	  name: ''

    #method
    def print_msg(msg):
	      print(msg)

    def modify(self, movie):
        self.name=movie

Movie.print_msg('print하기')
movie1 = Movie()
movie1.modify('name1')

생성자(Constructor)

  • 클래스를 호출할 때 가장 먼저 실행되는 부분
  • 생성자 정의는 메서드 정의와 동일하며 메서드 이름을 init 으로 지정한다
class Movie:
    def __init__(self, title):
        self.title = title
        print("Hello I'm Movie Class")

movie1 = Movie("bossbaby")
print(movie1.title)

클래스 변수 vs 인스턴스 변수

  • 인스턴스 변수 : 인스턴스 공간 내에 존재, 인스턴스를 생성해야 사용할 수 있다
  • 클래스변수 : 클래스 공간 내에 존재, 메서드 안에서 클래스이름.변수명으로 접근
  • 클래스변수는 인스턴스 변수와 다르게 모든 인스턴스가 다 같은 값을 갖는다

접근제어

  • 파이썬은 기본이 public
  • Public : 어디서나 접근 가능
  • Private : 해당 클래스 내에서만 접근 가능.
    • 해당 멤버 앞에 __(double underscore)를 붙여서 표시
  • Protected : 보통은 해당 클래스와 하위 클래스 내에서만 접근가능이라는 의미지만 파이썬에서는 실제 제약되지는 않고 일종의 경고 표시로 사용
    • 해당 멤버 앞에 _(single underscore)를 붙여서 표시
class Movie:
    count = 0
    def __init__(self, title, audience):
        self.__title=title
        slef._audience = audience
        Movie.count += 1
    def get_title(self):
        return self.__title

movie1 = Movie("bossbaby", 100)
print(movie1.__title) # 오류 발생
print(movie.get_title())
print(movie1._audience) # 오류가 발생하지 않음. 다른 언어와의 차이점
print(Movie.count)

클래스 상속

  • 기존의 클래스가 가지고 있는 필드와 메서드를 그대로 물려받는 새로운 클래스를 만드는 것
  • 자식 클래스를 선언할 때 소괄호로 부모 클래스 포함시키기
class Country:
    def __init__(self):
        self.name="나라이름"
    def show(self):
        print("국가 클래스의 메소드")

class Korea(Country):
    def __init__(self,name):
        self.name=name
    def show_name(self):
        print("국가 이름은:",self.name)

country=Korea("대한민국")
country.show()
country.show_name()

메서드 오버라이딩

  • 부모 클래스의 메서드를 자식 클래스에서 재정의 하는 것

추상클래스

  • 추상 메소드를 한 개 이상 가지고 있는 클래스
  • 자식클래스에서 해당 추상 메소드를 반드시 구현하도록 강제한다
  • 추상클래스로는 객체를 생성할 수 없다
from abc import *

class Country(metaclass=ABCMeta): # 추상 클래스 만들기
    def __init__(self, name):
        self.__name = name

    @abstractmethod
    def show_detail(self): # 추상 메소드 만들기
        pass

    def get_name(self):
        return self.__name

class Korea(Country):
    def __init__(self, name):
        super().__init__(name)

    def show_detail(self):
        print("나라 이름은 : ", self.get_name())
    

country = Korea("한국")
country.show_detail()

모듈

  • 여러 기능이 뭉쳐진 하나의 .py파일
  • 코드를 분리하고 공유하는 일
  • 표준 모듈: Python 기본 내장
  • 외부 모듈: 직접 만든 모듈

표준 모듈 - math 모듈

  • 수학적 연산에 사용
  • floor(n) : 내림 함수
  • ceil(n) : 올림 함수
  • fabs(n) : n의 절대값
  • sqrt(n) : n의 제곱근
  • factorial(n) : n의 팩토리얼

표준 모듈 - random 모듈

  • 랜덤 값(난수) 생성 시 사용
  • randint(a,b) : a부터 b까지 임의의 정수 리턴
  • uniform(a,b) : a부터 b까지 임의의 실수 리턴
  • random() : 0부터 1 사이 임의의 실수 리턴
  • randrange(a,b,step) : a부터 b사이 step만큼 지정된 간격으로 임의의 정수 리턴

파일 입출력

  • 파일 객체 = open(파일 이름, 파일 열기 모드)
  • 파일 객체.close()

파일 열기 모드

  • r : 파일 읽기
  • w : 파일에 데이터 쓰기. 기존 내용이 모두 사라지고 새로 작성한다
  • x : 새로운 파일 생성, 같은 이름이 존재하면 error
  • a : 파일 뒷부분에 데이터 추가
  • b : 파일을 바이너리 데이터로 본다
  • t : 파일을 텍스트 데이터로 본다
    • : 기존 파일 업데이트를 위해 파일을 연다
f=open("text.txt", "w")
f.write("Hello World \n")
f.close()

f = open("test.txt", "r")
print(f.read())
f.close()
  • read() : 파일의 내용 전체를 문자열로 반환
  • readline() : 한줄씩 읽기
  • readlines() : 파일의 모든 줄을 읽고, 각각의 줄을 요소로 갖는 리스트 반환
  • seek(위치) : 해당하는 위치로 커서 이동
  • tell() : 커서의 현재 위치 반환
f=open("test.txt","r")
print(f.read())
f.seek(0) # 커서를 맨 앞으로 이동
pirnt(f.tell())
context = f.readlines() # 각 줄을 리스트로 반환
for line in context:
    line = line.strip() # 줄바꿈 문자 제거
f.close()

# 한 줄씩 읽기
f=open("test.txt", 'r')
while True:
    line = f.readline()
    if not line:
        break
    print(line)
f.close()

예외처리

  • 에러가 발생할만한 부분을 예측하여 미리 예외 상황에 대한 처리를 하는 것
  • Try 블록에서 발생한 예외를 except 블록에서 처리한다

발생 가능한 예외 종류

  • IndexError : 리스트 인덱스 범위 오류
  • ValueError : 부적절한 값을 가진 인자를 받았을 때 발생하는 에러
  • ZeroDivisionError : 0으로 나눌 때 발생하는 오류
  • NameError : 존재하지 않는 변수를 호출 할 때
  • FileNotFoundError : 존재하지 않는 파일을 호출할 때
try:
    num = int(input("숫자 입력: "))
except ValueError:
    print("정수가 아님! 정수를 입력해주세요!")
except ValueError as msg:
    print(msg) # 시스템이 보내는 예외메세지 출력 가능

try:
    # 예외가 발생할 수 있는 문장
except:
    # 예외 발생시 실행할 문장
else:
    # 예외가 없는 경우에 실행

0개의 댓글