0902 TIL

looggi·2022년 9월 2일
1

스파르타 내배캠 AI-3

목록 보기
4/130
post-thumbnail

파이썬 기초강의 1-15~19

확실히 뒷부분이 복잡하게 생겼당...

파일 불러오기

from main_func import *
# 사용할 특정함수이름만 쓸 수도 있음
#from 파일이름 import 내장함수이름/모두(*)

한줄의 마법

->어제 권기현 튜터님이 간단하게 쓰지 않으면 파이썬답지 않다고 한 게 이건가보다

  • if문 예제

원래 함수 모양:

num=3

if num%2 == 0:
    result='짝수'
else:
    result='홀수'

print(f'{num}은 {result}입니다')

이렇게 한줄이 된다!(전체를 감싸는 괄호는 생략가능)

num=3

result=('짝수' if num %2==0 else '홀수')

print(f'{num}은 {result}입니다')
  • 반복문 예제

그러고보니 파이썬 반복문은 i 가 필요없어서 참 간편
(위아래 리스트 정의/프린트 부분은 같으니까 이하생략)

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

for a in a_list:
    b_list.append(a*2)
    
print(b_list)    
b_list=[a*2 for a in a_list]

map,lambda,filter

  • map: ,앞의 함수를 ,뒤의 변수에 각각 적용시키겠다
people = [
    {'name': 'bob', 'age': 20},
    {'name': 'carry', 'age': 38},
    {'name': 'john', 'age': 7},
    {'name': 'smith', 'age': 17},
    {'name': 'ben', 'age': 27},
    {'name': 'bobby', 'age': 57},
    {'name': 'red', 'age': 32},
    {'name': 'queen', 'age': 25}
]
def check_adult(person):
    if person['age']>20:
        return '성인'
    else:
        return '청소년'

result=map(check_adult,people)
print(list(result))

# 리스트를 씌워주지 않으면 맵오브젝트라고 결과가 나온다. 리스트 형식에 다시 담아줘야
# 내가 원하는 결과물로 볼 수 있음

  • lambda: 보통 변수로 x를 사용하지만 안해도 ㄱㅊ
    -리스트 안의 요소 x에 대해서 조건에 부합할 경우 해당 값을 반환함
    -함수를 쓰기 위해 람다를 함수 앞에 써주는 듯함 ⭐한줄의 마법임⭐
    -함수를 싸는 괄호는 생략가능
result=map(lambda x: ('성인' if x['age']>20 else '청소년'), people)
  • filter: 조건에 맞는 경우만 골라서 반환
    반환하는 형태를 지정해주지 않았기때문에 당연히 리스트 형태 그대로 나옴(인자 2가지 필요)
result=filter(lambda x:x['age']>20, people)

함수 심화

  • 입력 순서/고정

원래 형태

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

result=cal(1,2)
print(result)
result=cal(b=1,a=2)

->이렇게 변수를 지정하면 순서가 상관없다!

정의할 때 변수 값을 고정해 놓으면
변수 값을 하나만 받으면 당연히 a에 들어가고,

def cal(a,1):
#생략
result=cal(1)

두개 다 받으면 고정된 값은 무시~!~! 7이 입력된다

result=cal(1,7)
  • *args: 인자를 무제한으로 받아서 리스트에 넣어준다
def cal(*args):
    for name in args:
        print(f'{name} 밥 먹어라~')

result=cal('영희','철수','바비','정진')
  • **kwargs: 값을 받아서 딕셔너리 형태로 저장
    근데 키값이 동일한게 계속 들어가면 안됨..
    키: 밸류 1:1로 갯수는 여러개도 상관없음
def cal(**kwargs):
    print(kwargs)

cal(name='영희',age=30)

  • 클래스: 언제 사용하는지 아는 게 중요함

객체 지향: 물체에 그에 관련된 속성을 넣어주고 컨트롤 가능한 함수를 붙여주어 메인에서는 함수만 불러서 물체를 제어

class monster():
    hp=100
    alive=True
# 첨에 살아있음을 표현함 

# 클래스에 포함된 함수2개 
   def damage(self, attack):
        self.hp=self.hp-attack
        if self.hp < 0:
            self.alive=False

    def status_check(self):
        if self.alive == True:
            print('살았당')
        else:
            print('죽었당')

-> if 문에서'== True'이 부분은 당연히 생략가능

# 각 몬스터는 인스턴스

m1=monster()
m1.damage(150)
m1.status_check()

m2=monster()
m2.damage(50)
m2.status_check()

알고리즘 실습

  • runtime error(value error)
    각각 입력을 받아야하는데 같이 입력을 받음
    (결과가 틀린 건 아니지만 설계된 거랑 다름)
x,y=map(int,input().split())

if x>0 and y>0:
    print('1')
elif x<0 and y>0:
    print('2')
elif x < 0 and y < 0:
     print('3')
elif x>0 and y<0:
    print('4')

->x따로 y따로 받으면 해결됨

  • 이상 이하(같은 의미의 기호를 사용할 땐 순서가 일정해야함)
    숫자=<x<=숫자 ❌-> and 연산자 사용하거나 숫자<=a<=숫자 ⭕

❗multiple/chaining comparison❗
->이런 것도 된당!!

  • range 함수 사용
for i in range(10):
    print(i)

->0부터 9까지 10개가 출력됨

  • range(a,b), range(a,b,c)
    범위: a이상 b미만
    간격: c
    a이상의 숫자를 b 간격으로 c미만까지
  • list[1:10]: list리스트의 list[1]~list[9]까지
  • list(range(10)): range명령으로 생성한 수열을 list로 만든다
  • min(iterable) : 반복가능한자료형(iterable/원형 iterate(v)) 중 최솟값을 반환
    ->하나의 문자열 안에서(ASCII),문자열끼리, 하나의 리스트안에서, 리스트끼리, 딕셔너리, 튜플, min(5,7,3,9,5) ⭕
    ->int, int와 str이 섞인 리스트(요소들끼리 비교 불가)❌
a=[3,99,100]
b=[4,5,6]
print(min(a,b))
# 젤 작은 값이 있는 a가 출력된다

발생한 에러들

  • runtime error:
    • value error: 윗글 참조
    • name error: 지정되지 않은 변수
      (파이썬에서 복사할 때 위에 input부분을 빼고 붙여서.. 몽총..)
    • attribute error: attribute reference or assignment fails
      ex)map(int,int().split())
      split이 문자열을 나눌 때 쓰는 함수기때문에 오류발생(문자열/정수 속성이 다름 type도 다른데 타입.. 클래스.. 속성.. 다 같은건가?? type(변수)-> 클래스가 나오자나?)

📚 내일 할 것:

profile
looooggi

0개의 댓글