a = 3 > 1
print(a)
b = 1 < 3
print(b)
이걸 출력하면 값은 True가 나올것이다.
a = 10 == 10
b = 10 != 5
print(a)
print(b)
여기서
==과 !=은 각각 같은지의 연산자 틀린지의 연산자로 이해하면 될듯하다.
즉 출력 결과는 둘다 True이다.
그럼 다음 코드를 봐보자
a = 'Python' == 'Python'
b = 'Python' == 'python'
c = 'Python' != 'Python'
print(a)
print(b)
print(c)
대소문자 구별 및 연산자로 해석및 실행해보면
True
False
False
가 출력될것이다.
다음으로
a = True and True # → True
b = True and False # → False
c = False and True # → False
d = False and False # → False
이것과
a = True or True # → True
b = True or False # → True
c = False or True # → True
d = False or False # → False
이것인데 and는 양쪽이 모두 True일때만 True, 하나라도 False면 False다.
or은 둘중 하나라도 True면 결과가 True이다.
강사님이 문제 내셨는데 and내셨는데 or 페이지 보고 답 내놓아서 쪽 당했다.
arr = [273, 32, 103, "string", "문자열", True, False]
위에는 리스트다.
print(type(“string”)): ?
print(type(True)): ?
print(arr[0]): ?
출력값은 뭘까?
str
bool
273
이런식으로 출력될것이다.
list = [True, “AAA”, 333]
list[0] => True
list[1] => “AAA”
list[2] => 333
list[-1] => ???
마지막은 답이뭘까??
333이 출력된다.
왜그럴까?

이런식으로 처리되기 때문이다.
list_a = [True, "AAA", 333]
try:
print(list_a[3])
print("CHK")
except Exception as e:
print(e)
print("AAAAAAAAAAAAA")
try:
print(list_a[3])
print("CHK")
except Exception as e:
print(e)
여기만 주석처리후 print(list_a[3])을 입력후 실행하면 에러가 나서 실행조차 안된다.
하지만 예외처리인 위 코드를 적어 놓는다면
오류가 나도 끝까지 실행이 된다.
![[스크린샷 2025-09-25 오후 3.20.04.png]]
이건 오늘 처음 본거라 신기하다!!
또하나 배워간다! 아주 좋다.
이따 추가로 더 작성해보아야겠다.
둘다 추가하는 기능이다.
각각 예제코드를 보면
list_a = [1, 2, 3]
print(list_a)
list_a.append(4)
print(list_a)
list_a.append(1)
print(list_a)
출력결과는
[1, 2, 3]
[1, 2, 3, 4]
[1, 2, 3, 4, 1]
이다!
insert 예제를 봐보자
list_a = [1, 2, 3]
print(list_a)
list_a.insert(0, 10)
print(list_a)
list_a.insert(3, 5)
print(list_a)
출력값은
[1, 2, 3]
[10, 1, 2, 3]
[10, 1, 2, 5, 3]
으로 출력될것이고 리스트도 합칠수도 있다.
list_1 = [0, 1, 2, 5, 9, 10]
del list_1[1]
print(list_1)
del list_1[3]
print(list_1)
==인덱스의 저 번호의 것을 지운다.==
즉 출력결과를 보면
[0, 2, 5, 9, 10]
[0, 2, 5, 10]
이렇게 출력될것이고
remove에 대해 알아보자면 그 인덱스 번호가 아닌 그 특정한 값을 지운다.
list_c = [1, 2, 5, 5]
list_c.remove(1)
print(list_c)
list_c.remove(5)
print(list_c)
출력결과는 어떻게 될까? 5가 전부 지워질까?
[2, 5, 5]
[2, 5]
앞에서 부터 순차적으로 지워진것을 확인 가능하다.
list_e = [3, 5, 99, -1, 0]
status = 3 in list_e
print(status)
status = -3 in list_e
print(status)
저 값이 리스트 안에 있는지 확인하는 기능
출력결과
True
False
반대로 not in은
list_e = [3, 5, 99, -1, 0]
status = 3 not in list_e
print(status)
status = -3 not in list_e
print(status)
출력결과
False
True
이런식으로 나오겠다.
student = ["kim", 98, 50, 60]
student_dict = {'name': "kim",'kor': 98, "math": 50, "eng": 60}
이렇게 사전?처럼 저장 가능하다.
student_dict['name'] = "lee"
student_dict['kor'] = 0
print(student_dict)
위코드를 넣어서 수정또한 가능하다.
dict = {"aaa": "bbb", "b": 3, "c":True}
print(dict)
dict["zx"] = -3
print(dict)
dict = {"name": "test", "type": "none"}
print(dict)
del dict ["name" ]
print(dict)
위처럼 del을 이용해 name을 삭제도 가능하다.
dict = {"name": "test"}
value = dict.get("aa")
print(value)
if value == None:
print("value None")
출력결과는
None
value None
이런식으로 출력되는데
존재하지 않는 키값을 지정해도 None이라 출력되는걸 볼수있다.
s1 = set([1, 2, 3])
s2 = set("Hello")
print(s1)
print(s2)
특징으로는 중복허용x, 순서를 신경쓰지 않는다는 것이다.
{1, 2, 3}
{'o', 'e', 'l', 'H'}
그러므로 이런식으로 출력되는걸 확인 가능하다.
집합에 원소를 추가한다.
x = set(["aaa", "bbb", "ccc"])
print(x)
x.add("aaa")
print(x)
차피 출력값은
{'ccc', 'aaa', 'bbb'}
이걸로 동일할것이다. 같은 원소가 있기때문에
x = set(["aaa", "bbb", "ccc"])
print(x)
x.remove("aaa")
print(x)
이 출력값을 봐보자
{'bbb', 'ccc', 'aaa'}
{'bbb', 'ccc'}
이렇게 'aaa'가 삭제된것을 볼수있다.
x = set(["aaa", "bbb", "ccc"])
print(x)
x.clear()
print(x)
모든요소를 지우는 함수이다.
출력값은
{'aaa', 'ccc', 'bbb'}
set()
이렇게 비워진것을 확인가능하다.
==안에 저장된 요소를 변경, 추가, 삭제가 안되는 읽기 전용 자료형이다.==
변수에 값을 저장할 때 ()(괄호)로 묶어주거나 그대로 넣어주면 tuple이 된다.
a = (38, 21, 53, 62, 19)
print(a)
이런식의 예를 들수있다.
![[Pasted image 20250925161429.png]]
이런 예제가 있는데 출력값은 뭘까?
정답은 x is not None이다.
clear 때문에 set()가 되는데 이건 None이 아닌 빈 set()이므로 False가 되어
X is not None이 출력된다.
s1 = {1, 2, 3, 4}
s2 = {4, 5, 6, 7}
print(s1 | s2)
print(s1.union(s2)) #union이 합집합임
출력값은
{1, 2, 3, 4, 5, 6, 7}
{1, 2, 3, 4, 5, 6, 7}
이런식으로 출력이 되는걸 볼수있다.
s1 = {1, 2, 3, 4}
s2 = {4, 5, 6, 7}
print(s1 - s2)
print(s1.difference(s2)) #difference가 차집합
출력값은
{1, 2, 3}
{1, 2, 3}
출력값은
이렇게 4가 빠진채 나오게 된다.
s1 = {1, 2, 3, 4}
s2 = {4, 5, 6, 7}
print(s1&s2)
print(s1.intersection(s2)) #intersection이 교집합의미
출력값은
{4}
{4}
이렇게 출력된다!
def multiple_return():
return 10, 20
tuple_data = multiple_return()
print(tuple_data[0])
print(tuple_data[1])
저렇게 함수를 정의하고 리턴값으로 받고 출력할수있다.
10
20
추가정보:
현재 이렇게 받으면 튜플로 받아지며
리스트로 받고싶으면
list_data = list(multiple_return())
이런식으로 list로 지정하여 받아주면 되겠다.
언패킹으로 또한 받을수 있는데
a, b = multiple_return() 이렇게 받으면 각각 a, b에 10, 20이 들어가겠다.
아니면 return에서 줄때 [10, 20]이렇게 주면 리턴값으로 주게된다.
a 리스트에서 중복된 숫자들을 제거하기
a = [1, 1, 1, 5, 9, 9, 9, 3, 3]
a = [1, 1, 1, 5, 9, 9, 9, 3, 3]
print(list(set(a)))
이렇게 간단하게 형을 바꾸어서 출력하면된다.
a는 대괄호로 출력되기 때문에 set으로 먼저 바꿔주고 list로 바꿔주면 되는 그런느낌? 이다.
두번째 답안도 있는데
a = [1, 1, 1, 5, 9, 9, 9, 3, 3]
b = []
for value in a:
if value not in b:
b.append(value)
else:
print("이미 값이 있습니다.", value)
print(b)
이런식으로도 답안을 작성 가능하다.
# 1. count() - 특정 문자열이 몇 번 나타나는지 세기
print("=== 1. count() 메서드 ===")
text = "안녕하세요 안녕하세요 반가워요 안녕하세요"
print(f"원본 텍스트: '{text}'")
print(f"'안녕하세요' 개수: {text.count('안녕하세요')}") # 3
print(f"'안녕' 개수: {text.count('안녕')}") # 3
print(f"'하세요' 개수: {text.count('하세요')}") # 3
print(f"'없는문자' 개수: {text.count('없는문자')}") # 0
# 영어 예제
english = "Hello world! Hello Python! Hello everyone!"
print(f"\n영어 예제: '{english}'")
print(f"'Hello' 개수: {english.count('Hello')}") # 3
print(f"'l' 개수: {english.count('l')}") # 6
print(f"'!' 개수: {english.count('!')}") # 3
print("\n" + "="*50 + "\n")
# 2. find() - 특정 문자열의 첫 번째 위치 찾기 (못 찾으면 -1)
print("=== 2. find() 메서드 ===")
sentence = "파이썬은 정말 재미있어요! 파이썬 최고!"
print(f"원본 문장: '{sentence}'")
print(f"'파이썬' 첫 번째 위치: {sentence.find('파이썬')}") # 0
print(f"'재미' 위치: {sentence.find('재미')}") # 6
print(f"'최고' 위치: {sentence.find('최고')}") # 18
print(f"'없는단어' 위치: {sentence.find('없는단어')}") # -1
# 시작 위치 지정해서 찾기
print(f"5번째 위치부터 '파이썬' 찾기: {sentence.find('파이썬', 5)}") # 15
# 실용적인 예제 - 이메일에서 @ 위치 찾기
email = "user@example.com"
at_position = email.find('@')
print(f"\n이메일 '{email}'에서 '@' 위치: {at_position}")
if at_position != -1:
username = email[:at_position]
domain = email[at_position+1:]
print(f"사용자명: {username}, 도메인: {domain}")
print("\n" + "="*50 + "\n")
# 3. index() - find()와 비슷하지만 못 찾으면 에러 발생
print("=== 3. index() 메서드 ===")
text = "Python Programming"
print(f"원본 텍스트: '{text}'")
print(f"'Python' 위치: {text.index('Python')}") # 0
print(f"'Pro' 위치: {text.index('Pro')}") # 7
print(f"'gram' 위치: {text.index('gram')}") # 10
# find()와 index()의 차이점 보여주기
print("\n--- find() vs index() 비교 ---")
test_string = "Hello World"
print(f"find('World'): {test_string.find('World')}") # 6
print(f"index('World'): {test_string.index('World')}") # 6
print(f"find('없음'): {test_string.find('없음')}") # -1
# index()로 없는 문자 찾으면 에러나는 예제
try:
result = test_string.index('없음')
print(f"index('없음'): {result}")
except ValueError as e:
print(f"index('없음'): 에러 발생! - {e}")
print("\n" + "="*50 + "\n")
# 4. join() - 리스트나 튜플의 요소들을 문자열로 연결
print("=== 4. join() 메서드 ===")
# 기본 사용법
fruits = ['사과', '바나나', '오렌지', '포도']
print(f"과일 리스트: {fruits}")
print(f"쉼표로 연결: {', '.join(fruits)}")
print(f"- 로 연결: {' - '.join(fruits)}")
print(f"공백으로 연결: {' '.join(fruits)}")
print(f"구분자 없이 연결: {''.join(fruits)}")
# 숫자는 문자열로 변환해야 함
numbers = [1, 2, 3, 4, 5]
print(f"\n숫자 리스트: {numbers}")
# print(', '.join(numbers)) # 이렇게 하면 에러!
print(f"숫자를 문자열로 변환 후 연결: {', '.join(map(str, numbers))}")
# 실용적인 예제 - 파일 경로 만들기
path_parts = ['home', 'user', 'documents', 'project', 'main.py']
file_path = '/'.join(path_parts)
print(f"\n경로 부분들: {path_parts}")
print(f"완성된 경로: {file_path}")
print("\n" + "="*50 + "\n")
# 5. upper(), lower() - 대소문자 변환
print("=== 5. upper(), lower() 메서드 ===")
mixed_case = "Hello World! 안녕하세요! PyThOn ProGramming"
print(f"원본: '{mixed_case}'")
print(f"대문자 변환: '{mixed_case.upper()}'")
print(f"소문자 변환: '{mixed_case.lower()}'")
# 기타 대소문자 관련 메서드들
print(f"첫 글자만 대문자: '{mixed_case.lower().capitalize()}'")
print(f"각 단어 첫 글자 대문자: '{mixed_case.lower().title()}'")
print(f"대소문자 뒤바꾸기: '{mixed_case.swapcase()}'")
# 실용적인 예제 - 사용자 입력 처리
user_input = " YES "
print(f"\n사용자 입력: '{user_input}'")
cleaned_input = user_input.strip().lower()
print(f"정리된 입력: '{cleaned_input}'")
if cleaned_input in ['yes', 'y', '네', 'ok']:
print("긍정적인 응답입니다!")
print("\n" + "="*50 + "\n")
# 6. lstrip(), rstrip(), strip() - 공백 제거
print("=== 6. lstrip(), rstrip(), strip() 메서드 ===")
messy_text = " 안녕하세요! 파이썬 공부중입니다! "
print(f"원본 (따옴표로 경계 표시): '{messy_text}'")
print(f"왼쪽 공백 제거 lstrip(): '{messy_text.lstrip()}'")
print(f"오른쪽 공백 제거 rstrip(): '{messy_text.rstrip()}'")
print(f"양쪽 공백 제거 strip(): '{messy_text.strip()}'")
# 특정 문자 제거하기
special_text = "...!!!안녕하세요!!!..."
print(f"\n특수문자 포함 텍스트: '{special_text}'")
print(f"양쪽 '.'과 '!' 제거: '{special_text.strip('.!')}'")
# 실용적인 예제 - CSV 데이터 처리
csv_line = " 김철수 , 25 , 서울 , 개발자 "
print(f"\nCSV 라인: '{csv_line}'")
clean_data = [item.strip() for item in csv_line.split(',')]
print(f"정리된 데이터: {clean_data}")
print("\n" + "="*50 + "\n")
# 7. replace() - 문자열 치환
print("=== 7. replace() 메서드 ===")
original = "안녕하세요! 저는 파이썬을 공부하고 있습니다. 파이썬은 정말 재미있어요!"
print(f"원본: '{original}'")
print(f"'파이썬' -> 'Python': '{original.replace('파이썬', 'Python')}'")
print(f"'!' -> '?': '{original.replace('!', '?')}'")
# 개수 제한하여 치환
print(f"첫 번째 '파이썬'만 치환: '{original.replace('파이썬', 'Python', 1)}'")
# 체인으로 여러 번 치환
messy_text = "Hello___World!!!___Python___Programming"
clean_text = messy_text.replace('___', ' ').replace('!!!', '!')
print(f"\n지저분한 텍스트: '{messy_text}'")
print(f"정리된 텍스트: '{clean_text}'")
# 실용적인 예제 - 전화번호 포맷 변경
phone = "010-1234-5678"
phone_numbers = phone.replace('-', '')
print(f"\n전화번호 원본: {phone}")
print(f"하이픈 제거: {phone_numbers}")
print("\n" + "="*50 + "\n")
# 8. split() - 문자열 나누기
print("=== 8. split() 메서드 ===")
sentence = "사과,바나나,오렌지,포도,딸기"
print(f"원본 문장: '{sentence}'")
fruits_list = sentence.split(',')
print(f"쉼표로 분리: {fruits_list}")
print(f"분리된 개수: {len(fruits_list)}")
# 공백으로 분리 (기본값)
text_with_spaces = "파이썬 프로그래밍은 정말 재미있습니다"
words = text_with_spaces.split()
print(f"\n공백 문장: '{text_with_spaces}'")
print(f"단어별 분리: {words}")
# 분리 개수 제한
limited_split = "a-b-c-d-e-f".split('-', 2)
print(f"\n분리 개수 제한 예제: 'a-b-c-d-e-f'")
print(f"최대 2번만 분리: {limited_split}")
# 실용적인 예제 - 로그 분석
log_entry = "2023-12-25 14:30:15 INFO 사용자 로그인 성공"
log_parts = log_entry.split(' ', 3)
print(f"\n로그 엔트리: '{log_entry}'")
print(f"분석된 부분: {log_parts}")
if len(log_parts) >= 4:
date, time, level, message = log_parts
print(f"날짜: {date}, 시간: {time}, 레벨: {level}, 메시지: {message}")
# 실용적인 예제 - 파일 확장자 분리
filename = "document.backup.pdf"
name_parts = filename.split('.')
print(f"\n파일명: '{filename}'")
print(f"분리된 부분: {name_parts}")
if len(name_parts) > 1:
extension = name_parts[-1]
name_without_ext = '.'.join(name_parts[:-1])
print(f"확장자: {extension}, 이름: {name_without_ext}")
문자열 총정리는 Claude코드를 사용해서 예제생성및 통합해서 생성해달라하였다!
클로드를 이용하여 정리하니 훨씬 편한것같다!
복습 개념들은 AI를 이용해 정리하여 다시한번 보는것도 괜찮은것같다.