오늘 교육은 회사 다닐 때처럼 힘든? 수요일이었습니다.
문자열이나 형변환을 다루는 중요한 날이었지만 좀처럼 하품을 참을 수 없었습니다.
퀴즈에서도 스피드 부족과 어이없는 클릭으로 안타까운 시간들이었습니다.
전에 배웠던 다른 언어에 비해 파이썬은 좀 더 쉽다고 느껴졌습니다.
++a , a++ 같은 건 안 쓰도록 하고,
>= , => , <= , =< 이렇게 혼용해서 쓰던것들도 >=, <= 하나씩만 쓰도록 했습니다.
문자열 다루는 것도 다른 언어 에서 문자열 파싱하거나 할때가 더 지저분했던 것 같습니다.
함수들이 익숙해서 그런지 좀 더 심플하게 느껴집니다.
문자열
문자열 덧셈, 곱셈
# 1.2 문자열 덧셈, 곱셈
# 문자열의 덧셈
x = 'hello'
y = 'world'
print(x+y)
x = '10'
y = '20'
print(x+y)
# 문자열의 곱셈
print(x * 100)
문자열 합치는 것도 간단하고 형변환은 여전히 중요함.
문자열 인덱싱
# 1.3 문자열 인덱싱
s = '위니브 월드!'
print(s[0]) # 출력 : '위'
print(s[1]) # 출력 : '니'
print(s[2]) # 출력 : '브'
print(s[3]) # 출력 : ' '
print(s[4]) # 출력 : '월'
print(s[5]) # 출력 : '드'
print(s[6]) # 출력 : '!'
print(s[-1]) # 출력 : '!'
print(s[-2]) # 출력 : '드'
print(s[-3]) # 출력 : '월'
print(s[-4]) # 출력 : ' '
print(s[-5]) # 출력 : '브'
print(s[-6]) # 출력 : '니'
print(s[-7]) # 출력 : '위'
# 오류
#print(s[-8])
문자열 인덱싱 하는것도 앞에서 뒤에서 다 가능하다. 물론 사이즈를 벗어난 곳을 인덱싱 할때는 오류.
s = 'weniv CEO licat'
# 인덱스 6자리부터 끝까지 출력
print(s[6:15]) # 출력 : CEO licat
# 인덱스 처음부터 끝까지 출력
print(s[:]) # 출력 : weniv CEO licat
#인덱스 처음부터 끝까지 뒤에서 부터 출력
print(s[::-1]) # 출력 : tacil OEC vinew
#인덱스 처음부터 끝까지 2칸 간격으로 출력
print(s[::2]) # 출력 : wnvCOlct
문자열 앞 뒤로 접근 가능하고, 끝자리 인덱스값을 꼭 알지 않아도 된다.
# .png 빼고 출력
s = 'weniv_licat.png'
print(s[:11])
print(s[:-4]) # 출력 : 'weniv_licat'
# .png 만 출력
s = 'weniv_licat.png'
print(s[11:15])
print(s[-4:])
print(s[-1:-4]) # 출력 : '.png'
슬라이스
# 1.5 슬라이스 복사 - 다만 ID가 달라짐
s = [1, 2, 3]
ss = s[:]
print(s, ss) # 출력 : [1, 2, 3] [1, 2, 3]
print(id(s), id(ss)) # 출력 : 131948187000192 131948185156352
문자열 메서드
# 1.6 대문자 소문자
s = 'weniv CEO licat'
s.lower() #전체를 소문자로 바꿔주는 method
s = 'weniv CEO licat'
s.upper() #전체를 대문자로 바꿔주는 method
# 1.7 메서드 2: find index
s = 'weniv CEO licat'
s.find('CEO')
s.index('CEO')
#s.find('CTO') # 없을때 -1 반환
#s.index('CTO') # 없을때 에러 발생
출력은 6 인데 인덱스값을 반환한다.
find와 index 는 찾지 못했을때 각각 -1 과 error 를 반환한다.
상태에 맞게 활용해야 한다.
# 1.8 메서드 3 : count
s = 'weniv CEO licat'
s.count('CEO') # 출력 : 1
s.count(' ') # 출력 : 2
# 공백 찾을 수 있음
# 대소문자 구분
# 1.9 메서드 4 : strip / excel -trim()
# strip 함수를 너무 신뢰하지 말아라! 미세하게 조정이 안되는 경우 있음
s = ' weniv CEO licat '
s.strip() #양쪽 공백을 제거하는 method
미세하게 조정이 안되서 너무 신뢰하지 말라고 함.
예전에 다른 언어에서도 그랬던거 같은데 보이기에는 빈칸으로 보이는데 빈칸으로 인식 안되는
경우들이 있다. 확인하고 조정해줘야 함.
# 1.10 메서드 5 : replace
# 대소문자 구분함
s = 'weniv CEO licat'
ss = s.replace('CEO', 'CTO')
s, ss
print(s, ss)
# 1. 11 메서드 6 : split()
# split은 리스트 형태로 결과가 나오게 된다.
s = 'weniv CEO licat'
s.split() #공백을 기준으로 문자열 나누기
s = 'weniv-CEO-licat'
s.split('-') #공백을 기준으로 문자열 나누기
# 1. 12 메서드 7 : join()
s = ['weniv', 'CEO', 'licat']
'-'.join(s).split('-') # 출력 : ['weniv', 'CEO', 'licat']
'-'.join('-'.join(s).split('-')).split('-') # 출력 : ['weniv', 'CEO', 'licat']
join 문법이 좀 이상하게 느껴져서 자꾸 연습해봤다.
# 주민번호 뒷에 자리 *로 출력
s = '458934-1'
s.ljust(14, '*') # 출력 : '458934-1******'
# 1. 14 zfill()
# 문자열 고객번호 '0000000012' -> CSV -> 숫자 12 -> 파이썬 -> 숫자 12 '000000043112'
# 이럴때 필요
x = "42"
result = x.zfill(5)
print(result) # 출력 : 00042
년 = '23'
월 = '9'
일 = '8'
오늘날짜 = 년 + 월 + 일
print(오늘날짜)
오늘날짜 = 년 + 월.zfill(2) + 일.zfill(2)
print(오늘날짜)
2398
230908
이렇게 출력되는데 자리 맞추는데 필요함.
# 'd'와 'e' 문자 제거하기
table = str.maketrans('', '', 'de')
text = "abcde d e. d e dede"
result = text.translate(table)
print(result) # 출력 : abc
# \n\t 를 찾아서 빈공간으로 대체
table = str.maketrans('\n\t', ' ')
text = '''안녕하세요.
저는 공부하고 싶은 남자입니다.
파이썬 참 좋아요.
여러분 정말 잘 선택하셨어요.
'''
result = text.translate(table)
print(result) # 출력 : 안녕하세요. 저는 공부하고 싶은 남자입니다. 파이썬 참 좋아요. 여러분 정말 잘 선택하셨어요.
이스케이프 문자
print("Hello\nWorld!") # Hello와 World! 사이에 줄바꿈이 일어납니다.
print("Hello\tWorld!") # Hello와 World! 사이에 탭 간격이 생깁니다.
print("She said, \"Hello World!\"") # 큰따옴표 내부에 문자열을 출력합니다.
print('She said, \'Hello World!\'') # 작은따옴표 내부에 문자열을 출력합니다.
print("Backslash: \\") # 백슬래시를 출력합니다.
print("hello\nWorld!\nhello\tworld!\nShe said, \"Hello World!\"\nShe said, \'Hello World!\'\nBackslash: \\")
같은 결과 출력
형변환
# 4.5 str 형변환
n = 123
print(type(n)) # <class 'int'>
print(n) # 출력 123
m = 123.4
print(type(n)) # <class 'int'>
print(m) # 출력 123.4
n = str(n)
print(type(n)) # <class 'str'>
print(n) # 출력 123
m = str(m)
print(type(m)) # <class 'str'>
print(m) # 출력 123.4
num = 123.1
num = str(num)
num = int(num)
print(num)
오류 난다. 123.1 을 문자열로 형변환은 되는데 그 상태로 int 로 형변환 안됨. 점(.)을 처리하지 못함.
print("bool('test'):", bool('test')) # 출력 : bool('test'): True
print("bool(' '):", bool(' ')) # 출력 : bool(' '): True
print("bool(''):", bool('')) # 출력 : bool(''): False
print("bool(100):", bool(100)) # 출력 : bool(100): True
print("bool(1):", bool(1)) # 출력 : bool(1): True
print("bool(0):", bool(0)) # 출력 : bool(0): False
print("bool(-1):", bool(-1)) # 출력 : bool(-1): True
print("bool(None):", bool(None)) # 출력 : bool(None): False
print("bool([]):", bool([])) # 출력 : bool([]): False
print("bool(tuple()):", bool(tuple())) # 출력 : bool(tuple()): False
print("bool({}):", bool({})) # 출력 : bool({}): False
print("bool(set()):", bool(set())) # 출력 : bool(set()): False
print(bool(bool())) # 출력 : False
infinity = float('inf')
neg_infinity = float('-inf')
not_a_number = float('nan') # None, NA 등과 헷갈리긴 하는데 약간씩 다름
print(infinity) # 출력 : inf
print(neg_infinity) # 출력 : -inf
print(not_a_number) # 출력 : nan
이것들이 float형이라니 뭐 외워야죠..
자료형
a = -5
b = 2
print(a / b) # 결과: -2.5
# 내림
print(a // b) # 결과: -3
// 연산자가 내림이다. b가 2.6 일때 -2.0 이고 b가 2.4 일때 -3.0
# 1.1 나누기 / 소수점 2자리
a = 10
b = 3
divide = a / b
print(f'{a} ÷ {b} = {divide:.3f}') # 결과: 10 ÷ 3 = 3.333
.3f 소수점 3째자리 까지 이고 .2f 소수점 2째자리 까지
# 1.2 나머지
print(10 / 9) # 소수 몫 결과 : 1.1111111111111112
print(10 // 9) # 정수 몫 결과 : 1
print(10 % 9) # 나머지 결과 : 1
import math
result = 0.1 + 0.2
print(result) # 0.30000000000000004
print(result == 0.3) # False
print(math.isclose(result, 0.3)) # True
print(math.isclose(result, 0.29)) # False
print(math.isclose(result, 0.31)) # False
print(math.isclose(result, 0.30000001)) # False
0.1 + 0.2 값이 0.3이 나오지 않고 이상하게 나오는 이유에 대해 어제 배웠는데
그 해결법 이라 할 수 있겠다.
오늘 배운건 이정도 인것 같습니다.
헷갈릴 만한 요소들이 좀 있었네요. 인지만 잘하고 있어도 괜찮지 않을까 싶습니다.
코딩하면서 자연스럽게 알게 될거라고 생각합니다.
끝까지 화이팅^^
'오름캠프(23.12.28 ~ 24.4.18)' 카테고리의 다른 글
오름캠프 학습일지(2024/01/08) - 3주차 1일 (1) | 2024.01.08 |
---|---|
오름캠프 학습일지(2024/01/03) - 2주차 4일 (1) | 2024.01.05 |
오름캠프 학습일지(2024/01/03) - 2주차 3일 (1) | 2024.01.04 |
오름캠프 학습일지(2024/01/02) - 2주차 1일 (0) | 2024.01.02 |
오름캠프 학습일지(2023/12/29) - 2일차 (2) | 2023.12.29 |