// 실습 코드
# 2. 문자(string)
"""
str_6 = '안녕하세요. 홍길동 고객님!'
str_6
str_6[7:10]
str_6[:2] # 시작점이 없을 경우 처음부터
str_6[2:] # 끝이 없다면 끝까지
str_6[:] # 시작과 끝이 없다면 전체
str_6[:-2] # '-'는 끝에서부터 거꾸로
str_6[::-1]
str_7 = "Alphabet"
print(str_7.lower()) # 소문자로 바꾸는 함수
str_7.lower # 함수만 호출되는 것이기 때문에 ()있어야 함.
# () => 값을 호출해달라고 함.
str_7.upper()
str_7 # 값을 할당 하지 않았으므로, str_7은 그대로이다.
str_7.count('a') # a의 개수를 세어줌
"""str_7을 소문자로 바꾸고 소문자 a의 개수를 셈"""
str_7.lower().count('a')
find vs index(같은 함수 이긴 하나, 인덱스를 -로 반환하느냐 오류를 반환하느냐의 차이?)
str_7.find('t')
str_7.index('t')
str_7.find('z')
str_7.index('z')
str_8 = 'Life is C between B and D'
str_8
str_8.replace('C', 'Chicken')
"""split vs strip"""
str_8.split(' ') # splict: 안에 분할하는 기준을 넣을 수 있음.
str_8.split('C')
# 공백을 먼저 제거하고 분할(자연어 처리에서 많이 사용)
str_8.strip().split(' ') # strip: 공백을 제거
str_9 = 'abcd'
','.join(str_9) # ,를 추가
str_10 = str_8.split()
' '.join(str_10)
print(dir(str_8)) # 문자열 변수 str_8에 적용 가능한 메소드 나열
// 실습 코드
"""# 3. 리스트(list)"""
list_3 = [1, 2, '문자', ['이중 리스트', '가능'], ('리스트 속', '튜플')]
list_3
list_3[3][0]
"""- 2차원 리스트 (* 3차원이상부터는 시각화 어려움)"""
a = [[10,20],[30,40],[50,60]]
a
"""- 이중 리스트"""
list_6 = ['a','b','c']
list_7 = ['가','나','다']
list_6 + list_7
list_6 * 3
list_6
'a' in list_6
"""- 리스트 -> 삽입, 수정, 삭제가 자유로움."""
list_8 = ['파이썬','C','Java']
list_8.append('R') # 맨뒤에 추가해줌
list_8
list_8.insert(2, 'C++') # insert는 원하는 위치에 삽입
list_8
list_8[0] = 'Python' # 덮어쓰기 가능
list_8
list_8.remove('C')
list_8
del list_8[3] # del은 메모리까지 삭제함
list_8
list_8.pop() # 괄호()안 인덱스에 해당하는 요소를 반환
# 인덱스를 생략하면 가장 마지막 요소를 꺼내옴
list_8
list_9 = [1,5,7,2,6]
list_9.sort() # sort(): 순서대로 정렬해주는 함수임. return 함수가 내장되어있어서 원본에 적용됨
list_9
list_9 = [1,5,7,2,6]
list_9.sort(reverse=True)
list_9
list_9 = [1,5,7,2,6]
sorted(list_9) # sorted: return 함수가 내장되지 않아서 원본에 적용되지 않음
list_9
"""- 얕은 복사"""
a = [10,9,8,7,6]
b = [5,7,8,9,10]
print(id(a), id(b)) # CPU 주소는 서로 다름
b = a # a를 b에 할당하면 주소가 같아짐
print(id(a), id(b)) # 얕은 복사: 참조값까지 복사 하는 것
"""- 같은 값을 복사하고 싶으면? => 깊은 복사(깊은 복사는 객체를 공유하지 않음)"""
a = [5,4,3,2,1]
b=a[:]
print(id(a), id(b))
b
a.sort()
a
b
a = [5,4,3,2,1]
b = a.copy()
print(id(a), id(b)) # 주소는 복사 안됨
a.sort()
a
b
a
import copy
a = [5,4,3,2,1]
b = copy.deepcopy(a)
print(id(a), id(b))
a.sort()
a
b
a
"""- 2차원에서는 깊은 복사가 안됨"""
a = [[1,2],[3,4]]
a
b = a[:]
a[0][1] = 100
a
b # b[0][1]도 같이 바뀌어버림
"""# 4. 튜플(tuple)
- 인덱싱과 슬라이싱이 가능
- 리스트와 달리 요소를 삽입/삭제/수정 할 수 없음
"""
tuple_3 = (1, 2)
tuple_4 = (3,) # 가변공간: 두 개 이상은 불가능
tuple_3 + tuple_4
"""# 5. 딕셔너리(dictionary)"""
dict_3 = {'홍길동':100, '홍계월':200}
dict_3
dict_3['슈퍼맨'] = 300
dict_3
dict_3['홍길동']=1
dict_3
# del dict_3['슈퍼맨']
# dict_3
# key에 접근하기 : keys()
dict_3 = {'홍길동':100, '홍계월':200, '슈퍼맨':150, '배트맨':250}
print(dict_3.keys())
print(type(dict_3.keys()))
# values에 접근하기: values()
print(dict_3.values())
print(type(dict_3.values()))
# key와 values에 함께 접근하기 : items()
print(dict_3.items())
print(type(dict_3.items()))
# 리스트처럼 보이나, 실제로는 dict의 개체이므로, 리스트의 메소드를 사용할 수 없음 => 리스트로 사용하려면 리스트로 형변환 해주어야 함.
list(dict_3.items())[0]
dict_3
print(dict_3['배트맨'])
print(dict_3.get('배트맨'))
# 키 값을 이용하여 접근할 경우, 해당키가 없으면 오류 발생
print(dict_3['펭수'])
# get을 통해 접근할 경우, None을 반환
print(dict_3.get('펭수'))
"""# 6. Set(집합)
- {}을 선언하여 set을 선언
- 중복을 허용하지 않음
- 순서가 없음
"""
set_2 = set("hello")
set_3 = set([1,2,3])
set_4 = {3,5,'hi'}
print(set_2)
print(set_3)
print(set_4)
# 교집합
set_5 = {1,2,3,4}
set_6 = {4,5,6,7}
print(set_5.intersection(set_6))
print(set_5 & set_6) # 집합 연산자
# 합집합
print(set_5 | set_6)
print(set_5.union(set_6))
// 실습 코드
# 조건문
- if / elif / else
"""
money = True
if money:
print("여행을 간다")
else:
print("집에 있는다.")
money = 20000
if money > 0 :
if 0 < money < 5000 :
print('라면을 먹는다')
elif 5000 <= money < 25000 :
print('치킨을 먹는다')
elif 25000 <= money < 50000 :
print('삼겹살을 먹는다')
else :
print('소고기를 먹는다')
else :
print('양수를 입력해 주세요.')
a = 3
b = 5
a < b
c = 3
d = 3
c <= d
c != d
"""- 조건 논리식"""
a = 100
if a > 0 and (a % 2) == 0:
print('a is even')
"""- and, &는 서로 다름"""
5 and 7 # 항상 큰 수가 나옴
"""- &(비트연산): and를 쓰면 csv파일에서 필터링을 할때 해당 데이터 위치를 가져올 수 없어서 비트연산자인 &를 사용하여야 한다."""
5 & 7 # 5 = 0101, 7 = 0111 => 여기서 교집합은 0101이므로 5가 나옴
5 | 7
money = 20000
card = True
if card:
if money < 30000:
print('삼겹살을 먹는다.')
else:
print('소고기를 먹는다.')
else:
if money <= 1000:
pass # 조건을 만족해도 아무 일도 일어나지 않도록 해줌
else:
print('라면을 먹는다.')
value = 20
if value % 2 == 0:
is_even = True
else:
is_even = False
print(is_even)
# 삼항 연산자: 조건이 참이면 true_value값을 취하고, 거짓이면 false_value값을 취함
value = 30
is_even = True if value % 2 == 0 else False
print(is_even)
"""# 포멧팅"""
# formatting
# %s: 만능키
num = 1
print('문자열 포맷팅 하기 예시 %d' %num)
ch = '이름'
print('내 이름은 : %s' %ch)
f1 = 1/3
print('반올림 하기 : %0.20f' % f1) # 소숫점 17자리 넘어가면 오류 발생
a = 3
b = 5
print('%d와 %d를 더하면 %d' %(a, b, a+b))
print('문자열 포맷팅 하기 예시 {}'.format(2))
print('내 이름은 : {}'.format(ch))
a = '류'
b = '영표'
print('성은 {}, 이름은 {}'.format(a, b))
# 인덱스를 통해 순서를 지정할 수도 있습니다.
print('성은 {0}, 이름은 {1}'.format(a,b))
print('First name : {1}, last name : {0}'.format(a,b,))
print('나는 오늘 {음료}를 {개수} 잔이나 마셨다.'.format(음료='커피', 개수=3))
year = 2020
f'올해는 {year}'
drink = '커피'
nums = 3
f'나는 오늘 {drink}를 {nums+1} 잔이나 마셨다.' # nums+1 처럼 연산이 가능함
'나는 오늘 %s를 %d+1 잔이나 마셨다'%('커피',3) # 연산이 불가능함
'나는 오늘 {drink}를 {num+1}를 마셨다'.format(drink='커피', nums=3)
// 연습 문제
# 1) b로 a를 나눈 나머지가 3 초과면 실패, 3이면 무승부, 3미만이면 성공이 출력되도록 만들어보자.
a = 34
b = 4
if (a%b) > 0:
if (a%b) > 3:
print("실패")
elif (a%b) == 3:
print("무승부")
else:
print("성공")
else:
print("양수를 입력해주세요.")
# 2) 홀수 짝수 판별기: 사용자로부터 정수를 하나 입력받아 입력한 정수가 홀수인지 짝수인지 판별하여라.
# 0은 짝수라고 가정
a = int(input('정수를 입력하세요.'))
if (a % 2) == 1:
print('입력하신 %d는 %s입니다.' %(a, '홀수'))
elif (a % 2) == 0:
print('입력하신 %d는 %s입니다.' %(a, '짝수'))
else:
print('올바른 정수를 입력해주세요.')
b = int(input('정수를 입력하세요.'))
if (b % 2) == 1:
print('입력하신 %d는 %s입니다.' %(b, '홀수'))
elif (b % 2) == 0:
print('입력하신 %d는 %s입니다.' %(b, '짝수'))
else:
print('올바른 정수를 입력해주세요.')
# 3) 무슨 학교 다니세요?
# 태어난 연도를 계산하여 학교 종류를 맞추는 프로그램
# 나이는 현재년도 - 태어난 년도 + 1로 계산
# 26세 이하 20세 이상이면 "대학생", 20세 미만 17세 이상이면 "고등학생"
# 17세 미만 14세 이상이면 "중학생", 14세 미만 8세 이상이면 "초등학생"
# 그 외의 경우는 "학생이 아닙니다" 출력
birth_year = int(input('당신이 태어난 년도를 입력하세요.'))
current_year = 2025
age = current_year - birth_year + 1
if birth_year > 0:
if 20 <= age <= 26:
print("대학생")
elif 17 <= age < 20:
print("고등학생")
elif 14 <= age < 17:
print("중학생")
elif 8 <= age < 14:
print("초등학생")
else:
print("학생이 아닙니다.")
else:
print("올바른 년도를 입력하세요.")
# 4) 사용자로부터 점수를 3개 입력받아서 각 점수가 65점보다 클 경우 합격, 아닐경우 불합격을 출력하세요
# 단, 0~100이 아닌 숫자가 입력된경우 "잘못된 점수가 입력되었습니다."를 출력하세요.
score_a = int(input('점수 A를 입력해주세요.'))
score_b = int(input('점수 B를 입력해주세요.'))
score_c = int(input('점수 C를 입력해주세요.'))
if (100 >= score_a > 0) and (100 >= score_b > 0) and (100 >= score_c > 0):
if (score_a > 65) and (score_b > 65) and (score_c > 65):
print("합격")
else:
print("불합격")
else:
print("잘못된 점수가 입력되었습니다.")
# 5) 양의 정수 하나를 입력 받아 이 정수가 2의 배수인지 3의 배수인지 작성하시오.
num = int(input('양의 정수를 입력하세요.'))
if num > 0:
if (num % 2) == 0:
print(f"입력한 숫자:{num}, => 2의 배수 입니다.")
elif (num % 3) == 0:
print(f"입력한 숫자:{num}, => 3의 배수 입니다.")
else:
print(f"입력한 숫자:{num}, => 2 또는 3의 배수가 아닙니다.")
else:
print(f"입력한 숫자:{num} => 양의 정수가 아닙니다.")
| 분류 | 문법/함수 | 설명 |
|---|---|---|
| 문자열(String) | str[start:end] | 문자열 슬라이싱 (start부터 end 이전까지 자름). |
str.lower() | 문자열을 소문자로 변환. | |
str.upper() | 문자열을 대문자로 변환. | |
str.count('sub') | 특정 문자의 개수를 반환. | |
str.find('sub') | 특정 문자의 첫 번째 위치를 반환, 없으면 -1 반환. | |
str.index('sub') | 특정 문자의 첫 번째 위치를 반환, 없으면 오류 발생. | |
str.replace('old', 'new') | 문자열 내 특정 부분을 다른 문자열로 교체. | |
str.split('delimiter') | 특정 구분자를 기준으로 문자열 분리, 리스트 반환. | |
str.strip() | 문자열 양쪽의 공백 제거. | |
'delimiter'.join(iterable) | 구분자를 사용해 iterable의 요소들을 하나의 문자열로 연결. | |
dir(str) | 문자열 객체에서 사용할 수 있는 메소드 나열. | |
| 리스트(List) | list.append(element) | 리스트의 마지막에 요소 추가. |
list.insert(index, element) | 특정 위치에 요소 삽입. | |
list.remove(element) | 리스트에서 특정 요소 제거. | |
del list[index] | 특정 인덱스의 요소를 삭제. | |
list.pop(index) | 특정 인덱스의 요소를 반환하고 제거, 인덱스 생략 시 마지막 요소 제거. | |
list.sort() | 리스트 요소를 정렬. 원본 리스트 변경. | |
sorted(list) | 리스트 요소를 정렬하여 새 리스트 반환. 원본은 변경되지 않음. | |
list.copy() | 리스트 복사 (깊은 복사). | |
copy.deepcopy(list) | 다차원 리스트 깊은 복사. | |
| 튜플(Tuple) | (element1, element2, ...) | 튜플 선언, 수정 불가. |
tuple1 + tuple2 | 튜플 합치기. | |
| 딕셔너리(Dictionary) | dict.keys() | 딕셔너리의 키 반환. |
dict.values() | 딕셔너리의 값 반환. | |
dict.items() | 딕셔너리의 키-값 쌍 반환. | |
dict['key'] | 키를 이용한 값 접근. 키가 없으면 오류 발생. | |
dict.get('key') | 키를 이용한 값 접근. 키가 없으면 None 반환. | |
| 집합(Set) | {element1, element2, ...} | 집합 선언. 중복 제거, 순서 없음. |
set1 & set2 | 교집합. | |
| `set1 | set2` | |
| 조건문 | if / elif / else | 조건문 사용. |
and / or / not | 논리 연산자. | |
pass | 아무 동작도 하지 않음. | |
| 삼항 연산자 | value = true_value if condition else false_value | |
| 포매팅 | % | 문자열 내 특정 값을 포매팅. |
str.format() | 문자열 포매팅 함수. | |
f'{}' | f-string으로 문자열 포매팅. |
튜플(tuple)
딕셔너리(dictionary)
집합(set)
조건문
if, elif, else)포매팅 (Formatting)
%, format, f-string)연습 문제