숫자의 다양한 표현법
- 2진수 : 0b1
- 8진수 : 0o1
- 10진수 : 1
- 16진수 : 0x1
정수 => 2진수로 변호나해주는 내장함수 bin()
cf) bin 은 정수값(bin) 주면 문자열(str) 반환
num=7 bin_num = bin(num) print(f'{num}의 2진수 표현 : {bin(num)}')
7의 2진수 표현 : 0b111
정수 => 2진수로 변호나해주는 내장함수 oct()
oct_num = oct(num) print(f'{num}의 8진수 표현 : {oct_num}')
7의 8진수 표현 : 0o7
정수 => 16진수로 변호나해주는 내장함수 hex()
hex_num = hex(num) print(f'{num}의 16진수 표현 : {hex_num}')
7의 16진수 표현 : 0x7
사람 문자 <==> 컴퓨터/기계 문자
- 사람 ----> 기계어 : 인코딩 (Encoding)
- 사람 <---- 기계어 : 디코딩 (Decoding)
data = 'a'
사람 문자 ===> 기계어 변환 내장함수 ord(문자 1개) cf) ord 함수는 10진수로 표현됨.
ord_data = ord(data) print(f'{data}의 코드값 : {ord_data}')
a의 코드값 : 97
cf) 변수 data를 2진수로 표현하려면?
- 변수 data는 문자이기 때문에 'ord 함수'(내장함수)를 사용해서 2진수로 표현
print(f'{data}의 코드값 : {ord_data} : {bin(ord_data)}')
a의 코드값 : 97 : 0b1100001
cf) 'H' ==> 기계어로 표현
H에 대한 코드값(72번)으로 변경 -> 코드값(10진수)를 2진수로 변경
print(f'H 코드값 : {ord("H")}') print(f'H 코드값을 2진수로 : {bin(ord("H"))}')
H 코드값 : 72 H 코드값을 2진수로 : 0b1001000
'Hello' ==> 기계어로 표현
print('Hello 코드값 =>', end='') print( bin(ord('H')), bin(ord('e')), bin(ord('l')), bin(ord('l')), bin(ord('o')) )
Hello 코드값 =>0b1001000 0b1100101 0b1101100 0b1101100 0b1101111
• 피연산자 개수에 따라 단항, 이항, 삼항연산자
연산자(Operator) - 산술연산자
- 덧셈(+), 뺄셈(-), 곱셈(*), 나눗셈(/)
- 몫(//), 나머지(%), 제곱근(**)
int 타입의 산술연산
num1 = 7 num2 = 5 print(f'{num1} + {num2} = {num1 + num2}') print(f'{num1} - {num2} = {num1 - num2}') print(f'{num1} * {num2} = {num1 * num2}') print(f'{num1} / {num2} = {num1 / num2}') print(f'몫 {num1} // {num2} = {num1 // num2}') print(f'나머지 {num1} % {num2} = {num1 // num2}') print(f'제곱근 {num1} ** {num2} = {num1 // num2}')
7 + 5 = 12 7 - 5 = 2 7 * 5 = 35 7 / 5 = 1.4 몫 7 // 5 = 1 나머지 7 % 5 = 1 제곱근 7 ** 5 = 1
int, float 타입의 산술연산
num1 = 7. num2 = 5.2 print(f'{num1} + {num2} = {num1 + num2}') print(f'{num1} - {num2} = {num1 - num2}') print(f'{num1} * {num2} = {num1 * num2}') print(f'{num1} / {num2} = {num1 / num2}') print(f'몫 {num1} // {num2} = {num1 // num2}') print(f'나머지 {num1} % {num2} = {num1 // num2}') print(f'제곱근 {num1} ** {num2} = {num1 // num2}')
7.0 + 5.2 = 12.2 7.0 - 5.2 = 1.7999999999999998 7.0 * 5.2 = 36.4 7.0 / 5.2 = 1.346153846153846 몫 7.0 // 5.2 = 1.0 나머지 7.0 % 5.2 = 1.0 제곱근 7.0 ** 5.2 = 1.0
str 타입의 산술연산
- 덧셈과 곱셈 연산 가능
num1 = 'a' num2 = 'b' print(f'덧셈 - 문자열 연결 : {num1} + {num2} = {num1 + num2}') print(f'곱셈 - 문자열 정수 n만큼 반복 : {num1} * {3} = {num1 * 3}') # print(f'미지원 {num1} - {num2} = {num1 - num2}') # print(f'미지원 {num1} / {num2} = {num1 / num2}') # print(f'미지원 몫 {num1} // {num2} = {num1 // num2}') # print(f'미지원 나머지 {num1} % {num2} = {num1 // num2}') # print(f'미지원 제곱근 {num1} ** {num2} = {num1 // num2}')
덧셈 - 문자열 연결 : a + b = ab 곱셈 - 문자열 정수 n만큼 반복 : a * 3 = aaa
- 실습
print("Happy" + "New" + "Year" + "2025") print("Happy" * 5)
HappyNewYear2025 HappyHappyHappyHappyHappy
bool 타입의 산술연산
num1 = False num2 = True print(f'{num1} + {num2} = {num1 + num2}') print(f'{num1} - {num2} = {num1 - num2}') print(f'{num1} * {num2} = {num1 * num2}') print(f'{num1} / {num2} = {num1 / num2}') print(f'몫 {num1} // {num2} = {num1 // num2}') print(f'나머지 {num1} % {num2} = {num1 // num2}') print(f'제곱근 {num1} ** {num2} = {num1 // num2}')
False + True = 1 False - True = -1 False * True = 0 False / True = 0.0 몫 False // True = 0 나머지 False % True = 0 제곱근 False ** True = 0
연산자(Operator) - 비교연산자
- 왼쪽 > 오른쪽 : 크다
- 왼쪽 < 오른쪽 : 작다
- 왼쪽 >= 오른쪽 : 크거나 같다
- 왼쪽 <= 오른쪽 : 작거나 같다
- 왼쪽 == 오른쪽 : 같다
- 왼쪽 != 오른쪽 : 같지 않다
int, float 타입의 비교연산
num1 = 7 num2 = 5 print(f'{num1} > {num2} = {num1 > num2}') print(f'{num1} < {num2} = {num1 < num2}') print(f'{num1} >= {num2} = {num1 >= num2}') print(f'{num1} <= {num2} = {num1 <= num2}') print(f'{num1} == {num2} = {num1 == num2}') print(f'{num1} != {num2} = {num1 != num2}')
7 > 5 = True 7 < 5 = False 7 >= 5 = True 7 <= 5 = False 7 == 5 = False 7 != 5 = True
str 타입의 비교연산
문자의 코드값으로 비교연산 실행
문자 1개일 때 경우,
num1 = 'a' # ord('a') => 97 num2 = 'A' # ord('A') => 65 print(f'{num1} > {num2} = {num1 > num2}') print(f'{num1} < {num2} = {num1 < num2}') print(f'{num1} >= {num2} = {num1 >= num2}') print(f'{num1} <= {num2} = {num1 <= num2}') print(f'{num1} == {num2} = {num1 == num2}') print(f'{num1} != {num2} = {num1 != num2}')
a > A = True a < A = False a >= A = True a <= A = False a == A = False a != A = True
문자 2개 이상일 때 경우,
num1 = 'AB' # ord('a') => 97 ord('B') => 66 num2 = 'AD' # ord('A') => 65 ord('D') => 68 print(f'{num1} > {num2} = {num1 > num2}') print(f'{num1} < {num2} = {num1 < num2}') print(f'{num1} >= {num2} = {num1 >= num2}') print(f'{num1} <= {num2} = {num1 <= num2}') print(f'{num1} == {num2} = {num1 == num2}') print(f'{num1} != {num2} = {num1 != num2}')
AB > AD = False AB < AD = True AB >= AD = False AB <= AD = True AB == AD = False AB != AD = True
bool 타입의 비교연산
문자의 코드값으로 비교연산 실행
num1 = True # 1 num2 = False # 0 print(f'{num1} > {num2} = {num1 > num2}') print(f'{num1} < {num2} = {num1 < num2}') print(f'{num1} >= {num2} = {num1 >= num2}') print(f'{num1} <= {num2} = {num1 <= num2}') print(f'{num1} == {num2} = {num1 == num2}') print(f'{num1} != {num2} = {num1 != num2}')
True > False = True True < False = False True >= False = True True <= False = False True == False = False True != False = True
연산자(Operator) - 논리리연산자
왼쪽 and 오른쪽 : 그리고
- True and True => True
- True and False => False
- False and True => False
- False and False => False
왼쪽 or 오른쪽 : 또는
- True or True => True
- True or False => True
- False or True => True
- False or False => False
- not 오른쪽 : 오른쪽 반대 / 토글(Toggle)
- not True => False
- not False => True
20대 남자인 경우 => 나이와 성별 모두 맞아야 함
gender = '남자' age = 20
20대 나이 체크
print(f'{age}는? { age >= 20 and age < 30}')
20는? True
20대 나이와 성별 체크
print(f'{age}, {gender}는? { (age >= 20 and age < 30) and gender == "남자" }') print(f'{age}, {gender}는? { age >= 20 and age < 30 and gender == "남자" }')
20, 남자는? True 20, 남자는? True
20대 이상인 사람들
gender = '남자' age = 39 print('20대', age >= 20 and age < 30 ) print('20대 이상', age >= 20) print('30대 이상 또는 여자', age >= 30 or gender == '여자')
20대 False 20대 이상 True 30대 이상 또는 여자 True
not 연산자 : 현재 결과를 반대로
age = 19 print(f' {age} >= 20 : {age >= 20}') print(f'not {age} >= 20 : {not age >= 20}')
19 >= 20 : False not 19 >= 20 : True
print(f' 1 : {1}') print(f'not 1 : {not 1}') print(f'not 0 : {not 0}')
1 : 1 not 1 : False not 0 : True
-> not True/ False
-> int/float => 0 또는 0. : False, 나머지 숫자 : True
print(f'not 1 : {not 1}') # 숫자 1은 True라서 not을 하면 False print(f'not 0 : {not 0}') # 숫자 0은 False라서 not을 하면 True print(f'not -1 : {not -1}') # 0이 아닌 숫자는 전부 True print(f'not 9 : {not 9}') print(f'not 9.0 : {not 9.0}')
not 1 : False not 0 : True not -1 : False not 9 : False not 9.0 : False
연산자(Operator) - 논리리연산자
- and 연산자 : 모든 조건의 결과가 True인 경우만 True
- or 연산자 : 모든 조건의 결과가 False인 경우만 False
- not 연산자 : 현재 결과의 반대로 변환
[문1] 입력받은 데이터가 1 또는 2인 경우 체크
data = input("숫자 입력: ") print(f"입력 결과 : {data == '1' or data == '2'}")
숫자 입력: 1 입력 결과 : True
[문2] 대문자만 입력 받도록 체크 'A' ~ 'Z'
data = input("문자 1개 입력 : ") print(f'{data}는? {data >= "A" and data <= "Z"}')
문자 1개 입력 : r r는? False
[문3] 임의의 숫자가 3의 배수 또는 5의 배수 여부 체크
- 배수 : 나눗셈의 나머지가 0인 경우
data = 21 print(f'3의 배수들의 나머지 값 : ', 21%3, 3%3, 9%3, 27%3, 33%3 ) print(f'5의 배수들의 나머지 값 : ', 15%5, 55%5, 5%5, 105%5, 50%5 ) print(f'{data}는 3의 배수 ? { not data%3 }') print(f'{data}는 5의 배수 ? { not data%5 }') print(f'{data}는 5의 배수 ? { not data%3 or not data%5 }')
3의 배수들의 나머지 값 : 0 0 0 0 0 5의 배수들의 나머지 값 : 0 0 0 0 0 21는 3의 배수 ? True 21는 5의 배수 ? False 21는 5의 배수 ? True
[문4] 30대 여성 여부 체크
- 30대 : age >= 30 and age < 40
- 여성 : gender == '여'
gender = '여' age = 25 print(f'{gender}, {age}는 30대 여성? {(age >= 30 and age < 40) and (gender=="여")}')
여, 25는 30대 여성? False
• 동일 객체 여부 결과 True, False 반환
• is -> 동일 객체면 True
• is not -> 동일 객체 아니면 True
객체비교연산자
- 객체(object) : 메모리 힙 영역에 존재하는 데이터
- is 연산자 : A is B A, B와 같은 객체면 True
- is not 연산자 : A is not B A, B와 같은 객체 아니면 True
a = 10 b = 10. c = a d = 8 print(f'{a}의 타입 : {type(a)}') print(f'{b}의 타입 : {type(b)}') print(f'{c}의 타입 : {type(c)}') print(f'{a}의 저장 주소 : {id(a)}') print(f'{b}의 저장 주소 : {id(b)}') print(f'{c}의 저장 주소 : {id(c)}')
10의 타입 : <class 'int'> 10.0의 타입 : <class 'float'> 10의 타입 : <class 'int'> 10의 저장 주소 : 2640828066384 10.0의 저장 주소 : 2640828717232 10의 저장 주소 : 2640828066384
데이터/값 비교하기 : == 연산자 데이터/값 비교
숫자가 같으면 힙은 똑같음 -> 값만 봄
print(f'{a} == {b} : {a == b}') print(f'{a} == {c} : {a == c}')
10 == 10.0 : True 10 == 10 : True
객체 비교하기 : is 연산자 메모리 상의 객체 비교 # 숫자가 같으면 스택은 다름 -> 실제 메모리 상에서 같은 객체인지 비교하는 연산자!
print(f'{a} is {b} : {a is b}') print(f'{a} is {c} : {a is c}') print(f'{a} is {d} : {a is d}')
10 is 10.0 : False 10 is 10 : True 10 is 8 : False
내장 함수
• int( 숫자 ) : 정수 반환
• int( “문자열” ): 정수 반환, 단 숫자형태 문자열만("10") 가능
• abs(a) : a의 절대값 반환
• pow(a, b) : a^b(거듭제곱) 반환
• max(a, b) : a, b 중 큰 값 반환
• min(a, b) : a, b 중 작은 값 반환
• round(a) : a를 반올림 한 값 반환
• int(x)
• float(x)
• oct(x)
• hex(x)
• str(x)