[11.09] 내일배움캠프[Spring] TIL-8

박상훈·2022년 11월 9일
0

내일배움캠프[TIL]

목록 보기
8/72

[11.09] 내일배움캠프[Spring] TIL-8

1. python 기초 다지기

  • 튜플
    👉 list의 자료형과 비슷하지만 불변형 성질!
    👉 데이터 추가, 수정이 안된다!!
a = ('사과','감','배') -> a[1] = '수박' -> 안바뀜!! 에러!! ->
바꾸는 것 뿐이아닌 새로 추가도 안된다. 
  • 집합
    👉 중복이 제거 된 리스트형태
a=[1,2,3,4,5,6,7,8,7,1]
a_set = set(a) -> {1,2,3,4,5,6,7,8} -> 중복이 제거된다.

a=['사과','감','배']
b=['사과','수박','참외']

a_set = set(a)
b_set = set(b)

print(a_set & b_set) -> 교집합
print(a_set | b_set) -> 합집합
print(a_set - b_set) -> 차집합
  • f - String
    👉 스트링 형태로 변수와 말을 이어줄 때 +로 다 이어줄 필요 X
scores = [
    {'name':'영수','score':70},
    {'name':'영희','score':65},
    {'name':'기찬','score':75},
    {'name':'희수','score':23},
    {'name':'서경','score':99},
    {'name':'미주','score':100},
    {'name':'병태','score':32}
]

for s in scores:
    name = s['name']
    score = s['score']
    print(name+'의 점수는 '+str(score)+'점 입니다.')
    print(f'{name}의 점수는 {score}점입니다.')
  • 예외처리
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}
]

for person in people:
    try:
      if person['age'] > 20 :
         print(person['name'])
    except:
        print('에러입니다.')  --> java의 try catch와 유사!

👉 try구문 남용시 오류찾기 힘들고 프로그램 자체의 위험도가 증가함!

  • 파일 불러오기
    👉 ex) 상세적인 메서드의 정의나 로직은 다른 py파일에서하고, 다른 py파일에서 그걸 가져와서 쓰고 싶다!!
    👉 핵심 메서드 파일 main_func.py / 구현 파일 main_test.py
  • main_func.py
def say_hi():
    print('안녕')

def say_hi_two(name):
    print(f'{name}님 안녕하세요!')
  • main_test.py
from main_func import *
# from main_func import say_hi_two 특정 한 것만 임포트 가능!!
say_hi()
say_hi_two('영수')
  • 삼항연산자 - if
num = 3

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

print(result)
  • 삼항연산자 - for
a_list = [1,3,2,5,2]

b_list = [a*2 for a in a_list]

print(b_list)
  • 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))
--> check_adult를 people가지고 걸쳐서 '성인' or '청소년'을 result에 담음.
  • Lamda
result = map(lambda person : ('성인' if person['age'] > 20 else '청소년'),people)
  • filter
result = filter(lambda person : person['age'] > 20,people)
-> 20이상인 값만 가져옴
  • 함수 매개변수의 심화
* 기본형
def cal(a,b)
    return 2+a*b

result = cal(1,2) = 5
result2 = cal(b=2,a=1) = 5 # 지정형 순서 상관 X

함수 def cal(a,b) -> def cal(a,b=2) 
-> b 매개변수를 넣어주지 않았을 때 기본 값 2를 고정한다.
  • 파이썬에서 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("죽었다!")
            
            
m1 = Monster()
m1.damage(150)
m1.status_check()

m2 = Monster()
m2.damage(90)
m2.status_check()

2. 파이썬 알고리즘

1) 알파벳 a~b까지 랜덤으로 배열된 문자열 받았을 때 제일 첫번째로 반복되지 않는 수 도출하기

  • 내가 짠 코드( 구현성공 )
input = "abadabac"

def find_not_repeating_character(string):
    find_r: str = ''
    for one in string:
        count = 0
        for two in string:
            if one==two:
                count+=1
        if count<2:
            find_r = one
            break

    return find_r

result = find_not_repeating_character(input)
print(result)
  • 튜터님 코드( 기존의 a~z 빈도수 찾는 예제 응용 하신듯 )
def find_not_repeating_first_character(string):
    alphabet_occurrence_array = [0] * 26

    for char in string:
        if not char.isalpha():
            continue
        arr_index = ord(char) - ord("a")
        alphabet_occurrence_array[arr_index] += 1

    not_repeating_character_array = []
    for index in range(len(alphabet_occurrence_array)):
        
        alphabet_occurrence = alphabet_occurrence_array[index]

        if alphabet_occurrence == 1:
            not_repeating_character_array.append(chr(index + ord("a")))

    for char in string:
        if char in not_repeating_character_array:
            return char

    return "_"


result = find_not_repeating_first_character
print("정답 = d 현재 풀이 값 =", result("abadabac"))

2) 입력 받은 정수 아래의 숫자 중 소수(prime)을 구해라.

  • 내가 짠 코드( 구현 성공 )
input = 20


def find_prime_list_under_number(number):
   # 반복 돌면서 그 숫자의 아래숫자들로 나눠봤을 때 나머지가 0이 나오는 경우가 1가지라도 있다면 소수 X
    input_arr = []
    for num in range(number):
        if num != 0 and num != 1:
            input_arr.append(num)


    input_arr2 = []
    for res in input_arr:
        count = 0
        for res2 in range(res):
            if res2 == 0 or res2 == 1:
                continue
            else:
                if res%res2==0:
                    count+=1
        if count<1:
            input_arr2.append(res)
    return input_arr2

    # 이 부분을 채워보세요!
    # return []


result = find_prime_list_under_number(input)
print(result)
  • 튜터님의 코드
input = 20


def find_prime_list_under_number(number):
    prime_list = []
    for n in range(2, number + 1):
        for i in range(2, n):
            if n % i == 0:
                break
        else:
            prime_list.append(n)

    return prime_list


result = find_prime_list_under_number(input)
print(result)

3. 느낀점⭐

1) 내가 구현에 성공해도 너무 코드가 비효율적이다...ㅜ.ㅜ
2) 아직 구현하려면 주어진 시간보다 훨씬 많은 시간이 필요하다...

profile
기록하는 습관

0개의 댓글