221108_TIL

·2022년 11월 8일

문자열 다루기

- 주요메소드

  • 주요 메소드 : str() - 문자열로 변환 / len() - 문자열의 길이를 세어서 반환
  • 주요 메소드 : [:]∙[:3]∙[3:]∙[2:5]
    - [:] => 변수 값 전체 복사
    - [:3] => 앞에서부터 3개의 문자열만 반환
    - [3:] => 앞에서 3개 문자열을 제외하고 나머지 출력
    - [2:5] => 앞에 2개 자르고 5까지 보여준 다음, 나머지 뒤에 있는 값도 잘라라.
  • 주요 메소드 : result = myEmail.split('@')[1].split('.')[0] << .split('') 문자열 자르기 메소드. 이메일 도메인을 찾는데 매우 유용함.
first_name  = 'hwuiinn'
last_name = 'Park'
print(first_name + last_name);
a = 2
b = a
print(a);

c = 3
d = 'c' # 문자열 c로 인식. 따옴표가 없으면 c = 3값이 d에도 할당되었을 것임. (d가 c의 값을 참조)
print(d);

a = '2'
b = 'hee'
print(a+b)

# a = 2
# b = 'hee'
# print(a+b) #숫자와 문자열은 연산되지 않는다. 그래서 TypeError: unsupported operand type(s) for +: 'int' and 'str' << Error가 뜬다.

# str()을 이용한 string타입으로 변환
a = '2'
b = str(True)
c = str(10)
print(a+b+c) # 문자열 22를 반환. str()메소드는 '숫자타입'과 '불리언 타입'을 문자로 바꿔 반환해줌.

# [:]를 이용한 문자열 나누기, 자르기
text = '가나다라마바사'
# result = len(text);
result = text[2:5] # [:3] 앞에서부터 문자열 3개만 반환해라. [3:] 앞에 3개 짜르고 문자열 나머지 반환해라. [2:5] 앞에 2개 짜르고 5까지 보인 후, 뒤에 나머지도 짤라라
print(result)
# Quiz - 문자열 앞에 4개만 출력하기
text = '안녕하세요저는민수아버지의친구사촌입니다.'
result = text[:4] # [4:]으로 하면 안녕하세 << 를 제외한 뒤에 문자열이 모두 출력된다.
print(result)



# 문자열 자르기
myEmail = 'gnldls8406@naver.com'
result = myEmail.split('@')[1].split('.')[0]
print(result)
# Quiz - 지역번호만 따로 출력하기
phone = '051-231-1106'
result = phone.split('-')[0] # 051만 출력
print(result)

List, Dictionary

- 주요메소드

  • .sort() - 오름차순, 내림차순 정렬
  • .append() - 기존 리스트에 새로운 값을 추가하는 것

리스트와 딕셔너리 - 둘 다 값을 담는 방법

'리스트'는 순서가 중요하게 값을 담는 것 , 문자형 뿐만 아니라, 불리언타입과 숫자타입도 들어갈 수 있음. 또한 리스트 안에 리스트가 들어갈 수 있다.
ㄴ ['제철과일', ['🍎','🍏','🍊','🍌','🍉'], '포도', 'false']

'딕셔너리'는 key:value로 값을 담는 방법에 관한 것

#  [리스트]
fruit_list = ['🍎','🍏','🍊','🍌','🍉']
result = fruit_list[-1] # [-1]하면 제일 마지막에 있는 숫자가 출력된다.
print(result)
# fruit_list = ['제철과일', ['🍎','🍏','🍊','🍌','🍉'], '포도']
# print(fruit_list[1][1]) << 1번째 리스트 안에서 1번째 과일 출력. (🍏)
result = len(fruit_list) # 길이 구하기
print(result)

# .append() - 리스트에 새로운 값을 추가하기
fruit_list.append('[🍇,10]') #리스트 형식도 추가 가능함. 한 번에 하나만 넣을 수 있음.
length = len(fruit_list)
result = fruit_list[-1]
print(length,result)

# .sort() - 오름차순, 내림차순 정렬
student = ['휘인','채하','다경','영진','상민']
# result = student.sort(reverse=True) << 내림차순
result = student.sort() # 오름차순 (가나다라..)
results = ('휘인' in student) # True << in 문법은 변수 안에 해당 데이터가 들어있는지 True Or False로 알려줌.
print(results)

#딕셔너리

chiken = {'price':'20,000', 'location':'SuyoungGu', 'size':'12호 닭', 'favor':'Normal', 'brand':['교촌','BBQ','국제통닭','굽네치킨']}
result = chiken
# print(result['favor']) favor의 value인 Normal만 출력된다.
# print(result['brand'][3]) key에 해당하는 brand의 value인 [리스트] 중, [3]번째 데이터를 선택해서 보여줌.
print(result)

# 딕셔너리에 값을 추가하는 법
chiken['CheezeBall'] = None; # 변수['추가할 key'] = 추가할 key의 value
print(result)
print('price' in chiken) # 딕셔너리에 price라는 key의 value가 들어있는지 유무를 True, False로 판단할 수 있음.

# 리스트와 딕셔너리의 조합 - 리스트안에 딕셔너리가 요소로써 여러개 들어가있을 수 있다.
people = [
       {'name':'hwuiinn','age':25, 'live':'Busan','habby':'music'},
       {'name':'Ena','age':15, 'live':'Seoul','habby':'running'}
         ]

print(people)
print(people[1]['habby']) # people변수의 [1]번째 데이터 안에 있는 ['habby']의 value를 출력

# 딕셔너리 Quiz
# 요구사항 : smith의 science 점수를 출력해라.
people = [
   {'name': 'bob', 'age': 20, 'score':{'math':90,'science':70}},
   {'name': 'carry', 'age': 38, 'score':{'math':40,'science':72}},
   {'name': 'smith', 'age': 28, 'score':{'math':80,'science':90}},
   {'name': 'john', 'age': 34, 'score':{'math':75,'science':100}}
]
result = people[2]['score']['science'] # [2]번째 딕셔너리를 찾음. ['score'] key값의 value를 찾음. science key값의 value인 90을 찾음.
print(result)

조건문

- 핵심

  • if, else 조건문
  • 콜론(:)이 나오면 무조건 들여쓰기를 해야함. 이렇게 해야만 해당 조건의 내용물이 될 수 있음. *
money = 3500

if money > 4000:
    print('Take a Tax')
elif money > 3000:
    print('I recommend U to take a Bus')
else:
    print("U don't take a bus. U JUST WALK")
    # '를 쓸 때, 쌍따옴표로 문자열을 지정해주면 Don't 표현 가능함.

반복문

- 핵심

  • 반복문 for in
fruit_list = ['🍎','🍏','🍊','🍌','🍉']

for fruits in fruit_list: # for a in a가 실질적으로 반복해서 돌아볼 리스트가 들어있는 변수
    print(fruits) # 리스트 안에 있는 요소들을 하나씩 꺼냄.

# Quiz - 나이 출력하기
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}
]
# for person in people:
#     name = person['name']
#     age = person['age']
#     # print(name, age)
#     if age > 19:
#         print(name,age)

for i, person in enumerate(people): #enumerate : v. 나열하다, 열거하다 / for i, << 배열의 순서를 나열해줌. 사용 예시 => 데이터가 10,000개일 경우, 굳이 전부 출력하지 않고 내가 원하는 코딩들을 수행할 수 있게끔 함.
    name = person['name']
    age = person['age']
    # print(name, age)
    # if age > 19:
    print(i,name,age)
    if i > 2:
        break

# 반복문 연습문제 - 짝수 출력하기
num_list = [1, 2, 3, 6, 3, 2, 4, 5, 6, 2, 4]

# 내가 한 것
for i, num in enumerate(num_list):
    even = num%2
    if even == 0:
        print(i,even)
# 정답지
for num in num_list: #1. num_list를 도는 num을 생성 2. if문으로 조건을 걸어 준 뒤, 해당 조건을 만족하는 num만 출력
    if num % 2 == 0:
        print(num)

# 반복문 연습문제 - 짝수의 개수를 출력하기
# 내가 한 것
    # for i, num in enumerate(num_list):
    # even = num%2
    # count = 0
    # if even == 0:
    #     count += count
    #     print(i,even,count)

# 정답
count = 0
for i, num in enumerate(num_list): # for문 밖에 변수를 하나 만들어줌. for문을 만들고, if문 조건을 만든 뒤, num이 이에 해당하면 count를 1씩 높혀줌. 그리고 해당 조건을 만족한 num과 count를 출력
        if num % 2 == 0:
            count += 1
            print(i,num,count)

# 반복문 연습문제 - 리스트 안에 있는 모든 숫자 더하기
# 내가 한 것
#     for num in num_list:
#       totalAdd = sum(num_list)
#       print(totalAdd)

# 정 답
sum = 0
for num in num_list: # 변수 하나를 for문 밖에 만들어줌. 그리고 sum 변수에 num을 대입해준다. num은 for문을 돌면서 sum과 계속 더해질 것이고, 최종적으로 num_list의 모든 값이 더해질 것임.
    # sum = sum + num
    sum += num
    print(sum)

# 반복문 연습문제 - 리스트 안에 있는 자연수 중 가장 큰 숫자 구하기

#내가 한 것
# num_list.sort() # 오름차순으로 정렬
# print(num_list[0]) # 오름차순으로 정렬이 되었는지 확인

#정답
maxNum = 0
for num in num_list: # for문 밖에 변수하나 생성. if문 조건으로 num보다 변수가 크면 코드를 종료. num_list를 도는 num을 변수에 할당하고, 계속 리스트를 돌면 그 중 제일 큰 수가 변수에 할당되고 코드가 종료될 것임.
    if maxNum < num:
        maxNum = num
        num_list.append(25)
        print(maxNum)

함수

- 핵심

  • 함수 - 파이썬에서의 함수는 def 함수이름(): 이렇게 만듬.
def Music():
    print('benson boone')
    print("in the stars")

Music() # 이처럼 함수 이름()을 호출하면, 해당 함수가 가지고있는 코드가 실행된다.

def sum(a,b):
    print('파이썬 sum 실행합니다.')
    return a+b;  # return 구문을 만나면 return 뒤에 있는 값이 sum(a,b)에 들어가게 된다.
result = sum(5,3);
print(result)


def subway_rate(age):
    if age > 19:
        return 2000
    elif 13 < age <= 19:
        return 1000
    else:
        return 'free'
myrate = subway_rate(14)
print(myrate)

# Quiz - 주민등록번호를 입력받아 성별을 출력하는 함수 만들기


def check_gender(pin):
    gender = pin.split('-')[1][:1]
    if int(gender) % 2 == 0:
        return 'female'
        # print('female')
    else:
        return 'male'
        # print('male')


person1 = check_gender('980725-1043495');
person3 =check_gender('980725-2043495');
person2 =check_gender('980725-2043495');

print(person2)

튜플, 집합

- 핵심

  • 튜플 - 리스트랑 똑같이 생겼는데, 차이점은 불변형이다. 즉, 수정이 불가함
    ㄴ ()으로 되어있는 불변형 리스트
  • 집합 - 중복이 제거되어 나옴. (교,차,합 집합 있음) [ &, -, | ] ==> 교,차,합
a = ['사과','배','복숭아'] # 이건 리스트
a[1] = '포도'
print(a)

a = ('사과','배','복숭아') # 이건 튜플
print(a)

people = [{'name':'bob', 'age':30}, {'name':'Ena', 'age':33}]
people = [('bob',30), ('Ena',33)] # 튜플로 이렇게 만들면, 0번째는 무조건 이름들이 나올 것. 1번째는 무조건 나이.
print(people)

# 집합
a = [1,2,3,4,5,6,7,8,9,1,1,1,1,]
b = {11,24,3,2,2,1,1,1,1,4,5}

a_set = set(a)
b_set = set(b)
print(a_set & b_set) #중괄호로 값이 나오며, 중복을 제거해줌. - 교집합
print(a_set | b_set) #중괄호로 값이 나오며, 중복을 제거해줌. - 합집합
print(a_set - b_set) #중괄호로 값이 나오며, 중복을 제거해줌. - 차집합

#Quiz - a는 들었는데 b가 들은 것들을 빼자. (차집합)
student_a = ['물리2','국어','수학1','음악','화학1','화학2','체육']
student_b = ['물리1','수학1','미술','화학2','체육']
a_set = set(student_a)
b_set = set(student_b)

print(a_set - b_set)

f-string

- 핵심

  • f-string => 문자열을 출력할 때 매우 유용하다.
  • print(f'{name}의 점수는 {scores}점') << 처럼 f'{변수}'로 기입.
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']
    scores = s['score']
    # print(name+'의 점수는'+scores+'점입니다.') >> TypeError: can only concatenate str (not "int") to str 즉, 문자열과 숫자타입을 더하려면, 타입 에러가 일어난다.
    # print(name+'의 점수는 '+str(scores)+'점입니다.') >> 위의 코드를 쓰려면 이렇게 해야할 듯 하다.
    print(f'{name}의 점수는 {scores}점')

예외처리 (try: except:)

- 핵심

  • 사용 예시 ) 서버한테 콜을 한다던가 했을 시, 서버 오류가 나면 이에 대한 방지
    • [try - except -] 남용하면 코드는 돌아가는데 뭔가 이상해지고, 어떤 문제가 있는지 파악하기 힘들어진다.
people = [
    {'name': 'bob', 'age': 20},
    {'name': 'carry', 'age': 38},
    {'name': 'john', 'age': 7},
    {'name': 'smith', 'age': 17},
    {'name': 'ben', 'age': 27},
    {'name': 'bobby'}, # << age가 없는 상태 >> age라는 key가 없으므로 KeyError: 'age'가 뜬다. try: except:로 예외처리를 하면 print('Error')이 출력된다.
    {'name': 'red', 'age': 32},
    {'name': 'queen', 'age': 25}
]

for person in people:
    try: #try: 👇밑에 함수를 실행하는 도중에 에러가 난다면,
        if person['age'] > 20:
            print(person['name'])
    except: #except: 위에 코드에 에러가 있다면 👇밑에 코드를 실행하고 계속 코드를 멈추지말고 진행해라.
        print(person['name'], 'Error') #에러 코드 name의 value를 출력하고,문자열 'Error' 출력

if문 - 삼항 연산자, for문 - 한줄로 작성하기

num = 2

# if num % 2 == 0:
#     result = '짝수'
# else:
#     result = '홀수' << 밑에 삼항 연산자랑 같음.

# if문 - 삼항 연산자 !
result = ('짝수' if num % 2 == 0 else '홀수') # >> '짝수'라고해라 if(만약) num을 2로 나누었을 때, 나머지가 0이라면. 아님 '홀수'

print(f'{num}{result}입니다.') # f-string

# for문

num_list = [1,3,2,5,1,2] # << 전체적으로 x2 한 값을 출력하려면?

empty_list = []

# for num in num_list:
# empty_list.append(num*2) # << empty_list.append(num_list*2)를 해버리면 기존 리스트를 한 번 더 생성함. [1,3,2,5,1,2],[1,3,2,5,1,2] 처럼
# .append(num*2) << num_list를 하나씩 도는 num에 *2를 해줌으로써 실질적인 x2의 값을 .append()하여 empty_list에 담을 수 있게 된다.

#👆 위 for문의 축약문이다.
empty_list = [num*2 for num in num_list] # 1.num_list안에 있는 num을 돌리는데, 2.그 때 마다 num*2를 실행하라. 3.그 다음에 걔네들을 다 리스트로 묶어라. (코드 해석 역순으로 해야 해석된다.)
# Q. * 👆 .append()가 없는데 해당 값이 어떻게 empty_list에 들어가는가? *
print(empty_list)

하루 반성

진도를 잘 못 나갔고, 집중이 계속 흐려져서 공부를 하다 말다 하다 말다 했다.
지금 작성하는 시간이 새벽 한 시를 조금 넘긴 시간인데, 해 떠 있을 때 집중하는 습관을 기르자.

profile
- 배움에는 끝이 없다.

1개의 댓글

comment-user-thumbnail
2022년 11월 9일

혼자서 학습하는게 쉽지가 않지요
팀원분들이랑 중간중간 대화도하시면서 기분 환기해보시면 좀더 집중 잘되실거에요!

답글 달기