Python

김기훈·2025년 9월 4일

Python

목록 보기
1/8
post-thumbnail

사칙연산

이름공식예시
나누기5/22.5
5//22
나머지5%21
거듭제곱5**225
몫,나머지divmod(10, 3)(3, 1)

index

index(찾을값,[시작,] 선택)
scores2 = [100,95,80,100,60]
print("100:" scores2.index(100,1)) # 100의 위치 찾기 인덱스 기준 1부터 
# 100이 첫번째 자리에 있기 때문에 첫 자리는 제외하고 찾기

인덱싱 / 슬라이싱

word = "Python"
print(word[3]) # h
print(word[5]) # n

text = "Python"
print(text[0:3]) # Pyt
print(text[2:6]) # thon
print(text[::]) # Python 전체출력 
print(text[::-1]) # nohtyP 반대로 출력

숫자 = "123456789"
print(숫자[::2]) # 13579 첫번째 인덱스 기준으로 2칸씩 띄어쓰기 출력하기 
print(숫자[4:1:-1]) # 543 
print(숫자[4:]) # 56789 4부터 쭉
숫자.count("7") # 1 숫자라는 변수에서 7의 개수 카운트
(123456789.count("7") 도 가능)
숫자.index("7") # 6 숫자라는 변수에서 7의 위치
(123456789.index("7") 도 가능)

자료형종류

"python" == "Python" # False = 대소문자 중요 
"Python" == "Python" # True

3.0 == 3 # True 값만 비교

논리 연산자

# True : 1 / False : 0
-------------------------------------------------------------
True and True # 1 * 1 = 1 = True
True and False # 1 * 0 = 0 = False  두개의 값이 다르면 False 출력
False and True # 0 * 1 = 0 = False
False and False # 0 * 0 = 0 = False
-------------------------------------------------------------
True or True # 1 + 1 = 1 =True 
True or False # 1 + 0 = 1 =True
False or True # 0 + 1 = 1 =True
False or False # 0 + 0 = 0 =False
-------------------------------------------------------------
not True # =False True 의 반대 출력
not False # =True False의 반대 출력
-------------------------------------------------------------
10 == 12 or 6 != 2 # True (0 +1 = 1)
2 > 5 and 7 == 7 # False (0*1 = 0)
not 14 <= 15 # False (True -> False)
not 7 is 7.0 # True (False -> True)
-------------------------------------------------------------
bool("힘들어요 여러분") # True 문자열을 bool에서 True를 출력
------------------------------------------------------------------------
print(False and "힘들어요") # 0 * 문자열:True :1 = 0 
and*기 때문에 앞에 0이 나오면 뒤에 뭐가 나와도 False이기 때문에 앞만 봐서 False 출력
------------------------------------------------------------------------
print(True or '힘들어요') # 1 + 문자열:True :1 = 1 (True) 
or+이기 때문에 앞에 1이 나왔으면 뒤에 0이든 1이든 True 가 출력되서 앞만 봐서 True 출력
------------------------------------------------------------------------
print(True and '힘들어요') # 1 * 문자열:True :1 = "힘들어요(문자열)"
# and는 *인데 앞에 1이 나왔기 때문에 뒤에 0,1이 나올 수 있어서 뒤에 있는 값까지 보게 되는데 그래서 문자열 출력

입력과 출력

번호1, 번호2, 번호3, 번호4 = map(int, input().split(","))
# split(",") = ,을 기준으로 input을 4개 적을 수 있음(위의 예시 기준)
# map(int, input().split(",")) = 여러개의 input값을 정수형으로 변경
print(번호1, 번호2, 번호3, 번호4)

print("a", "b", "c", "d", sep='/') # a/b/c/d 
print("a", "b", "c", "d", sep =':') # a:b:c:d
print("a", "b", "c", "d", sep = '  ') # a b c d
print("a", "b", "c", "d", sep ='\n') # 한줄 띄기 

print("a", "b", "c", "d", end='/') 
print("a", "b", "c", "d", end='/')  # a b c d/a b c d/

print("a", "b", "c", "d", end=' ')
print("a", "b", "c", "d", end=' ')  # a b c d a b c d 

리스트

숫자 = [1, 2, 3, 4, 5, 6]
숫자.append(7) # [1, 2, 3, 4, 5, 6, 7]
숫자.extend([8,9,10]) # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
숫자.insert(공간번호(index),) # 공간번호의 위치에 원하는 값 넣기
리스트.index(찾을값) # 리스트안에 찾을값의 인덱스 위치를 출력함
----------------------------------------------------------------
숫자 = [1, 2, 3, 4, 5, 6]
숫자[1:3]  # [2,3]  # 변수에 있는 리스트의 인덱스 1번부터 2번까지의 값을 출력해
숫자[-1] # 6 # 숫자 변수의 마지막 위치에 있는 값 출력
숫자[-2] # 5 # 뒤에서 두번째 값 출력
숫자[::-1] # [6, 5, 4, 3, 2, 1] # 반대로 출력

숫자[4] = 9  -> 	3번째 리스트 요소를 변경 5 -> 9 = [1,2,3,4,9,6]

nums = [10, 20, 35, 7, 50, 25]		max(nums) # 50
----------------------------------------------------------------
이차원 = [[2,0],[3,0]]
이차원[0] # [2,0] 
이차원[1] # [3,1]
이차원[1][0] # 3
이차원.append([4,1]) # [2,0],[3,0],[4,1]
----------------------------------------------------------------
짝수 = list(range(2,12,2)) # 1부터 10 사이의 짝수 리스트 생성
----------------------------------------------------------------
숫자 = ["일","이","삼"]        숫자놀이="".join(숫자) # ""을 기준으로 합침
# join은 문자열만 합치는게 가능
----------------------------------------------------------------
all=[] 
a=list(range(1,5)) # 1,2,3,4 
all.append(a) # [[1,2,3,4]]

li=[[1,2,3],[4,5,6],[7,8,9]] 
len(li) # 3 
li[0] # [1,2,3]

a=list(map(int,input().split())) # 입력:1 2 3  # 출력:[1,2,3]

리스트.메서드()

li = [3, 1, 4, 1, 5]

li.append(9)        # [3, 1, 4, 1, 5, 9]
li.extend([2, 6])   # [3, 1, 4, 1, 5, 9, 2, 6]
# insert(i, x) → 특정 위치에 원소 삽입
li.insert(2, 7)     # [3, 1, 7, 4, 1, 5, 9, 2, 6] index값 2에 7추가

# remove(x) → 값이 같은 첫 번째 원소 제거
li.remove(1)        # [3, 7, 4, 1, 5, 9, 2, 6] (첫 번째 1 제거)

# 마지막 요소를 꺼내면서 제거   x = li.pop() # print(x) = 6
li.pop()            # [3, 7, 4, 1, 5, 9, 2] # 마지막 요소 6 제거
li.pop(2)			# [3, 7, 1, 5, 9, 2, 6] # 2번째 요소 제서

li.index(9)         # [3, 1, 4, 1, 5, 9] 기준 5 
li.count(1)         # 1 의 개수

li.sort()           # [1, 2, 3, 4, 5, 7, 9] 오름차순 
li.sort(reverse=True) # [9, 7, 5, 4, 3, 2, 1] 역순
li.reverse()        # [9, 7, 5, 4, 3, 2, 1] 역순
li.clear()			# []
li_t=li.copy()		# [3, 1, 4, 1, 5]

튜플 ()

  • 튜플은 ()를 사용하지만 ()를 없이 선언해도 된다.
    • 값의 변경 삭제 삽입 불가 (새로운 값 추가 불가)
    • 길이 구하기 가능
숫자 = (1,2,3,4,5) = 1,2,3,4,5

숫자_일 = (1,) # 한개의 값만 들어있을경우 , 필수
숫자_일 = (1) # ,를 넣지 않을경우 정수취급

print(숫자 * 2) # (1,2,3,4,5,1,2,3,4,5)
print(숫자 * 숫자) # (1,2,3,4,5,1,2,3,4,5)
print(숫자.index(3)) # 2 인덱스 기준 3의 위치
print(숫자.count(1)) # 1 튜플내에 1이 몇개 
print(숫자[1]) # 2
print(숫자[1:3]) # (2,3)
숫자[2] = 5 # 3번째 튜플값을 5로 변경 = 실행불가
-----------------------------------------
def oz_tuple():
    return (1, 2) # 튜플을 이용하여 여러개의 값을 리턴 가능

x, y = oz_tuple()

print("x:", x) # x : 1
print("y:", y) # y : 2
--------------------------------------------------
a, b = 7, 3
x, y = divmod(a, b) # divmode() 사용 시 튜플 형태로 몫과 나머지를 반환
print("몫:", x) # 2
print("나머지:", y) # 1
#튜플을 이용한 내부함수들
#enumerate()의 i, fruit는 (i, fruit)이나 괄호를 생략한 상태입니다.
                                    출력;        0 1
for i, fruit in enumerate([1,2,3]):             1 2
    print(i, fruit)                             2 3

튜플.메서드()

t = (10, 20, 30, 20, 40)

t.count(20)    # 20의 개수
t.index(30)    # 30 이 있는 인덱스 위치

딕셔너리 {}

  • {key1:value1, key2:value2}
#zip() : 병렬처리를 도와줍니다. 배열의 개수를 잘 확인하여야 한다.
# 배열의 개수가 맞지 않으면 적은 수의 배열을 기준으로 잘라버리기 때문
딕셔너리 = dict(zip(["힘", "지능", "체력", "민첩"], [10,20,30,40])) 
# {'힘': 10, '지능': 20, '체력': 30, '민첩': 40}

딕셔너리[새로운키] =# 새로운키:값 을 추가
딕셔너리.update({"key:value","key1:value1"}) # 여러개 추가

딕셔너리 = {'힘': 10, '지능': 20, '체력': 30, '민첩': 40}
print({딕셔너리["힘']}) # 10
print("힘" in 딕셔너리) # True
print(딕셔너리.keys()) # dict_keys(['힘', '지능', '체력', '민첩'])
print(딕셔너리.values()) # dict_values([10, 20, 30, 40])

print(딕셔너리.items()) 
# dict_items([('힘', 10), ('지능', 20), ('체력', 30), ('민첩', 40)])

리스화된_딕셔너리 = list(딕셔너리.items()) # 리스트는 인덱싱 가능
print(리스화된_딕셔너리[0])  #('힘', 10)
print(리스화된_딕셔너리[0][1]) # 10
print(리스화된_딕셔너리[0][0]) # 힘

딕셔너리["힘"] = 100 # 딕셔너리 값 변경
# {'힘': 100, '지능': 20, '체력': 30, '민첩': 40}
딕셔너리["지구력"] = 100 # 딕셔너리 값 추가
# {'힘': 100, '지능': 20, '체력': 30, '민첩': 40 '지구력': 100}
딕셔너리.update({"손재주":44, "매력":100}) # 딕셔너리 값 추가
# {'힘': 100, '지능': 20, '체력': 30, '민첩': 40, "손재주":44, "매력":100}

딕셔너리.메서드()

d = {"a": 1, "b": 2, "c": 3}

# get(key, default) → 키 값 가져오기 (없으면 default 반환)
d.get("a")           # 1
d.get("z", 99)       # 99 (기본값 반환)

d.keys()             # dict_keys(['a', 'b', 'c'])
d.values()           # dict_values([1, 2, 3])

# items() → (키, 값) 쌍 반환
d.items()            # dict_items([('a', 1), ('b', 2), ('c', 3)])

d.update({"b": 5, "d": 10})  # {'a': 1, 'b': 5, 'c': 3, 'd': 10}

d.pop("a")           # 1  (키 'a' 제거 후 값 반환)
d.popitem()          # ('d', 10) (마지막 쌍 제거)

# setdefault(key, default) → 키 없으면 (key, default) 추가
d.setdefault("e", 7) # {'b': 5, 'c': 3, 'e': 7}
d.clear()            # {}

set = {}

  • 출력시 순서에 상관없이 무작위로 출력
    • 중복을 허락하지 않음
      • 중괄호{} 사용
사과_리스트 = list("apple") # ['a', 'p', 'p', 'l', 'e']
사과_튜플 = tuple("apple") # ('a', 'p', 'p', 'l', 'e')
사과_set = set("apple") # {'p', 'a', 'e', 'l'}
----------------------------------------------------------------
# set() 자료형의 데이터 추가,삭제,변경
채소 = {"당근", "배추", "대파", "양파"}

채소.remove("잎") # 제거 할 내용이 없으면 오류발생 
# "잎"이 포함된 단어를 지우는게 아닌 "잎"만 있어야 삭제기능 가능 "깻잎"은 불가
채소.discard("깻") # 제거 할 내용이 없어도 실행은 됨 
채소.pop() 
# set에서는 랜덤으로 하나 삭제해서 반환하지만 다른 명령어에서는 끝에 있는 값을 삭제후 반환한다.

채소.add("토마토") # {'양파', '토마토', '대파', '당근'}
채소.update("깻잎") # {'양파', '대파', '깻', '잎', '당근'}
----------------------------------------------------------------
채소1 = {"당근", "양파", "오이", "배추"}
채소2 = {"양파", "오이", "대파", "가자"}

# 합집합
채소1 | 채소2 
set.union(채소1, 채소2) # {'양파', '오이', '당근', '대파', '배추', '가자'}
# 교집합
채소1 & 채소2
set.intersection(채소1, 채소2) # {'양파', '오이'}
# 차집합 
채소1 - 채소2
set.difference(채소1, 채소2) # {'당근', '배추'}

set.메서드()

s = {1, 2, 3}

s.add(4)         # {1, 2, 3, 4}
s.update([5, 6]) # {1, 2, 3, 4, 5, 6}

s.remove(3)      # {1, 2, 4, 5, 6} 제거할 숫자 없으면 에러발생
s.discard(10)    # 에러 안 남
s.pop()          # 임의의 원소 제거 후 반환
s.clear()		 # 비우기

# 집합 연산
a = {1, 2, 3}
b = {3, 4, 5}

a | b   # {1, 2, 3, 4, 5} (합집합)
a & b   # {3} (교집합)
a - b   # {1, 2} (차집합)
a ^ b   # {1, 2, 4, 5} (대칭 차집합)

if

# if 중첩문 
숫자 = 100
if 숫자 >50 # True 일경우 밑에 실행
  if 숫자 <150  
      print("정답") # 두개의 if문 모두 True 여야 출력
-----------------------------------------------     
조거문 조건(True, False)
#True
if True:
    print(True)
else:
    print(False)
    
#False
if False:
    print(True)
else:
    print(False)
------------------   
#None 
if None:
    print(True)
else:
    print(False)
------------------    
# 0 False
if 0:
    print(True)
else:
    print(False)

#1 True
if 1:
    print(True)
else:
    print(False)

#1.1 True : 
if 1.1:
    print(True)
else:
    print(False)
----------------
#'hello' 모든 문자열은 True
if 'hello':
    print(True)
else:
    print(False)

#'' 어떤 문자열에 아무런 값이 없으면 False
if '':
    print(True)
else:
    print(False)
-----------------------------------
# not
if not True: # not True = False
    print(True)
else:
    print(False)

if not '': # ''=False not False = True
    print(True)
else:
    print(False)

for

for i in range(5):        반복!! 0
    print("반복!!", i)     반복!! 1
                          반복!! 2
                          반복!! 3
                          반복!! 4

for a in range(4,10): # 4부터 9까지 출력
        print(a)        
for b in range(4,10,2): # 4,6,8 출력 가운데는 실제 출력을 원하는 값의 +1 원래는 9
        print(b)        
for c in range(10,4,-1): # 반대로 출력 10~5까지 출력
        print(c)
for i in reversed(range(10)): # 9~0까지 출력
        print(i)
-----------------------------------------------------------------------
과일 = ["두리안", "망고", "바나나", "멜론"]
for i in 과일:            
     print(i)           출력: 두리안 망고 바나나 멜론

for i in "가나다라":   
    print(i)            출력: 가 나 다 라 한글자씩 출력
    print(i, end='')    출력: 가나다라 일자로 출력

for i in reversed("가나다라"):
    print(i, end='')    출력: 가나다라 반대로 출력
-------------------------------------------------
정수 = [10, 5, 8]
부호 = [True, False, True]= 0

for k, v in zip(부호, 정수): # zip: index값을 하나로 합침 
    if k:                  # k = 부호 v = 정수+= v
    else:-= v

print(f'총 합은 {}입니다.')
-----------------------------------------------------
for i in range(100):
    print(i)
    if i == 5:
        break
------------------------
for i in range(5):
    if i % 2 == 0:
        continue
    print(i) # 1,3 출력
    

while

#1.기본적인 증가 유형                  증가 0
i = 0                             증가 1
while i < 5:                      증가 2
    print('증가',i)                증가 3
    i += 1                        증가 4

#2.기본적인 감소 유형              감소 5
i = 5                         감소 4          
while i > 0:                  감소 3
    print('감소',i)            감소 2
    i-=1                      감소 1
----------------------------------------
import random

i = 0
while i != 4:               # 4가 아닐경우까지 반복
    i = random.randint(1,6) # 1~6까지 무한 생성
    print(i)                # 4가 나올때 까지 무한 반복
--------------------------------------------------
양파 = int(input())
while 양파>10:
    print("양파", 양파, "개 남았습니다.")
    양파 -=1
    
    if 양파 ==0:
        break        # 반복문 종료  
    else:            # 조건을 만족하지 않으면 바로 else로 옴
        print("양파 다 팔렸습니다.")
--------------------------------------------------
i = 0
while True: 
    print(i)
    i+=1
    if i == 5: # 10에 도달하면 break로 멈춤 없으면 +1씩 증가 무한루프
        break
-----------------------------------------------------------
i = 0
while i < 5:
    i+=1
    if i % 2 == 0:   # 짝수가 나오면 print안되고 위로 올라가서 다시 진행
        continue     # 밑으로 가지않고 다시 위로가서 다음거 진행
    print(i)         # 1,3,5 출력 
-----------------------------------------------------------
while (1) # while True 랑 동일

try - except

                     try:
                        예외가 발생할 가능성이 있는 코드
                     except:
                        예외가 발생했을 때 실행할 코드
                     else:
                        예외가 발생하지 않았을 때 실행할 코드
                     finally:
                        무조건 실행할 코드
try: # x=3,y=5
    x, y = map(int, input("밑변과 높이를 입력해주세요").split(" "))

    # 계산결과 출력
    print(f'삼각형의 넓이는 {x*y/2}입니다.') # 15/2
except:
    print("정수로 입력하지 않아 계산이 불가합니다.")
else:
    print("계산이 정상적으로 되었습니다.") # 계산이 정상적으로 되었습니다.
finally:
    print("프로그램이 종료 되었습니다.") # 프로그램이 종료 되었습니다.

exception

  • except ValueError:
    • 에러가 발생했을 때 잡기만 하는 것
    • 에러 객체(에러에 대한 구체적인 정보)를 변수로 받지 않습니다.
    • 단순히 "ValueError가 나면 이 코드를 실행하라"는 뜻
try:
    int("abc")   # 문자열을 숫자로 변환 -> ValueError 발생
except ValueError:
    print("숫자로 바꿀 수 없습니다.")
  • except ValueError as exception:
    • 발생한 에러 객체를 exception이라는 변수에 담는다.
    • 에러 메시지를 출력하거나, 로그를 남기거나, 나중에 활용 가능
try:
    int("abc")
except ValueError as exception:
    print("에러 내용:", exception)
  • 중요한건 exception이 아니라 as 가 중요 as 뒤는 에러 객체를 담는 변수이름일 뿐

타입 힌팅

  • 타입 힌팅은 어떠한 제약 사항을 만들거나 강요되지 않는다. 즉, 잘못써도 오류발생X
    • name: str /list[str] / dict[str, int]
# 변수 타입 어노테이션
my_dog : str = "hunt"
my_dog_age : int = 7

dogs: list[str] = ["딕스훈트", "시바견", "웰시코기", "이탈리안그레이하운드"]

dogs: dict[str, int] = {
    "닥스훈트" : 7,
    "시바견" : 5,
    "웰시코기" : 6,
    "이탈리안그레이하운드" : 3,
}
-----------------------------------------------------------------
# 함수 타입 어노테이션
def hunt(name: str) -> str:
    return name[0]

def hunt_info(name: str, age: int = 7) -> str:
    return name + str(age)

def hunt_happy_time(name: str) -> None:
    print("간식줄께" + name)

def hunt_bow(message: str, times: int = 10) -> list[str]:
    return [message] * times

컴프리헨션

  • [표현식 for 변수 in 반복가능객체]
  • for 문을 간단하게 한 줄로 표현해서 리스트,집합,딕셔너리 등을 빠르게 만들 수 있는 문법
numbers = [i for i in range(5)]
print(numbers)  # [0, 1, 2, 3, 4]

# 짝수만 뽑기
evens = [i for i in range(10) if i % 2 == 0]
print(evens)
# [0, 2, 4, 6, 8]

# 중첩 for
pairs = [(x, y) for x in range(3) for y in range(2)]
print(pairs)
# [(0,0), (0,1), (1,0), (1,1), (2,0), (2,1)]

# 응용 (집합, 딕셔너리 컴프리헨션)
# 집합 (중복 제거됨)
squares = {x**2 for x in range(5)}
print(squares)
# {0, 1, 4, 9, 16}

# 딕셔너리
dic = {x: x**2 for x in range(5)}
print(dic)
# {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}

데코레이터


람다

  • lambda 매개변수 : 결과식
profile
안녕하세요.

0개의 댓글