12/28 Python 3일차

빨강·2023년 12월 28일
0

기록 - Python

목록 보기
5/14
post-thumbnail

12/28

  • 09:00 숙제 확인
    • number = 01012345678 은 불가능
      • 0으로 시작하는 int열 같은 경우는 인식이 안되기 때문에 보기 좋게 하게 위하여 포맷을 지정해주는 방법이 있음. 지정하지 않으면 1.jpg, 10.jpg 같은 식으로만 인식가능 01.jpg 불가
      • .jpg’를 제외하고 앞의 int만 다루는 경우를 이야기하는 것, 연산 하지 않는다는 전제가 있기 때문에 가능함
    • 구간 지정한 블럭 실행도 가능 shift+alt+E(맥 동일)
    • 한 줄 실행 shift+enter 지정 가능(기존 거 지우고 덮어쓰기, 주피터에서 사용하는 키기 때문에 동일하게 쓰면 편해서 하는 것)


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}')


  • 13:00
    • is의 경고가 안 나타나게 설정하는 법(교육생 질문)

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}')


  • 14:00 ex_str.py
    # -------------------------------------------------------------------
    # 문자/문자열 데이터 살펴보기 => 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[:]}') # 모두가 음수일 이유는 없음


  • 15:00

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'))
  • 사람의 언어를 기계로 바꿔주는 인코딩, 인코딩 후 나온 기계어(=코드값)을 알려주는 함수 ord <=> chr


  • 16:00 ex_str_op.py
    # -------------------------------------------------------------
    #  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"}')


  • 17:00 ex_str_escape.py
    # -------------------------------------------------------------
    # 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인지를 우선 판단



  • 질문

    • #값 비교에 is를 쓰지 않기 부분 프롬프트에서는 False인데 파일에서는 True임
      • 프롬프트에서 갱신이 늦어서? 메모리에 기록이 새롭게 기록되지 않아서?라고 함
    • print(f' "Hb" == "Ia" => {"Hb" == "Ia"}') #False나옴
    • print(ord("H"), ord("b"), ord("I"), ord("a"))
      코드값 기준이라고 했는데 어떻게 비교가 되는지?
      - 코드값 자체로 비교하는 것이 아니라 인덱스 내에 있는 요소(의 코드값)으로 비교하는것
      - Hb와 Ia를 비교하는 경우 H와 I의 코드값 비교, 만약 H와 H로 같다면 다음 순서의 b와 a를 비교하는 식


후기

어제 오늘 5시간 잤더니 겁나 피곤하다..

근데 재밌고만

profile
갈림길인 줄 알았는데 알고보니 직진

0개의 댓글