TIL 240219

hyeo71·2024년 2월 19일
0

2024 내배캠 AI 트랙

목록 보기
32/108

오늘 공부

  • 파이썬 문법 기초 1주차 강의

Python 문법

자료형

숫자형

a = 5
b = 4.8

연산자의미
+더하기
-빼기
*곱하기
/나누기(몫)
%나누기(나머지)
**거듭제곱

Bool

참/거짓을 나타내는 자료형

x = True
y = False


string

작은 따옴표 or 큰 따옴표를 사용

a = 'aa'
b = "aa"

문자열 간의 더하기는 문자열을 이어붙여 하나의 문자열로 반환

first_name = '성'
last_name = '이름'

print(first_name + last_name)			# 성이름
print(first_name + ' ' + last_name)		# 성 이름

a = '2'
b = '9'
print(a + b)	# 29

len('문자열')

문자열의 길이를 반환, 추후 list 등 다른 곳에서도 사용

print(len('hello'))		# 5

slicing

문자열을 원하는 부분만 나눠서 사용 가능

test[4:15]		# test[4] ~ test[14]

test[5:]		# test[5] ~ 끝까지

test[:9]		# 처음부터 ~ test[8]

test[:]			# 처음부터 끝까지

split('문자열')

문자열을 특정 문자열을 기준으로 나누고 싶을 때 사용

email = 'test@naver.com'

domain = email.split('@')[1].split('.')[0]
print(domain)	# naver

list, dictionary

list와 dictionary는 함께 사용할 수 있다.

list

순서가 있는, 다른 자료형들의 모임
len, indexing, slicing 사용 가능

추가하기(append)

test = [1, 2, 3]

test.append(4)			# [1, 2, 3, 4]

test.append([1, 2])		# [1, 2, 3, [1, 2]]

test += [1, 2]			# [1, 2, 3, [1, 2], 1, 2]

정렬하기(sort & sorted)

# sort
sample_list = [3, 2, 4, 1, 5]
sample_list.sort() # return data 없이 list 자체를 정렬

print(sample_list) # [1, 2, 3, 4, 5]

# sorted
sample_list = [3, 2, 4, 1, 5]
sorted_list = sorted(sample_list) # 정렬 된 list를 return

print(sorted_list) # [1, 2, 3, 4, 5]

# 잘못된 방법
sample_list = [3, 2, 4, 1, 5]
sorted_list = sample_list.sort() # .sort()의 return data는 None 입니다.

print(sorted_list) # None

sort()는 리턴값이 없이 해당 list자체를 정렬하기 때문에 변수에 넣지 않는다.
sorted()는 정렬된 리스트를 반환하기 때문에 기존의 list는 그대로 두고 정렬된 리스트를 변수에 저장

dictionary

key, value의 쌍으로 이루어진 자료의 모음
순서가 없어 indexing 사용 불가

person = {'name':'test', 'age':20}
print(person['name'])	# test

if

해당 조건에 만족할 때만 하위 코드를 실행

if 조건식:
	print('test1')
elif 조건식2:
	print('test2')
else:
	print('test3')

삼항연산자

num = 3

# 보통 방법
if num%2 == 0:
	result = '짝수'
else:
	result = '홀수'

# 삼항연산자
result = '짝수' if num%2 == 0 else '홀수'

for

숫자, list, dictionary 등 반복하고 싶은 자료를 반복

tests = ['라이언', '춘식이', '어피치']

for test in tests:
	print(test)			# 라이언
    					# 춘식이
                        # 어피치

삼항연산자

a_list  = [1, 3, 2, 5, 1, 2]

# 보통 방법
b_list = []
for a in a_list:
    b_list.append(a*2)
    
# 삼항연산자
b_list = [a*2 for a in a_list]

enumerate

인덱스와 값을 함께 사용 가능

tests = ['라이언', '춘식이', '어피치']

for i, test in enumerate(tests):
	print(i, test)			# 0, 라이언
    						# 1, 춘식이
                        	# 2, 어피치

break

반복문을 종료, 반복문이 전부 돌기 전에 종료할 경우가 필요할 때 사용

tests = ['라이언', '춘식이', '어피치']

for i, test in enumerate(tests):
	print(i, test)			# 0, 라이언
    if(i==1):				# 1, 춘식이
    	break

function

반복적으로 사용하는 코드들에 이름을 붙여 놓은 것, 재활용

def hello():
	print('안녕!')

hello()				# 안녕!

def mealtime(hour):
	if hour < 18:
    	return '아직 아니야! 더 공부해!'
   	else:
    	return '밥 맛있게 먹어!!'

print(mealtime(16))		# 아직 아니야! 더 공부해!
print(mealtime(19))		# 밥 맛있게 먹어!!

함수의 매개변수

def cal(a, b):
    return a + 2 * b

# 동일
print(cal(3, 5))
print(cal(a=3, b=5))

# 순서를 바꿔도 가능
print(cal(b=5, a=3))

# -----------------------

# default 값, 인수를 넘기지 않으면 default 값이 사용됨
def cal2(a, b=3):
    return a + 2 * b

# a=4, b=3 으로 입력
print(cal2(4))

# a=4, b=2 로 입력
print(cal2(4, 2))

# -----------------------

# 입력 인수의 개수를 지정하지 않고 사용하는 방법 (list에서 주로 사용)
# 함수 내부에서 args의 자료형은 tuple
def add(*args):
    result = 0
    for i in args:
        result += i
        
    return result

numbers = [1, 2, 3, 4]

# 결과 동일
print(add(*numbers))

print(add(1, 2, 3, 4))

# -----------------------

# 키워드 인수를 개수를 지정하지 않고 사용하는 방법 (dict에서 주로 사용)
def set_profile(**kwargs):
    profile = {}
    profile["name"] = kwargs.get("name", "-")
    profile["gender"] = kwargs.get("gender", "-")
    profile["birthday"] = kwargs.get("birthday", "-")
    profile["age"] = kwargs.get("age", "-")
    profile["phone"] = kwargs.get("phone", "-")
    profile["email"] = kwargs.get("email", "-")
    
    return profile

user_profile = {
    "name": "lee",
    "gender": "man",
    "age": 32,
    "birthday": "01/01",
    "email": "python@sparta.com",
}

# 결과 동일
print(set_profile(**user_profile))

profile = set_profile(
    name="lee",
    gender="man",
    age=32,
    birthday="01/01",
    email="python@sparta.com",
)

tuple, set

tuple

리스트와 비슷하지만 자료가 변하지 않는 불변인 자료형, 순서는 존재함

test = (1, 2, 3)

test[0] = 30	# error

set

집합을 구현하는데 사용하는 방법, 중복을 허용하지 않기 때문에 중복 제거를 할 때 사용하기도 한다.

test = [1,2,3,1,2,3,1,2,3,1,2,3,1]

test_set = set(test)

print(test_set)		# {1, 2, 3, 4, 5}

집합을 구현하기 때문에 교집합, 합집합, 차집합을 구할 수 있다.

print(a_set & b_set)  # 교집합
print(a_set | b_set)  # 합집합
print(a_set - b_set)  # 차집합

f-string

python 3.6 부터 사용 가능한 기능
% 서식문자, string.format과 같은 문자열 포맷팅 방법 중 하나

print(f'{변수명}의 저녁밥은 {변수명}이다.')

try, except

에러가 발생한 경우 그에 대한 처리를 하도록 하는 것

try:
	출석부의 사람 중 성인인 사람 출력
except:
	에러 발생 시 해당 구문 실행

출석부의 사람이 나이가 기재되지 않을 경우 에러가 발생하며 프로그램이 종료되지만 에러 발생 시 except 구문을 사용하여 에러 예외 처리를 할 수 있다.

if / elif와 같이 except를 연달아서 작성할 수 있다.


파일 가져오기

파일을 분리하고 분리한 파일의 함수, 클래스를 사용하고 싶은 경우 사용

main_test.py

from main_func import *

say_hi()

main_func.py

def say_hi():
	print('안녕!')

map, filter, lambda

map

리스트의 요소를 지정된 함수로 처리해주는 함수 (튜플도 가능)
원본 리스트를 변경하지 않고 새 리스트를 생성

def check_adult(person):
    if person['age'] > 20:
        return '성인'
    else:
        return '청소년'

result = map(check_adult, people)

# map 함수를 거치면 기존의 list or tuple로의 처리를 해줘야 한다.
# 안하면 map object가 출력
print(list(result))

lambda x

함수를 한 줄만으로 만들게 해주는 함수

result = map(lambda x: ('성인' if x['age'] > 20 else '청소년'), people)
print(list(result))

map, 삼항연산자를 사용하여 map의 코드와 동일한 기능의 함수를 한 줄로 구현 가능

filter

map 과 유사
필요한 데이터만을 추출 (조건식의 True)

result = filter(lambda x: x['age'] > 20, people)
print(list(result))

Class

데이터와 함께 기능을 함께 묶는 방법을 제공
새로운 클래스를 만들어 새로운 클래스의 새로운 인스턴스를 만들 수 있게 한다.
클래스에 의해 정의된 메서드도 가질 수 있다.
클래스를 과자 틀, 클래스를 사용해 만들어진 과자를 인스턴스(또는 객체)라 한다.

# 몬스터들의 HP를 관리하는 Class
class Monster():
    hp = 100
    alive = True

    def damage(self, attack):
        self.hp = self.hp - attack
        if self.hp < 0:
            self.alive = False

    def status_check(self):
        if self.alive:
            print('살아있다')
        else:
            print('죽었다')

# m, m2는 같은 Class 인스턴스를 가진 별개의 것
m = Monster()
m.damage(120)

m2 = Monster()
m2.damage(90)

m.status_check()
m2.status_check()

0개의 댓글