20220902 TIL

2022. 9. 2. 16:04TIL(Today I Learnd)

    목차
a_list = [1,3,2,5,1,2] # 리스트 함수 선언

b_list=[a*2 for a in a_list] # a_list의 인자값들에 2씩 곱하는 반복문

print(b_list)​ # [2,6,4,10,2,4]

야무지게 하루를 보내보자


함수

def

버스 요금 검사기

def bus_r(ag): # def함수와 ag라는 값을 담는 bus_r이란 함수 선언
    if ag>65: # 만약 ag가 65보다 크다면
    	print('곧 가실분인데 버스 정도는 공짜로 타쇼') # 곧 가실분인데 버스 정도는 공짜로 타쇼 라고 출력하고
        return 0 # 0을 bus_r에 저장해
    elif ag>20: # 만약 ag가 20보다 크면 
    	print('돈 잘 버는 사람이 못버는 사람들 좀 위하고 그런겨 다 참고 해') #돈 잘 버는 사람이 못버는 사람들 좀 위하고 그런겨 다 참고 해 라고 출력하고
        return 1200 # bus_r에 1200을 저장해
    else: # 나머지는
    	print('사실 코묻은 돈이 제일 쏠쏠히 벌리는데 봐줬다') # 사실 코묻은 돈이 제일 쏠쏠히 벌리는데 봐줬다 라고 출력하고
        return 850 # bus_r에 850을 저장해

myr = bus_r(19) # bus_r안에 (19) 값을 저장하는 myr 함수 선언
print(myr) # myr 출력

#사실 코묻은 돈이 제일 쏠쏠히 벌리는데 봐줬다
#850

성별 판독기

def c_g(p): # def 함수 선언 p라는 값을 담는 c_g라는 변수 선언
    n = int(p.split('-')[1][:1]) # p라는 변수를 -를 기준으로 나누고 1번째의 1번째 까지의 str을 int 형태로 바꾼 것을 n이라는 변수에 저장
    if n % 2==0: # 만약 n을 2로 나눈 몫이 0이면
        print('female') # female 출력
    else: # 그렇지않다면
        print('male') # male 출력

c_g('100101-2012345') # p 값에 100101-2012345 저장되고 자동으로 위의 함수 실행 
c_g('100101-4012345') # p 값에 100101-4012345 저장되고 자동으로 위의 함수 실행
c_g('100101-1012345') # p 값에 100101-1012345 저장되고 자동으로 위의 함수 실행

# female
# female
# male

 

tuple = 불변형 리스트

a = (1,2,3,4)

a = [('minsu',18),('Ocean',22)

 


집합

a = [1,2,3,4,5,6,7,78,6,5,5,1]

a_set = set(a)
print(a_set)

b = ['감','배','사과','수박','수박','자몽']
c = ['배','사과','포도','참외','수박','참외','배']

b_set = set(b)
c_set = set(c)

print(b_set & c_set) #교집합
print(b_set | c_set) #합집합
print(b_set - c_set) #차집합
print(b_set ^ c_set) #대칭차집합

# {'배', '사과', '수박'}
# {'배', '감', '포도', '참외', '사과', '자몽', '수박'}
# {'감', '자몽'}
# {'포도', '참외', '감', '자몽'}

 


f-string

scores = [
    {'name':'영수','score':70},
    {'name':'영희','score':65},
    {'name':'기찬','score':75},
    {'name':'희수','score':23},
    {'name':'서경','score':99},
    {'name':'미주','score':100},
    {'name':'병태','score':32}    
] # scores 라는 변수에는 딕셔너리~~~~가 있는 리스트가 저장됨

for s in scores: # scores 안에서 s라는 변수 저장하고 반복문을 돌릴거다
    name = s['name'] # name 변수에는 s 안에있는 딕셔너리의 name에 대응하는 값을 저장
    score = str(s['score']) # score 변수에는 s안에있는 score에 대응하는 값을 str형태로 변환하여 저장
    print(name+'의 점수는 '+ score+'점입니다.') # name값에 '의 점수는' 에 score값에 '점입니다.' 추가하여 출력
	print(f'{name}의 점수는{score}점입니다.') # 위의 명령과 동일
# result  
# 영수의 점수는 70점입니다.
# 영희의 점수는 65점입니다.
# 기찬의 점수는 75점입니다.
# 희수의 점수는 23점입니다.
# 서경의 점수는 99점입니다.
# 미주의 점수는 100점입니다.
# 병태의 점수는 32점입니다.

예외처리

 

people = [
    {'name': 'bob', 'age': 20},
    {'name': 'carry', 'age': 38},
    {'name': 'john', 'age': 7},
    {'name': 'smith', 'age': 17},
    {'name': 'ben', 'age': 27},
    {'name': 'bobby',}, #-------- 혼자만 age가 빠짐---------
    {'name': 'red', 'age': 32},
    {'name': 'queen', 'age': 25}
] # people 변수에 딕셔너리 저장

for p in people: # people을 p에 저장시켜 반복문
    try: # 에러 발생해도 진행함
        if p['age'] >20: # 만약 p값에 있는 age에 대응하는 값이 20보다 크면
            print(p['name']) # p값에 있는 name에 대응하는 값들을 출력해라
    except: # 에러가 발생할 시
        print(p['name'], '에러입니다.') p값에 있는 name에 대응하는 값과 에러입니다. 라는 문자를 출력해라.
        
# carry
# ben
# bobby 에러입니다.
# red
# queen

남용하면 이상해질 수 있으니 많이 안쓰는게 좋대요

 


파일 불러오기(다른 파일 함수 불러오기)

두개의 파일이 있을 때

func 파일에 함수를 집어넣고 test 파일에 불러오는 법

test 파일 상단에

from main_func import *

라고 입력해주자

그러면 html에서 부트스트랩이나 에이잭스 불러오는 것 처럼 추가 된다 ㅎㅎ

 


한줄의 마법

 

파이썬은 웬만해서 한줄로 코드 작성이 가능하다고 한다.

if 문

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

print(f'{num}은 {result}이다')

num=4
result = ('짝' if num % 2 == 0 else '홀')
print(f'{num}은 {result}이다') # 괄호가 없어도 된다

로 줄여쓰며 동일한 값을 출력한다.

 

 

for문

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

b_list = []

for a in a_list:
    b_list.append(a*2)

print(b_list)

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

b_list=[a*2 for a in a_list]

print(b_list)

로 줄일 수 있으며

동일한 결과값 [2, 6, 4, 10, 2, 4]이 출력된다.

이건 아직 힘드네...

 

 


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 ca(p):
    return ('성인' if p['age'] > 20 else '청소년')
# 이 수식은
#    if p['age']>20:
#        return '성인'
#    else:
#        return '청소년' 와 똑같은 값을 가진다

r = map(ca, people)
print(list(r))

여기에 lamda식을 쓰면

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}
]
r = map(lambda p: ('성인' if p['age'] > 20 else '청소년'), people)
print(list(r))

걍 뭐 함수도 없어지는데 이게 뭐냐

 


filter

참인 변수만 갖고오는거

 

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}
]
r = filter(lambda x: x['age']>20, people)

print(list(r))


# 결과는 [{'name': 'carry', 'age': 38}, {'name': 'ben', 'age': 27}, {'name': 'bobby', 'age': 57}, {'name': 'red', 'age': 32}, {'name': 'queen', 'age': 25}]

아 씨 머리아파

 


함수 심화로는 매개변수가 있는데

cal, 

*args

**kwargs

등이 있고 머리 터질거 같으니 걍 이렇게 생긴애가 있다만

알아놓고 넘어가자

 


클래스

Html에도 있던 class

 

class Monster(): # Monster라는 class생성
    hp = 100 # 100을 파라미터로 갖는 hp 함수 생성
    alive = True # True 인자값을 갖는 alive 함수 생성 

    def damage(self, attack): # self와 attack을 인자값으로 갖는 def damage생성
        self.hp = self.hp - attack # hp는 hp에서 어택 받은 값만큼 감소
        if self.hp < 0: # 만약 hp가 0 밑으로 내려가면
            self.alive = False # alive가 False 값을 갖게됨 

    def status_check(self): # self를 인자값으로 갖는 def status_check 생성
        if self.alive: #self.alive가 True일 경우
            print('살았다') #살았다 출력
        else:				#아니면
            print('죽었다')  #죽었다 출력


m1 = Monster() # Monster값을 치환하는 m1 함수 생성
m1.damage(150) # m1함수를 150만큼 damage안의 attack에 대입하여 실행
m1.status_check() #m1을 self값에 대입하여 스테이터스 체크 실행 -> print 죽었다

m2 = Monster() # Monster값을 치환하는 m2 함수 생성
m1.damage(90) # m2함수를 90만큼 damage안의 attack에 대입하여 실행
m2.status_check() #m2을 self값에 대입하여 스테이터스 체크 실행 -> print 살았다

게임 몬스터 hp 구조

 


이상으로 파이썬 1주차 문법 수업 완강...

아 ... 머리에 들어오는게 너무 많다요...

 


백준 문제 풀기

 

3003번 문제

 

체스말의 갯수를 검토하고 부족하거나 빼야할 것들을 표시하는 함수

체스말은 총 16개 [king 1, queen 1, rook 2, bishop 2, knight 2, pawn 8]

 

 

king, queen, rook, bishop, knight, pawn = map(int, iput().split()) 
# 말들의 숫자에 대응할 함수들을 list 형태 안에서 int 형태로 입력 받을 수 있도록 선언

king = 1 - king
queen = 1 - queen
rook = 2 - rook
bishop = 2 - bishop
knigh = 2 - knight
pawn = 8 - pawn
# 각 말의 원래 갯수 - 입력된 갯수 = 찾거나 빼야 할 말의 갯수

print(king, queen, rook, bishop, knight, pawn)
# 총 갯수 출력
# 1 1 2 2 2 8 이 정상 숫자
# 0 0 2 1 3 5 입력시
# 1 1 0 1 -1 3 출력

 

같은 수식을 짧게 하려면 for 문을 이용한다

chess_pieces = [1, 1, 2, 2, 2, 8] 
# 체스말 원래 갯수 리스트 형태로 선언

my_pieces = list(map(int, input().split()))
# 입력 할 체스말 갯수 변수 선언
# 항목을 입력 받을 거야 입력될 애들은 공백으로 구분할거야
# 입력된 애들은 int 형식이 될거야
# 입력된 애들은 list 형태로 묶을거야

for i in range(6): # i라는 함수 안에 순서대로 반복해서 0 1 2 3 4 5 집어 넣을거야
	print(chess_pieces[i] - my_pieces[i], end=' ')
    # 원래 갯수[순서대로 반복된 리스트] 들을 입력 갯수[순서대로 반복된 리스트] 대로 빼주는 결과값을
    # \n(엔터키)가 아닌 ' '(공백 space)으로 쭉 정렬해서 출력해줄거야
    
 # 0 1 2 2 2 7 입력시
 # 1 0 0 0 0 1 출력
 
 # 2 1 2 1 2 1 입력시
 # -1 0 0 1 0 7 출력

for문 쉽지 않다 ㅎㅎ

'TIL(Today I Learnd)' 카테고리의 다른 글

20220906 TIL  (0) 2022.09.06
20220905 TIL  (2) 2022.09.05
20220901 TIL  (0) 2022.09.01
20220831TIL  (2) 2022.08.31
20220830TIL  (0) 2022.08.30