3일차. AI를 위한 파이썬(3)

HA_·2025년 1월 2일
0

Chpater 05. Python 자료형(2)

수치(Number) 자료형

숫자 형태로 이루어진 자료형

숫자 표현

숫자 형태로 이루어진 자료형


cf)

숫자의 다양한 표현법

  • 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)

• 피연산자 개수에 따라 단항, 이항, 삼항연산자

산술연산자

cf)

연산자(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

비교연산자

cf)

연산자(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

논리연산자

cf)

연산자(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

cf)

객체비교연산자

  • 객체(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

내장함수

cf)

내장 함수

• 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)

0개의 댓글