09:00 숙제 확인
work_12_28_name.py
'''
1. 아래에 데이터를 저장하는 코드를 작성하세요:
'''
q1 = "kim1234@naver.com"
q2 = "http:www.naver.com"
q3 = "홍길동"
q4 = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRr"
q5 = "ABC1DEF2GHI3JKL4MNO5PQR6STU7VWX8YZ"
q6 = "881120-1068234"
print(f'1-1 : ', q1[:7])
print(f'1-2 : ', q2[9:])
print(f'1-3 : ', q3[1:])
print(f'1-4 : 대문자 -', q4[::2], ', 소문자 -', q4[1::2])
print(f'1-5 : ', q5[3::4])
print(f'1-6 : 생년월일 -', q6[:6], ', 숫자부분 -', q6[7:])
'''
2. 아래 조건에 만족하도록 코드 작성하세요.
'''
input_int = int(input('정수 입력 :'))
print(f'''10진수 {input_int}
16진수 : {hex(input_int)}
8진수 : {oct(input_int)}
2진수 : {bin(input_int)}''')
'''
3. 아래 조건에 만족하도록 코드 작성하세요.
'''
input1 = input('Happy를 입력하세요: ')
input2 = input('New를 입력하세요: ')
input3 = input('Zoo를 입력하세요: ')
print(f'''코드 값이 가장 큰 단어 : {max(input1,input2,input3)}
코드 값이 가장 작은 단어 : {min(input1,input2,input3)}''')
'''
4. 아래 조건에 만족하도록 코드 작성하세요.
# '''
sentence = "오늘은 행복한 Thursday입니다."
input4 = input('목요일을 입력하세요: ')
print(f"'{input4}' 단어 메시지 존재 여부 : {bool(input4 in sentence)}")
input5 = input('happy를 입력하세요: ')
print(f"'{input5}' 단어 메시지 존재 여부 : {bool(input5 in sentence)}")
'''
5. 아래 조건에 만족하도록 코드 작성하세요.
'''
input6 = input('Zoo를 입력하세요: ')
print(f'{input6} 코드값 : {bin(ord(input6[0]))[2:]} {bin(ord(input6[1]))[2:]} {bin(ord(input6[2]))[2:]}' )
복습 데이터 타입 별 가능한 연산자
수치 데이터 - int/float - 산술,비교, 논리
- complex
문자 데이터 - 산술 - 덧셈str+str/곱셈str*int
- 나머지 %
- 비교 - 코드값 >,<,≥,≤,=,≠
- 멤버 - in / not in
함수 - 특징 기능의 코드 묶음
특정 Data Type
10:00
and 는 앞에 거짓일 가능성 높은 것을, or는 앞에 참일 가능성이 높은 것을 놓아서 빨리 시간에 따라 작성될 수 있도록 함
ex_str_method.py
# ----------------------------------------------------------
# str 데이터 타입 전용의 함수 즉 메서드(Method) 살펴 보기
# - 메서드(Method)
# 특정 데이터 타입에서만 사용 가능한 함수를 의미
# 사용 방법
# 변수명.메서드명() ==> msg="Good"
# msg. 으로 검색 후
# msg.메서드명()
# 데이터.메서드명() ==> "Good".메서드명()
# ----------------------------------------------------------
# str을 대문자로 변환 ==> upper() 메서드
print("Good".upper())
# str을 소문자로 변환 ==> lower() 메서드
print("Good".lower())
#str이 모두 대문자인지 검사 후 결과 변환 ==> isupper() 메서드
print("Good".isupper())
#str이 모두 소문자인지 검사 후 결과 변환 ==> islower() 메서드
print("Good".islower())
#str이 0~9로 구성되어 있는지 검사 후 결과 변환 ==> isdecimal() 메서드
print("Good".isdecimal(), "012".isdecimal(), "-9".isdecimal()) #음수는 False
#str이 문자로만 구성되어있는지 검사 후 결과 변환 ==> isalpha() 메서드
print("Good".isalpha(), "Good2024".isalpha(), "한글".isalpha())
#str이 문자, 숫자로만 구성되어 있는지 검사 후 결과 변환 ==> isalnum() 메서드
print("Good".isalnum(), "Good2024".isalnum(), "한글".isalnum())
#str 문자에서 특정 문자/문자열로 시작하는지 검사 후 결과 변환 ==> startswith() 메서드
print("??Happy New".startswith("??"))
print("??Happy New".startswith("!"))
#str 문자에서 특정 문자/문자열로 끝나는지 검사 후 결과 변환 ==> endswith() 메서드
print("Happy New??".endswith("??"))
print("Happy New??".endswith("!"))
#str 문자에서 특정 문자/문자열로 끝나는지 검사 후 결과 반환 => jpg
print("flower.jpg??".endswith("jpg"))
print("flower.png??".endswith("jpg"))
print("flower.png??".endswith(("jpg","png","txt")))
# print("flower.txt"[-3:] == "jpg" or "flower.txt"[-3:] == "png" or "flower.txt"[-3:] == "txt")
# print("flower.txt" in ('jpg', 'png', 'txt'))
#str 특정 인덱스 문자를 변경해주는 메서드 => replace() 메서드
name = "HongGulDong"
# 01234567890
# => u ===> i로 변경
print(name[5])
# name[5]='i' ==> 인덱싱으로는 미지원 기능 ==> 메서드 제공
print(name.replace('o','*'))
print(name.replace('o','*',1))
name=name.replace('u','i')
ex_text_01.py
# ----------------------------------------------------------
# [실습1] 단어를 입력 받은 후 아래 코드를 작성하세요.
# - 입력 받은 단어가 알파벳만으로 구성되어 있는지 검사
# - 입력 받은 단어가 숫자만으로 구성되어 있는지 검사
# - 입력 받은 단어가 모두 대문자로만 구성되어 있는지 검사
# - 입력 받은 단어가 모두 소문자로만 구성되어 있는지 검사
# ----------------------------------------------------------
test = input("단어를 입력해주세요: ")
print(f"""단어가 알파벳만으로 구성되어 있습니다 : {test.isalpha()}
단어가 숫자만으로 구성되어 있습니다 : {test.isnumeric()}
단어가 모두 대문자로만 구성되어 있습니다 : {test.isupper()}
단어가 모두 소문자로만 구성되어 있습니다 : {test.islower()}""")
# ----------------------------------------------------------
# [실습2] 파일명을 입력 받은 후 아래 코드를 작성하세요.
# - 입력 받은 파일이 text 파일인지 검사
# - 입력 받은 파일이 jpg 파일인지 검사
# - 입력 받은 파일이 py 파일인지 검사
# ----------------------------------------------------------
test2 = input("파일명을 입력해주세요:")
print(f"""입력 받은 파일은 text 파일입니다 : {test2.endswith('txt')}
입력 받은 파일은 jpg 파일입니다 : {test2.endswith('jpg')}
입력 받은 파일은 py 파일입니다 : {test2.endswith('py')}
""")
# 이메일 검증?
test3 = "holicalday@naver.com"
print('@' and '.' in test3)
filename=input("파일명 입력 : ")
print(f'{filename} text 파일 여부 : {filename.endswith("txt")}')
print(f'{filename} jpg 파일 여부 : {filename.endswith("jpg")}')
print(f'{filename} py 파일 여부 : {filename.endswith("py")}')
ex_str_method_02.py
# ----------------------------------------------------------
# str 데이터 타입 전용의 함수 즉 메서드(Method) 살펴 보기
# - 메서드(Method)
# 특정 데이터 타입에서만 사용 가능한 함수를 의미
# 사용 방법
# 변수명.메서드명() ==> msg="Good"
# msg. 으로 검색 후
# msg.메서드명()
# 데이터.메서드명() ==> "Good".메서드명()
# ----------------------------------------------------------
# str 데이터에서 특정 문자의 인덱스를 반환하는 메서드 => index()
# - 왼쪽 ----> 오른쪽, 제일 먼저 발견되는 문자의 인덱스를 반환
# - 존재하지 않는 str 인덱스 찾을려고 하면 Error 발생
# ----------------------------------------------------------
data = "Merry Christmas"
# 012345678901234
# 23 6 8
print(f"data.index('C')) => {data.index('C')}")
print(f"data.index('r')) => {data.index('r')}")
print(f"data.index('r', 3)) => {data.index('r',3)}")
print(f"data.index('r', 4)) => {data.index('r',4)}")
print(f"data.index('r', {data.index('r')}+1) => {data.index('r')+1}")
first_r=data.index('r') # 0번 원소부터 하나씩 검사해서 'r'에 해당하는 인덱스 찾기
print(f"data.index('r', first_r+1) => {data.index('r'), first_r+1}")
second_r = data.index('r', first_r+1) # 첫 번째 'r' 인덱스 이후 원소부터 하나씩 검사해서 'r'에 해당하는 인덱스 찾기
third_r = data.index('r', second_r+1) # 두 번째 'r' 인덱스 이후 원소부터 하나씩 검사해서 'r'에 해당하는 인덱스 찾기
# 하지만 이렇게 하는 것이 재사용하지 않기 때문에
# 그냥 data.index('r')를 넣는 것이 메모리 상 나은 편이긴 하나
# 알아보기 용이한 장점이 있음
# ----------------------------------------------------------
# str 데이터에서 특정 문자의 인덱스를 반환하는 메서드 => find()
# - 왼쪽 ----> 오른쪽, 제일 먼저 발견되는 문자의 인덱스를 반환
# - 존재하지 않는 str 인덱스 찾을려고 하면 -1 발생 (0번부터는 이미 할당되어 있기 때문에)
# ----------------------------------------------------------
# !의 인덱스를 찾기
print(f"data.find('!')) => {data.find('!')}")
# ----------------------------------------------------------
# str 데이터에서 문자열 분리해주는 메서드 => split()
# - 기본값 : 스페이스 바, 공백 기준으로 1개의 str을 여러 개의 str로 분리
# ----------------------------------------------------------
data = "Happy New Year 1 2 3 4 5"
# str에서 공백을 기준으로 str 나누기
datas = data.split()
print(f"datas => {datas}")
print( type( datas ), datas)
# print(datas[2:][:4][1:]) 슬라이싱을 반복하면 왼쪽부터 슬라이싱 된 내용을 처리한 후 다시 리스트 상태에서 슬라이싱 함
# list에 저장된 원소/요소 하나씩 읽기 => 변수명[인덱스]
print( f" datas[0] => {datas[0]}")
print( f" datas[1] => {datas[1]}")
print( f" datas[-1] => {datas[-1]}")
print(f"datas => {data.split('e')}")
juminNo = '123456-1234567'
birth = juminNo[:juminNo.index('-')]
number = juminNo[juminNo.index('-')+2:]
juminNos = juminNo.split('-')
print(juminNos)
# ----------------------------------------------------------
# 리스트(List) 데이터 타입
# - 여러 종류의 여러 개의 데이터를 저장하는 타입
# - 문법 : [ 데이터1, 데이터2, ..., 데이터N ]
# - 특징 : 데이터 하나 하나를 요소/원소 라고 함
# 하나 하나의 요소/원소를 식별하기 위해서 인덱싱(Indexing)
# - 순서가 있는 데이터 타입 => 시퀀스 데이터 타입 *str도 시퀀스 데이터 타입
# ----------------------------------------------------------
# 리스트 데이터 생성 -------------------------------------------
# 숫자 10개를 메모리에 저장
no1 = 10
no2 = 30
no3 = 100
no4 = 5
no5 = 12
no6 = 32
no7 = 102
no8 = 51
no9 = 11
no10 = 31
no = [10, 30, 100, 5, 12, 32, 102, 51, 11, 31]
# 0 1 2 3 4 5 6 7 8 9
# -10 -9 -8 -7 -6 -5 -4 -3 -2 -1
print(f'id(no) => {id(no) }')
print(f'id(no[0])) => {id(no[0])}')
print(f'id(no[1])) => {id(no[1])}')
# 리스트의 원소/요소 한 개씩 접근하는 방법 ==> 변수명[인덱스]
# - 왼쪽 => 오른쪽 : 0 ~
# - 오른쪽 => 왼쪽 : -1 ~
# => 슬라이싱 가능
# ----------------------------------------------------------
# 마지막 3개의 점수만 출력해주세요
print(no[-3:])
# 짝 수번째 인덱스 요소만 출력해주세요
print(f'짝수 요소만 출력 : {no[::2]}')
print(f'홀수 요소만 출력 : {no[1::2]}')
ex_list_02.py
# ----------------------------------------------------------
# 다양한 리스트 생성
# ----------------------------------------------------------
# 실수 데이터로 구성된 리스트 생성
floatNums = [4., 3.1, 6.3, 5.01]
# str 데이터로 구성된 리스트 생성
strNums = ['44', '56', '98']
# bool 데이터로 구성된 리스트 생성
boolNums = [False, False, True, True, True]
# 다양한 데이터 타입으로 구성된 리스트 생성
nums = ['100', 98, False, 7.12, 'Apple', True, 7>6]
print(floatNums, strNums, boolNums, nums)
# [4.0, 3.1, 6.3, 5.01] ['44', '56', '98'] [False, False, True, True, True] ['100', 98, False, 7.12, 'Apple', True, True]
# 빈 리스트 생성
nums = []
print(nums) #[]
# 리스트 안에 리스트로 구성된 리스트 생성
nums = [10, 20, "한글", ['A', 'B'], boolNums, 200, 10.0]
# 0 1 2 3 4 5 6
print(nums) # [10, 20, 30, ['A', 'B'], [False, False, True, True, True], 200, 100]
# 리스트의 요소 출력
print(f'nums[0] => {nums[0]}, {type(nums[0])}')
print(f'nums[1] => {nums[1]}, {type(nums[1])}')
print(f'nums[2] => {nums[2]}, {type(nums[2])}')
print(f'nums[3] => {nums[3]}, {type(nums[3])}')
print(f'nums[4] => {nums[4]}, {type(nums[4])}')
print(f'nums[5] => {nums[5]}, {type(nums[5])}')
print(f'nums[6] => {nums[6]}, {type(nums[6])}')
# B만 가져오려면?(3번의 1번)
print(f'nums[3][1] => {nums[3][1]}, {type(nums[3][1])}')
data = [1, [ [1,2,3], 'A']]
# 라고 했을 때 1차원은 [1, [ [1,2,3], 'A']]
# 2차원은 [ [1,2,3], 'A']
# 3차원은 [1,2,3]
# ------------------------------------------------------------
# range() 내장함수
# - 숫자의 범위를 생상해주는 함수
# - 반환값/결과값/리턴값 : range 타입
# - 범위에 포함되는 숫자 데이터는 원소/요소라고 함 => 인덱싱으로 접근
# ------------------------------------------------------------
# 1 ~ 20으로 구성된 정수 데이터 생성
nums = range(20)
print(f'nums => {nums}, {type(nums)}')
print(f'nums => {nums[0]}, {type(nums[0])}')
print(f'nums => {nums[-1]}, {type(nums[-1])}')
print(f'nums => {len(nums)}개')
# 앞부분 5개 원소까지만 추출 => 슬라이싱
print(f'nums => {nums[:5]}, {type(nums[0:5])}')
# range => list 형 변환하기 => list(데이터)
print(f'list(nums) => {list(nums)}')
# 0~100으로 구성된 정수 리스트 생성해주세요.
numsList=list(range(101))
numsList2=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,20]
print(numsList)
print(numsList2)
# ------------------------------------------------------------
# range(시작값, 끝값)
# - 시작값 => 기본 : 0 range(10) => 0 <= ~ < 10
# - 시작값 => 기본 : 1 range(1,10) => 1 <= ~ < 10 1,2,3,4,5,6,7,8,9
# - 시작값 => 기본 : 5 range(5,10) => 5 <= ~ < 10 5,6,7,8,9
# ------------------------------------------------------------
# 1~30 범위에서 3의 배수만으로 구성된 리스트 생성
# 3,6,9,12,15,18,21,24,27,30
threes = [3,6,9,12,15,18,21,24,27,...,999]
# ------------------------------------------------------------
# range(시작값, 끝값)
# - 시작값 => 기본 : 0, 증감 : 1 range(10) => 0 <= ~ < 10 0,1,2,3,4,5,6,7,8,9
# - 시작값 => 기본 : 1, 증감 : 1 range(1,10) => 1 <= ~ < 10 1,2,3,4,5,6,7,8,9
# - 시작값 => 기본 : 1, 증감 : 2 range(1,10,2) => 1 <= ~ < 10 1,3,5,67,9
# ------------------------------------------------------------
# 1~100 범위에서 3의 배수만으로 구성된 리스트 생성
threes1 = list(range(3,101,3))
print(threes1)
17:20
ex_list_op.py
# ------------------------------------------------------------
# List 자료형의 연산 살펴보기
# - 산술연산
# - 비교연산
# - 멤버연산자
# ------------------------------------------------------------
#
# 1~50 범위의 2의 배수로 구성된 리스트 생성
twoNums = list(range(2,51,2))
print(twoNums)
# 산술연산 => 덧셈(+), 곱셈(*)-------------------------------------
datas = twoNums + ["A", "B"] #뒤에 추가됨, List끼리만 가능
print(datas)
# list + str => list + list(str)
# datas = (twoNums + "ABC") #List끼리만 가능
datas = (twoNums + list("ABC")) # 마지막에 A, B, C로 추가됨
print(list("ABC"))
print(datas)
# list + str => str(list) + str
print(str(twoNums) + "ABC") #[~]ABC 가 됨
aa=str(twoNums)
print(aa[0]) # [ 나옴
# list * int => int만큼 원소를 반복해서 하나의 List로 만듦
print(twoNums * 3)
# list + int => list + list(int)
# datas = (twoNums + 11) #List끼리만 가능
# datas = (twoNums + list(11)) #List끼리만 가능
# print(list(11))
# print(datas)
# 멤버 연산 => in / not in ----------------------------------------
# => 결과 : True / False
print(datas)
print("C" in datas)
print(2 in datas)
ex_list_03.py
# ------------------------------------------------------------
# List의 원소/요소 데이터 변경 및 삭제
# ------------------------------------------------------------
# "Merry Christmas"의 문자 1개 1개를 원소로 가지는 리스트로 생성하기
MC = list("Merry Christmas")
print(f'MC => {MC}')
# => ' ' 데이터를 '***'로 변경하기
# MC_space = MC[5]
print(f'MC[5] => {MC[5]}')
MC[5] = '***'
print(f'MC[5] => {MC[5]}')
print(f'MC => {MC}') #list는 각 문자마다 코드값이 있기 때문에 부분 할당이 가능함
# 삭제(명령어임, 함수X) ==> del 데이터 또는 del(데이터)--------------------
del MC[5]
print(f'MC[5] => {MC[5]}')
print(f'MC => {MC}')
del (MC[5])
print(f'MC[5] => {MC[5]}')
print(f'MC => {MC}')
del MC
# print(MC)
오늘의 질문
파이썬에서 빌트인함수와 클래스의 역할은 아직 체감이 안되는데 왜 함수와 클래스를 구분하는지
endswith()에서 (””)와 ((””))의 차이
print("flower.png??".endswith(("jpg","png","txt"))
튜플로 ("jpg","png","txt")를 하나로 묶어준 것, 튜플은 다음에
연습만이 살 길이다!
화요일에 튜플, 딕셔너리, 셋까지 자료형 마무리할 예정