type_casting.py
"""
타입 캐스팅(Type Casting) / 형변환
- 정수 => 실수, 정수 => 문자열, 정수 => 논리
다른데이터 타입으로 변환하는 것
- 함수
=> 정수 형변환해주는 함수 int()
=> 실수 형변환해주는 함수 float()
=> 문자열 형변환해주는 함수 str()
=> 논리 형변환해주는 함수 bool()
"""
# int 데이터 타입으로 형 변환 ---------------------------------
# int( 데이터 )
# str ==> int
# int ( 10진수 문자 '0~9')
print(type(int('200')))
value = int('200')
print(type(value))
# print(type(int('200Day'))) #10진수 써라! <= ValueError: invalid literal for int() with base 10: '200Day'
# print(type(int('200.4'))) #10진수 쓰라니까! <= ValueError: invalid literal for int() with base 10: '200.4'
# floot ==> int : 소수점 이하 데이터 손실 발생
print(type(int(200.4)), int(200.7))
# bool ==> int
# => 0, 1 => False, True
print(type(int(False)), int(False), type(False))
print(type(int(True)), int(True), type(True))
# print(type(int('True')), int('True'), type(True)) 'True'는 str
# float 데이터 타입으로 형 변환 ---------------------------------
# int( 데이터 )
# str ==> float ('0~9','.')
print(type(float('3.5')), float('3.5'))
print(type(float('35')), float('35')) #35.0이 생략된 35로 이해하고 다시 35.0으로 만듦
# print(type(float('0x123')), float('0x123')) 각 진법별 함수가 따로 있음
print(type(float('-123')), float('-123')) #-123.0
# int ==> float
print(type(float(45)), float(45)) #45.0
print(type(float(-9)), float(-9)) #-9.0
# str ==> float ('0~9','.')
형변환 시 항상 이용할 것 같으면 변수로 꼭 저장하기
float을 int로 바꾸면 무조건 버림(반올림x)
10:00
- type과 int 등은 built-in 함수가 아닌 class
- 붕어빵 재료, 레시피 세팅 = CS 초기 설정
- 보통 초기 설정은 생성자 함수가 도와주는데 파이썬은 전부 init 으로 합쳐둠..무슨 말인지 더 모르겠다; init은 initialize 약어
ex_numberic.py
# '''
# 논리 연산자 => and, or, not
# - 결과 : True, False
# - 동작방식
# * and => A and B : A, B 모두 True일 때만 True
# * or => A or B : A, B 중 하나 이상 True가 되면 True
# * not => not A : 현재 A의 상태를 반대로 True <=> False
# not True = False
# not False = True 반대로 만들어주는 토글 toggle
# '''
#
# no1 = 10
# no2 = 3
# # no1, no2 = 10, 3
#
# # and 연산자----------------------------------------------
# # no1은 no2보다 크다 그리고 100보다 큰 수
# print( no1 > no2 , no1>100 ) #True False
# print( no1>no2 and no1>100 ) #False
# print( no1>no2 and no1>100 and no1>0) #False
#
# # or 연산자----------------------------------------------
# # 1개 이상만 True가 되면 True로 결정
# print( no1 > no2 , no1>100 ) #True False
# print( no1>no2 or no1>100 ) #False
# print( no1>no2 or no1>100 and no1>0) #False
#
# # not 연산자----------------------------------------------
# # 현재 값을 반대로 즉, True => False, False => True
# # False => 0, True => 1 / 0이 아닌 모든 숫자
# print(not False, not True)
# print(not 0, not 1)
# print(not 2, not -3, not 0.0)
#
#
# '''
# 객체 비교 연산자 => is, is not
# - 결과 : True, False
# - 동작방식
# * is => A is B : A, B가 동일한 데이터 타입의 객체 여부
# * is not => A is not B : A, B가 서로 다르 데이터 타입의 객체 여부
# '''
# print(f'10 is 10 => {10 is 10}')
# print(f'10 is 21 => {10 is 21}')
# print(f'10 is 20.0 => {10 is 10.0}')
#
# print(f'10 is 10 => {10 == 10}')
# print(f'10 is 21 => {10 == 21}')
# print(f'10 is 20.0 => {10 == 10.0}')
# -------------------------------------------------------------
# [실습1] 2개 숫자 데이터 입력 받은 후 2개의 값을 산술 연산 결과를 출력하세요.
# +, -, *, /, //, %, **
# [출력 예시] 10 + 4 = 14
# -------------------------------------------------------------
# -------------------------------------------------------------
# [실습2] [실습1]에서 입력 받은 숫자 데이터를 활용하여 비교 연산 결과를 출력하세요.
# >, <, >=, <=, ==, !=
# [출력 예시] 10>4 => True
# 10==4 => False
# -------------------------------------------------------------
# -------------------------------------------------------------
# [실습3] [실습1]에서 입력 받은 숫자 데이터를 활용하여
# 최댓값과 최솟값을 추가로 입력 받은 후 논리연산 결과를 출력하세요.
# [출력 예시] 10>4 and 10>최대값 => True
# not 10 => False
#
# -------------------------------------------------------------
number1 = int(input('첫 번째 숫자 데이터를 입력하세요: '))
number2 = int(input('두 번째 숫자 데이터를 입력하세요: '))
print(f'{number1} + {number2} = {number1+number2}')
print(f'{number1} - {number2} = {number1-number2}')
print(f'{number1} * {number2} = {number1*number2}')
print(f'{number1} / {number2} = {number1/number2}')
print(f'{number1} // {number2} = {number1//number2}')
print(f'{number1} % {number2} = {number1%number2}')
print(f'{number1} ** {number2} = {number1**number2}')
print(f'{number1} > {number2} => {bool(number1>number2)}')
print(f'{number1} < {number2} => {bool(number1<number2)}')
print(f'{number1} >= {number2} => {bool(number1>=number2)}')
print(f'{number1} <= {number2} => {bool(number1<=number2)}')
print(f'{number1} == {number2} => {bool(number1==number2)}')
print(f'{number1} != {number2} => {bool(number1!=number2)}')
max_number = int(input('임의의 최댓값 데이터를 입력하세요: '))
min_number = int(input('임의의 최솟값 데이터를 입력하세요: '))
print(f'{number1} > {number2} and {number1} > {max_number} => {number1>number2 and number1>max_number}')
print(f'{number1} > {number2} and {number1} > {min_number} => {number1>number2 and number1>min_number}')
print(f'not {number1} => {bool(not number1)}')
print(f'{number1} > {number2} or {number1} > {max_number} => {number1>number2 or number1>max_number}')
print(f'{number1} > {number2} or {number1} > {min_number} => {number1>number2 or number1>min_number}')
print(f'not {number1} => {bool(not number1)}')
# -------------------------------------------------------------
# 입력 => str 데이터 타입
no1 = input("숫자 입력 : ")
no2 = input("숫자 입력 : ")
# str => int : 타입 캐스팅
no1 = int(no1)
no2 = int(no2)
#산술 연산 출력
print(f' {no1} + {no2} = {no1+no2}')
#비교 연산 출력
#str 문자 타입
maxValue=input("임의의 큰 수 입력 : ")
minValue=input("임의의 작은 수 입력 : ")
#str => int 변환
maxValue = int(maxValue)
minValue = int(minValue)
#논리 연산 결과 출력
#and 연산자 => 왼쪽/오르쪽 모두 True인 경우만 True
print(f"{no1}>{no2} and {no1} > {maxValue} => {no1>no2 and no1>maxValue}")
print(f"{no1}>{no2} and {no1} > {minValue} => {no1>no2 and no1>minValue}")
#or 연산자 => 왼쪽/오르쪽 모두 False인 경우만 False가 됨
print(f"{no1}>{no2} or {no1} > {maxValue} => {no1>no2 or no1>maxValue}")
print(f"{no1}>{no2} or {no1} > {minValue} => {no1>no2 or no1>minValue}")
# not 연산자 => not 데이터, not 변수명
print(f'not {no1} => {not no1}')
ex_is.py
# -------------------------------------------------------------------
# 객체 비교 연산자 살펴보기
# => 메모리 힙 영역에 존재하는 데이터 => 객체(object)
# => 데이터의 설명서/명세서에 해당하는 클래스(class)를 기반으로 객체 생성함!
# => 파이썬은 모~~든 데이터는 객체(object)
# -------------------------------------------------------------------
print(10 is 10)
no1 = 10
no2 = 10
no3 = 20
print(no1 is no2)
print(no1 is no3)
no1=no3
print(no1 is no3) #변수 간의 레퍼런스가 같은 지 확인 하기 위해 is 사용
numberic_func.py
# -------------------------------------------------------------------
# 숫자 데이터 관련 내장 함수들 살펴보기
# -------------------------------------------------------------------
# 내장함수 => 빌트인함수, 기본으로 제공되는 함수
# 절대값 반환하는 내장함수 = abs(숫자 데이터)
num=3
print(f'{num} 절대값 : {abs(num)}')
num=-3
print(f'{num} 절대값 : {abs(num)}')
# 실수값에서 소수점 이하 자릿수 처리해주는 내장함수 => round(실수데이터, 소수점 이하 자리 숫자)
# 지정된 자릿수 바로 뒤에 값이 5이상이면 반올림
num=1.23456789
print(f'{num}')
print(f'{num} => {round(num,1)}')
print(f'{num} => {round(num,3)}') #3자리까지 원하기 때문에 4자리에서 반올림
num=1.567890
print(round(num), type(round(num))) #2(round)라서 소수 0번째 자리로 반올림, int타입
# 가장 큰 수 / 가장 작은 수 찾아주는 내장함수 => max() / min()
print( max(1,2,3))
print(f'max(1,2,3) => {max(1,2,3)}')
print(f'max(abs(-1,2,5,-9) => {max(abs(-1),abs(2),abs(5),abs(-9))}')
print(f'min(1,2,3) => {min(1,2,3)}')
#거듭제곱 계산해주는 내장함수 => pow()
print(f'pow(2,3) => {pow(2,3)}')
print(f'pow(2,8) => {pow(2,8)}')
# -------------------------------------------------------------------
# 숫자 표현 방식으로 변환 내장함수
# -16진수로 변환 내장함수 hex(정수) => 0x숫자 => str
# -8진수로 변환 내장함수 oct(정수) => 0o숫자 => str
# -2진수로 변환 내장함수 bin(정수) => 0b숫자 => str
# -------------------------------------------------------------------
num = 72
numHex=hex(num)
numOct=oct(num)
numBin=bin(num)
print(f'{num}의 16진수 {numHex}, 8진수 {numOct}, 2진수 {numBin}')
# -------------------------------------------------------------------
# 문자/문자열 데이터 살펴보기 => str 데이터 타입
# - 규칙/문법 ==> '데이터', "데이터", '''데이터''', """데이터"""
# -------------------------------------------------------------------
msg = "Happy New Year 2024!" # str의 데이터는 원소/요소로 부름
# 01234/5/678/9/0123/4/5678/9 0부터 19번째까지 공백과 특수문자 모두 인덱싱
# 09876/5/432/1/0987/6/5432/1 -19부터 -1까지 오른쪽부터도 인덱싱 가능
#출력
print(msg)
# -------------------------------------------------------------------
# 문자/글자 안에서 일부분만 추출해서 다루기 => 인덱싱
# - 왼쪽에서 오른쪽 : 0, 1, ...
# - 오른쪽에서 왼쪽 : ..., -2, -1
# - 원소/요소 추출 규칙/문법 => 변수명[인덱스]
print(F'0번 원소 => {msg [0]}')
print(F'1번 원소 => {msg [1]}')
print(F'19번 원소 => {msg [19]}')
# index out of range : 인덱스 범위 벗어나면 오류 발생
# print(F'20번 원소 => {msg [20]}') #IndexError: string index out of range
# 종료 코드 1(으)로 완료된 프로세스 - 에러난 것
#Happy만 화면에 출력하기
print(msg[0], msg[1], msg[2], msg[3], msg[4], sep='')
print(msg[0:5])
print(msg[:5])
# 2024!만 화면에 출력하기
print(msg[15], msg[16], msg[17], msg[18], msg[19], sep='')
print(msg[15:20])
print(msg[-5], msg[-4], msg[-3], msg[-2], msg[-1], sep='')
print(msg[-5:0])
# New만 화면에 출력하기
print(msg[6], msg[7], msg[8], sep='')
# -------------------------------------------------------------------
# 문자/글자 안에서 일부분만 추출해서 다루기 ==> 슬라이싱(Slicing)
#
# - 원소/요소 추출 규칙/문법 => 변수명[시작인덱스:끝인덱스+1:간격]
# - 조건 : 연속된 인덱스 또는
msg = "Happy New Year 2024!"
# Happy만 화면에 출력하기 => 슬라이싱으로 출력하기
print(f'msg[0:4] => {msg[0:4]}')
print(f'msg[0:4] => {msg[0:5]}')
# 2024!만 화면에 출력하기 => 슬라이싱으로 출력하기
print(f'msg[15:20] => {msg[15:20]}')
print(f'msg[-5:0] => {msg[-5:0]}') # 아무것도 안 나옴
print(f'msg[-5:0] => {msg[-5:-1]}') # 2024만 나오고 !가 안 나옴
print(f'msg[-5:0] => {msg[-5:20]}') # 모두가 음수일 이유는 없음
# 첫번째부터 시작하는 경우 시작 인덱스 생략 가능
print(f'msg[0:5] => {msg[0:5]}, msg[:5] => {msg[:5]}')
# 마지막번째까지 인 경우 마지막인덱스 생략 가능
print(f'msg[-5:0] => {msg[-5:20]}, msg[-5:] => {msg[-5:]}, msg[15:] => {msg[15:]}') # 모두가 음수일 이유는 없음
print(f'msg[-5:0] => {msg[-5:20]}') # 모두가 음수일 이유는 없음
#처음부터 끝까지 출력하기
print(f'msg[0:20] => {msg[0:20]}, msg[:] => {msg[:]}') # 모두가 음수일 이유는 없음
str_func.py
# -------------------------------------------------------------
# str 데이터 타입과 관련된 내장 함수
#-------------------------------------------------------------
# 원소/요소의 갯수를 알려주는 내장함수 => length의 약자 len()
msg = "christmas2023!"
print(f'len(msg) => {len(msg)}개')
# print(f'len(2024) => {len(2024)}개') #숫자 데이터는 길이를 따질 수 없음. 즉 원소/요소 없음
#TypeError: object of type 'int' has no len()
# 문자의 코드값을 알려주는 내장 항수 => ord(문자 1개)
print(f"ord('a') => {ord('a')}")
# American Standard Code => ASCII CODE
# Hello의 코드값 출력하기
code_h = ord('H')
code_e = ord('e')
code_l = ord('l')
code_o = ord('o')
print(f'Hello의 코드값 => {code_h} {code_e} {code_l} {code_l} {code_o}')
print(f'Hello의 코드값 => {bin(code_h)} {bin(code_e)} {bin(code_l)} {bin(code_l)} {bin(code_o)}')
print(f'Hello의 코드값 => {bin(code_h)[2:]} {bin(code_e)[2:]} {bin(code_l)[2:]} {bin(code_l)[2:]} {bin(code_o)[2:]}')
# 코드값에 해당하는 문자를 반환해주는 내장 항수 => chr(코드값)
# 코드값 65에 해당하는 문자 반환
print(f'chr(65) => {chr(65)}')
print(f'chr(65) => {chr(0b1001000)}')
print(ord('0'), ord('5'), ord('5') - ord('0'))
# -------------------------------------------------------------
# str 데이터 타입 연산
#-------------------------------------------------------------
# -------------------------------------------------------------
# 산술 연산 => 덧셈, 뺄셈, 곱셈, 나눗셈....
# -------------------------------------------------------------
msg1="Good"
msg2="Happy"
# 덧셈 연산-------------------------------------------------------------
print( f'msg1 + msg2 => {msg1 + msg2}') #GoodHappy
# print( f'msg1 + 10 => {msg1 + 10}') #문자열끼리만 가능
# TypeError: can only concatenate str (not "int") to str
# str + str만 가능
print( f'msg1 + 10 => {msg1 + str(10)}') #Good10
# 뺄셈 연산-------------------------------------------------------------
# 미지원
# print( f'msg1 - msg2 => {msg1 - msg2}')
# TypeError: unsupported operand type(s) for -: 'str' and 'str'
# 곱셈 연산-------------------------------------------------------------
# 정수가 아니라서 곱셈을 못함
# print( f'msg1 * msg2 => {msg1 * msg2}')
# TypeError: can't multiply sequence by non-int of type 'str'
# str * int 또는 int * str ==> str 데이터를 int만큼 반복 연결
print( f'msg1 * 10 => {msg1 * 10}') #Good 열 번 반복
print( f'3 * msg2 => {3 * msg2}') #Happy 세 번 반복
# -------------------------------------------------------------
# 비교 연산 => >, <, >=, <=, ==, !=
# - str 안에 원소/요소 단위로 비교 됨
# -------------------------------------------------------------
print(f"'H'>'I' => {'H'>'I'}, {ord('H')}, {ord('I')}") #False 코드값으로 비교
print(f"'H'>'h' => {'H'>'h'}, {ord('H')}, {ord('h')}") #False 대문자가 더 뒤에 있음
# 동일한 인덱스에 있는 요소의 코드값으로 비교
print(f' "Ha" > "HA" => {"Ha" >"HA"}')
print(f' "Ha" > "Hb" => {"Ha" >"Hb"}')
# print(f' "Hb" == "Ia" => {"Hb" == "Ia"}')
# print(ord("H"), ord("b"), ord("I"), ord("a"))
# -------------------------------------------------------------
# 논리 연산 => and, or not
# - not 문자열
# -------------------------------------------------------------
# str => bool 관계
# - 요소/원소가 0개 인 경우 => False
# - 요소/원소가 1개 이상인 경우 => True
print( bool ("HAppy"), bool("")) #값이 없을때만 False, 있으면 무조건 True
print(f'not "HAPPY" ')
# -------------------------------------------------------------
# 멤버 연산자 => 원소/요소가 있는 데이터 타입의 경우 사용
# - 요소 in 데이터 : 요소가 데이터에 포함되어 있는 경우 True
# - 요소 not in 데이터 : 요소가 데이터에 미포함되어 있는 경우 True
# -------------------------------------------------------------
print(f' "H" in "Happy" : {"H" in "Happy"}')
print(f' "h" in "Happy" : {"h" in "Happy"}')
print(f' "H" not in "Happy" : {"H" not in "Happy"}')
print(f' "h" not in "Happy" : {"h" not in "Happy"}')
print(f' "1" in "1357" : {"1" in "1357"}')
print(f' "2" in "1357" : {"2" in "1357"}')
# -------------------------------------------------------------
# str 데이터에서 특별한 의미를 가지는 문자를 이스케이프 문자
# - 형태 : \알파벳1개 또는 \문자1개
# - 대표
# \n : 줄바꿈 \t : 탭 간격
# \' : 인용부호 \" : 인용부호
# \u : 유니코드 \\ : 파일이나 웹 주소 경로
# -------------------------------------------------------------
# 인용부호 살펴보기 -----------------------------------------------
print('Happy New Year 2024~!') # Happy New Year 2024~!
# print('Happy New 'Year' 2024~!')
print('Happy New \'Year\' 2024~!') # Happy New 'Year' 2024~!
# print("Happy New "Year" 2024~!")
print("Happy New \"Year\" 2024~!") # Happy New "Year" 2024~!
# 파일 경로 ---------------------------------------------------
print('C:\\Users\\anece\\test.py') # 이스케이프 문자 비활성화
# => 파일 또는 데이터 경로일 경우 이스케이프 문자를 비활성화 설정
# => r'경로' 로 작성 시 이스케이프 비활성화
# print('C:\Users\anece\test.py')
print(r'C:\Users\anece\test.py') # 로우 데이터
이스케이프 문자 중 \ (경로 표시)
and 는 뒤의 값이 F인지를 우선 판단 / or 은 앞의 값이 T인지를 우선 판단
질문
어제 오늘 5시간 잤더니 겁나 피곤하다..
근데 재밌고만