- 튜플
👉 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()
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)
1) 내가 구현에 성공해도 너무 코드가 비효율적이다...ㅜ.ㅜ
2) 아직 구현하려면 주어진 시간보다 훨씬 많은 시간이 필요하다...