: ( ) 로 묶어준 자료형, 불변형이다.
a = ('호떡','붕어빵','호빵')
# 변형하려고 하면 에러가 발생한다.
# a[1] = '핫초코' => 에러
print(a[1])
a = [1,2,3,4,5,6,7,8,9,5,3,2,1,5,2]
a_set = set(a) # 중복이 제거되서 나옴
print(a_set)
교집합, 합집합, 차집합 구하기
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) # 차집합구하기
scores = [
{'name':'민지','score':90},
{'name':'하니','score':65},
{'name':'해린','score':75},
]
for s in scores:
name = s['name']
score = str(s['score'])
print(name + '의 점수는 ' + str(score) +'점 입니다.')
# 위처럼 출력한 내용을 f-string을 이용해 아래와 같이 쓸 수 있다.
print(f'{name}의 점수는 {score}점 입니다.')
# f-string 사용은 앞에 f만 붙이면 됨!
: 에러로 인해 작업이 중단되지 않고, 계속 실행될 수 있도록 함.
people = [
{'name': 'ive', 'age': 20},
{'name': 'jeans', 'age': 38},
{'name': 'black' },
{'name': 'pink', 'age': 42},
{'name': 'aespa', 'age': 15}
]
for person in people: # 에러로 인해 작업이 중단되지 않고, 계속 실행될 수 있도록 함.
try:
if person['age'] > 20:
print(person['name'])
except:
print(person['name'], '에러입니다.')
: from 뒤에 파일이름 적고 import하기.
import * 은 전부 불러오기, import 원하는 함수명 으로 원하는 함수만 불러올 수도 있음
# 파일_1
def say_hi():
print('안녕!')
def say_hi_to(name):
print(f'{name}님 안녕하세요!')
# 파일_2
from main_func import say_hi_to
# say_hi()는 호출하지 않아 파일_2에 작성할 경우 에러.
say_hi_to('희현')
: (True 값) if (조건) else (False 값)으로 항이 3개이다.
num = 5
# if num % 2 == 0:
# result = '짝수'
# else:
# result = '홀수'
# 위의 코드를 아래와 같이 축약해서 작성할 수 있다.
result = ('짝수'if num % 2 == 0 else '홀수')
print(f'{num}은 {result}입니다.')
a_list = [1,4,5,6,2]
b_list = []
# for a in a_list:
# b_list.append(a*2)
# 위의 코드를 아래와 같이 쓸 수도 있다.
b_list = [a*2 for a in a_list]
# a_list 안에 있는 a를 돌리는데, 그때마다 a에 2를 곱하고 리스트로 묶어라
print(b_list)
# => [2, 8, 10, 12, 4]
: 리스트의 모든 원소를 조작하기
people = [
{'name': 'ive', 'age': 20},
{'name': 'jeans', 'age': 18},
{'name': 'black', 'age': 50},
{'name': 'pink', 'age': 42},
{'name': 'aespa', 'age': 15}
]
def check_adult(person):
if person['age'] > 20 :
return '성인'
else :
return '청소년'
return ('성인' if person['age'] > 20 else '청소년')
result = map(lambda person:('성인' if person['age'] > 20 else '청소년'),people)
# people을 가지고 하나씩 person에 넣으면서 돌텐데, 그 person을 가지고 이렇게 리턴해라
: True인것만 나타내라!
result = filter(lambda x: x['age'] > 20, people)
print(list(result)) # return 값을 리스트를 만들어라
매개변수는 직접 값을 지정할 수 있다.
def cal(a, b):
return a + 2 * b
result = cal(b=2, a=1) # 매개변수에 직접값을 지정하면 순서를 안맞춰도 된다.
print(result)
특정 매개변수에 디폴트 값을 지정할 수 있다.
def cal(a, b=2):
return a + 2 * b
result1 = cal(1) # b를 안넣어도 계산이 됨.
result2 = cal(1,3) # 넣은 값으로 계산이 됨
print(result1) =>5
print(result2) =>7
*args
:변수(인자)를 무제한으로 넣을 수가 있음 => list로 받아서 쓸 수 있음
def cal(*args)
for name in args:
print(f'{name}야 놀자~')
cal('짱구','철수','유리')
**kwargs
: 키워드 인수를 여러 개 지정해서 넣을 수 있다.
딕셔너리로 출력되어, 그대로 갖다 쓸 수 있게 만들어 놓았고, 추가도 가능하다. 라이브러리의 코드를 헤쳐서 볼때 도움이 된다고 함.
def cal(**kwargs):
print(kwargs)
cal(name = 'bob',age = 30, height = 178)
# => {'name': 'bob', 'age': 30, 'height': 178}
: 똑같은 무엇인가를 계속해서 만들어 낼 수 있는 설계 도면
# 예시로 게임의 몬스터를 class로 만듬
class Monster():
hp = 100
alive = True
def damage(self, attack):
self.hp = self.hp - attack
# 내 hp니까 self. / 내 hp에서 attack만큼 줄어들거야!!
if self.hp < 0: # 내 hp가 0보다 작아졌다면
self.alive = False # alive 상태가 False
def status_check(self): # 살았는지 죽었는지 반환
if self.alive == True:
print('alive')
else:
print('dead')
m1 = Monster()
m1.damage(150) # 데미지를 150주었다.
m1.status_check() # => dead
m2 = Monster()
m2.damage(98) # 데미지를 98주었다.
m2.status_check() # => alive
: 알고리즘은 문제를 해결하기 위한 여러가지 동작들의 모임.
( 요리할 때, 도구와 재료가 자료구조라면 레시피가 알고리즘 ! )
적은 공간, 빠른 속도로 수행되는 프로그램이 좋은 프로그램이기 때문에,
그런 프로그램을 구현하기 위해 알고리즘을 알아야한다.
input = [3, 5, 6, 1, 2, 4]
def find_max_num(array):
for num in array:
for compare_num in array:
# 이중반복문 ! 대조군과 비교하기위해 이중반복문을 사용함.
if num < compare_num:
break
# 대조군인 num을 compare_num과 비교했을 때 작으면 해당 대조군의 반복을 멈추고
else:
# for else 문 : break가 동작하지 않았을 때의 코드를 작성
return num # 남은 대조군의 반복을 실행하여 살아남은 num을 return함.
result = find_max_num(input)
print(result)
def find_alphabet_occurrence_array(string):
alphabet_occurrence_array = [0] * 26
#비트맵자료구조 : 내 특정인덱스에 카운팅을 늘리고, 이 인덱스에 대한 카운팅을 얻기 위해 쓰는 자료구조 / 26개의 카운팅을 쉽게 기록하기 위해서
for char in string: # string 안에서 char라는 변수로 반복문 실행
if not char.isalpha(): #필터링 과정 : 알파벳이 아니면 넘기자는 의미!
continue
arr_index = ord(char) - ord('a')
#char의 아스키코드 값에서 a의 아스키 코드값을 빼면 해당 알파벳의 인덱스가 나옴.
alphabet_occurrence_array[arr_index] += 1
# 해당 인덱스가 나올때마다 그 인덱스 값에 1을 추가한다.
return alphabet_occurrence_array # array를 리턴
print(find_alphabet_occurrence_array("hello my name is sparta"))
input = "hello my name is sparta"
: ord()는 문자를 아스키코드로 변환해 주는 함수
chr()은 아스키 코드 값을 문자로 변환해 주는 함수
input = "hello my name is sparta"
def find_max_occurred_alphabet(string):
# 알파벳 별 빈도수를 저장하기 위한 길이가 26인 0으로 초기화된 배열을 만든다.
alphabet_occurrence_array = [0] * 26
# string 안에서 char라는 변수를 담아서 꺼낸다.
for char in string:
# 만약 char가 알파벳이 아니라면
if not char.isalpha():
# for문 실행을 계속하고
continue
# arr_index라는 변수에 char의 아스키코드값에서 'a'의 아스키 코드값을 빼서 저장한다.
arr_index = ord(char) - ord('a')
# 이 때, alphabet_occurrence_array의 해당 인덱스에 1을 추가한다.
alphabet_occurrence_array[arr_index] += 1
# 최대빈도수(max_occurrence)와 최대빈도수인 알파벳의 인덱스를 0으로 설정하고
max_occurrence = 0
max_alphabet_index = 0
# index in range(len()) : 숫자 배열을 사용하고 range()를 사용하여 for 루프 내부에서 배열을 반복하는 방법
for index in range(len(alphabet_occurrence_array)):
# index 0 -> alpha_occurrence
alphabet_occurrence = alphabet_occurrence_array[index]
if alphabet_occurrence > max_occurrence:
max_alphabet_index = index
max_occurrence = alphabet_occurrence
return chr(max_alphabet_index + ord("a"))
result = find_max_occurred_alphabet(input)
print(result)
오늘 처음 알고리즘을 배웠는데, 문제도 아직 이해하기에는 생각하는 연습이 좀 부족한 것 같다. 앞으로 여러가지 문제 풀어보면서 알고리즘에 대해 생각하는 연습을 해봐야겠다 !
화이팅...!!
사고력을 기르는게 쉽지 않더라구요
반본적으로 생각하는 훈련이 제일 좋습니다 화이팅!