Python_파이썬 문법 뽀개기

김수경·2024년 1월 4일

파이썬

목록 보기
1/9

변수 선언

a = 3   #a에 3을 넣는다
print(a) 
b = a  #a에 들어있는 값인 3을 b에 넣는다
print(b)
a = 5 #a에 5라는 새로운 값을 넣는다 
print(a, b) #5 3 

숫자형 자료형(몫 //, 나머지 %, 거듭제곱 **)

a = 5
b = 3

a+b   #8
a-b   #2
a*b   #15
a/b   #1.6666
a%b   #2(나머지를 구함, 홀짝구할때 많이 쓰임)

-- 변수에 저장된 값에 연산을 한 수 다시 그 값을 같은 변수에 저장할 수 있음
a = 5
a = a + 3
print(a)  #8

a += 3    #줄여서 쓸 수 있다. 같은 의미 ! 

-- 나눗셈의 나머지
a//b   #1 (몫)
a%b   #2(나머지)
a**b  #125(거듭제곱)

Bool 자료형 True, False

x = True
y = False

#소문자인 경우 자료형이라 인식하지 못하고 변수명이라 인식하니 주의하기!

4 > 2      # True  크다
5 < 1      # False 작다
6 >= 5     # True  크거나 같다
4 <= 4     # True  작거나 같다
3 == 5     # False 같다
4 != 7     # True  같지 않다

-- 논리연산자를 사용할 수 있다
a = 4 > 2 #True
not a     #False(not연산자로 참은 거짓, 거짓은 참으로 바꿔줌)
a and b   #False(and연산자로 모두 참이어야 참)

숫자연산 퀴즈

-- 	Q. 숫자들의 평균 구하기
a = 24
b = 16
c = 26

print((a+b+c)/3)

문자열

-- 작은 따옴표와 큰 따옴표는 같다!
# 작은 따옴표 또는 큰 따옴표. 둘 다 같아요!
a = "aa"
b = 'aa'

-- 따옴표를 안쓰면 변수명으로 인식하기 때문에 꼭 구분해서 쓰기!
a = 1
b = "a"
c = a
print(a, b, c)

문자열 연산

-- 문자열간 더하기는 두 문자열을 이어붙인 문자열로 반환한다!
first_name = "Harry"
last_name = "Potter"
print(first_name + last_name)  # HarryPotter

-- 문자와 정수를 더하면 에러!
a = "3"
a + 5   # 에러

-- 문자열 길이는 len
print(len(first_name + last_name))  # 11
print(len("Hello, Sparta!"))  # 14

대소문자 upper, lower

sentence = 'Metod'
print(sentence.upper())  #METHOD
print(sentence.lower())  #method

특정 문자를 나누기, 바꾸기 split, replace

-- 이메일 주소에서 도메인 'gmail'만 추출하기
myemail = 'test@gmail.com'
rr = myemail.split('@')
rr[1]
rr2 = rr[1].split('.')
print(rr2[0])

-- 특정 문자를 다른 문자로 바꾸기
text = '용인시-기흥구'
print(text.replace('-','>'))

인덱싱과 슬라이싱 [:]

f="abcdefghijklmnopqrstuvwxyz"

print(f[1]) #1번 자리 문자

print(f[4:15])   # efghijklmno  f[4]부터 f[15] 전까지, 총 15-4=11개!

f[8:]    # ijklmnopqrstuvwxyz    f[8]부터 끝까지, 앞의 8개 빼고!
f[:7]    # abcdefg               시작부터 f[7] 전까지, 앞의 7개!
f[:]     # abcdefghijklmnopqrstuvwxyz  처음부터 끝까지

리스트

-- 리스트 1. 순서가 있는 다른 자료형들의 모임
a = [1, 5, 2]
b = [3, "a", 6, 1]
c = []
d = list()
e = [1, 2, 4, [2, 3, 4]]

--리스트의 길이
a = [1, 5, 2]
print(len(a))   # 3

b = [1, 3, [2, 0], 1]
print(len(b))   # 4

-- 문자열처럼 인덱싱과 슬라이싱 가능
a = [1, 3, 2, 4]
print(a[3])  # 4
print(a[1:3]) # [3, 2]
print(a[-1]) # 4 (맨 마지막 것)

-- 리스트 요소가 여러개일때
a = [1, 2, [2, 3], 0]
print(a[2])      # [2, 3]
print(a[2][0])   # 2

a = [1, 2, 3]
a.append(5)
print(a)     # [1, 2, 3, 5]

a.append([1, 2])
print(a)     # [1, 2, 3, 5, [1, 2]]


# 더하기 연산과 비교!
a += [2, 7]
print(a)     # [1, 2, 3, 5, [1, 2], 2, 7]

-- 리스트 정렬하기
a = [2, 5, 3]
a.sort()
print(a)   # [2, 3, 5]
a.sort(reverse=True)
print(a)   # [5, 3, 2]

-- 요소가 리스트 안에 있는지 알아보기
a = [2, 1, 4, "2", 6]
print(1 in a)      # True
print("1" in a)    # False
print(0 not in a)  # True

딕셔너리

-- 딕셔너리는 키와 밸류로 이루어져있음
person = {"name":"Bob", "age": 21}
print(person["name"])  #'Bob'

-- 딕셔너리 만들기
a = {"one":1, "two":2}

# 빈 딕셔너리 만들기
a = {}
a = dict()

-- 딕셔너리는 순서가 없기 때문에 인덱싱 불가!
person = {"name":"Bob", "age": 21}
print(person[0])   # 0이라는 key가 없으므로 KeyError 발생!

-- 딕셔너리 값 업데이트, 추가하기
person = {"name":"Bob", "age": 21}

person["name"] = "Robert"
print(person)  # {'name': 'Robert', 'age': 21}

person["height"] = 174.8
print(person)  # {'name': 'Robert', 'age': 21, 'height': 174.8}

-- 딕셔너리의 밸류는 아무 형태의 데이터 가능, 다른 딕셔너리도 삽가능
person = {"name":"Alice", "age": 16, "scores": {"math": 81, "science": 92, "Korean": 84}}
print(person["scores"])             # {'math': 81, 'science': 92, 'Korean': 84}
print(person["scores"]["science"])  # 92

-- 딕셔너리 안에 해당 키가 존재하는지 알고 싶을때는 in
person = {"name":"Bob", "age": 21}

print("name" in person)       # True
print("email" in person)      # False
print("phone" not in person)  # True

리스트와 딕셔너리 조합

-- 딕셔너리는 리스트와 함께 쓰여 자료를 정리할 때 쓰인다
people = [{'name': 'bob', 'age': 20}, {'name': 'carry', 'age': 38}]

# people[0]['name']의 값은? 'bob'
# people[1]['name']의 값은? 'carry'

person = {'name': 'john', 'age': 7}
people.append(person)

# people의 값은? [{'name':'bob','age':20}, {'name':'carry','age':38}, {'name':'john','age':7}]
# people[2]['name']의 값은? 'john'

-- smith의 science 점수를 출력해보세요
people = [
    {'name': 'bob', 'age': 20, 'score':{'math':90,'science':70}},
    {'name': 'carry', 'age': 38, 'score':{'math':40,'science':72}},
    {'name': 'smith', 'age': 28, 'score':{'math':80,'science':90}},
    {'name': 'john', 'age': 34, 'score':{'math':75,'science':100}}
]

print(people[2]['score']['science'])

조건문 if

-- 조건문은 조건을 만족했을 때 특정 코드를 실행한다.
-- 들여쓰기 매우 중요!!!!
age = 27
if age < 20:
    print("청소년입니다.")
elif age < 65:
    print("성인입니다.")
else:
    print("무료로 이용하세요!")
# 성인입니다.

반복문 for in, enumerate, break

-- for문 기본구문
fruits = ['사과', '배', '감', '귤']

for fruit in fruits:
    print(fruit)
    
-- 이 리스트에서 나이가 20보다 큰 사람만 출력
people = [
    {'name': 'bob', 'age': 20},
    {'name': 'carry', 'age': 38},
    {'name': 'john', 'age': 7},
    {'name': 'smith', 'age': 17},
    {'name': 'ben', 'age': 27},
    {'name': 'bobby', 'age': 57},
    {'name': 'red', 'age': 32},
    {'name': 'queen', 'age': 25}
]

for person in people :
    if person['age'] > 20 :
        print(person['name'])
 
-- enumerate, break 
fruits = ['사과', '배', '감', '귤','귤','수박','참외','감자','배','홍시','참외','오렌지']

for i, fruit in enumerate(fruits):
    print(i,fruit)   #순서대로 i에 번호를 매기고 출력

for i, fruit in enumerate(fruits):
    print(i, fruit)
    if i == 4:
        break  #i=4까지 출력하고 멈춤

-- 짝수만 출력하기
num_list = [1, 2, 3, 6, 3, 2, 4, 5, 6, 2, 4]
for num in num_list :
    if num % 2 == 0 :
        print(num)
 
-- 리스트에서 짝수의 개수 출력하기
num_list = [1, 2, 3, 6, 3, 2, 4, 5, 6, 2, 4]
count = 0
for num in num_list :
   if num % 2 == 0 :
       count = count + 1
print(count)

-- 리스트 안에 있는 숫자 모두 더하기
num_list = [1, 2, 3, 6, 3, 2, 4, 5, 6, 2, 4]
sum = 0
for num in num_list :
    sum = sum + num
print(sum)

-- 리스트 안에 있는 자연수 중 가장 큰 숫자 구하기
num_list = [1, 2, 3, 6, 3, 2, 4, 5, 6, 2, 4]
max = 0
for num in num_list:
    if max < num :
        max = num
print(max)

함수 def

함수 쉬운 설명 : https://codingapple.com/unit/python-function-def-when-to-use/

-- 긴 코드를 한 단어로 축약할 때
def 인사():
    print('안녕하세요오오오 어쩌구 너무 길어서 축약하고 싶어요')

인사() 

-- 조건문에 넣을 값을 바꿔가면서 결과를 확인 
def bus_rate(age):
		if age > 65:
		    print("무료로 이용하세요")
		elif age > 20:
		    print("성인입니다.")
		else:
		    print("청소년입니다")

bus_rate(27)
bus_rate(10)
bus_rate(72)

-- 출력뿐만 아니라 결과값을 돌려주도록 만들기
def bus_fee(age):
		if age > 65:
		    return 0
		elif age > 20:
		    return 1200
		else:
		    return 0     


money = bus_fee(28)
print(money)

-- Q. 주민등록번호로 성별 출력하기 
def check_gender(pin):
    num = int(pin.split('-')[1][0])
    if num % 2 == 0 :
        print('여자')
    else :
        print('남자')

check_gender('231231-1098898')  #남자
check_gender('231231-2098898')  #여자
check_gender('231231-4098898')  #여자

튜플 tuple

-- 튜플 : 리스트와 비슷하지만 불변인 자료형 소괄호()로 씀
a = (1,2,3)
a[0] = 99  
print(a[0]) #에러 발생함 ! 
# 튜플은 딕셔너리 대신 리스트와 튜플로 딕셔너리 비슷하게 ~ 만들어 사용할 때 많이 쓰인다.
a_dict = [('bob','24'),('john','29'),('smith','30')]

집합 set

-- 중복이 제거된다! 집합 개념과 동일하다
a = [1,2,3,4,5,3,4,2,1,2,4,2,3,1,4,1,5,1]

a_set = set(a)

print(a_set)

-- a, b의 집합 관계를 따져보자!
a = ['사과','감','수박','참외','딸기']
b = ['사과','멜론','청포도','토마토','참외']

print(a & b)  # 교집합
print(a | b)  # 합집합
print(a - b)  # 차집합

f-string

scores = [
    {'name':'영수','score':70},
    {'name':'영희','score':65},
    {'name':'기찬','score':75},
    {'name':'희수','score':23},
    {'name':'서경','score':99},
    {'name':'미주','score':100},
    {'name':'병태','score':32}
]

-- 이름과 점수 출력해보기
for s in scores :
    name = s['name']
    score = string(s['score'])
    print(name, score)

-- f-string용도는 글자 합쳐주기!
for s in scores:
    name = s['name']
    score = str(s['score'])
    print(name+'는 '+score+'점 입니다')

-- 요거를 아래와 같이
for s in scores:
    name = s['name']
    score = str(s['score'])
    print(f'{name}{score}점입니다')

예외처리 try - except

-- 20살 이상의 이름만 출력해보기
people = [
    {'name': 'bob', 'age': 20},
    {'name': 'carry', 'age': 38},
    {'name': 'john', 'age': 7},
    {'name': 'smith', 'age': 17},
    {'name': 'ben', 'age': 27},
    {'name': 'bobby', 'age': 57},
    {'name': 'red', 'age': 32},
    {'name': 'queen', 'age': 25}
]

for person in people:
    if person['age'] > 20:
        print (person['name'])

-- 근데 만약 bobb가 age를 가지고 있지 않다면?
people = [
    {'name': 'bob', 'age': 20},
    {'name': 'carry', 'age': 38},
    {'name': 'john', 'age': 7},
    {'name': 'smith', 'age': 17},
    {'name': 'ben', 'age': 27},
    {'name': 'bobby'},
    {'name': 'red', 'age': 32},
    {'name': 'queen', 'age': 25}
]

for person in people :
    if person['age'] > 20:
        print(person['name'])

-- carry, ben까지만 출력되고 에러가 발생함! 이를 방지하기 위해 try except를 사용

people = [
    {'name': 'bob', 'age': 20},
    {'name': 'carry', 'age': 38},
    {'name': 'john', 'age': 7},
    {'name': 'smith', 'age': 17},
    {'name': 'ben', 'age': 27},
    {'name': 'bobby'},
    {'name': 'red', 'age': 32},
    {'name': 'queen', 'age': 25}
]

for person in people :
    try :
        if person['age'] > 20:
            print(person['name'])
    except :
         print('에러입니다')

파일 불러오기

파일을 main_test.py, main_func.py로 분리한 상태

-- main_func에 있는 함수를 main_test 파일에 불러옴

def say_hi():
	print('안녕!')  #main_func에 작성한 함수
   
from main_func import *
say_hi()

한줄에 적기 if, for 문

num = 3

if num%2 == 0:
    result = "짝수"
else:
    result = "홀수"

print(f"{num}{result}입니다.")

-- 위 구문을 아래와 같이 줄여 쓸 수 있다

num = 3

result = "짝수" if num%2 == 0 else "홀수"

print(f"{num}{result}입니다.")

//

a_list  = [1, 3, 2, 5, 1, 2]

b_list = []
for a in a_list:
    b_list.append(a*2)

print(b_list)

--- 역시 한줄로 정리하면,
a_list  = [1, 3, 2, 5, 1, 2]

b_list = []
for a in a_list:
    b_list.append(a*2)

print(b_list)

심화-서치용

map

people = [
    {'name': 'bob', 'age': 20},
    {'name': 'carry', 'age': 38},
    {'name': 'john', 'age': 7},
    {'name': 'smith', 'age': 17},
    {'name': 'ben', 'age': 27},
    {'name': 'bobby', 'age': 57},
    {'name': 'red', 'age': 32},
    {'name': 'queen', 'age': 25}
]

-- 1차조작
def check_adult(person):
    if person['age'] > 20:
        return '성인'
    else:
        return '청소년'

result = map(check_adult, people)
print(list(result))

--2차조작
def check_adult(person):
    return '성인' if person['age'] > 20 else '청소년'

result = map(check_adult, people)
print(list(result))

--3차조작
result = map(lambda x: ('성인' if x['age'] > 20 else '청소년'), people)
print(list(result))

filter - 리스트의 모든 원소 중 특별한 것만 뽑기

map과 아주 유사한데, True인 것들만 뽑기! (map보다 훨씬 쉬워요!)

result = filter(lambda x: x['age'] > 20, people)
print(list(result))

함수 매개변수

이 내용들은 직접 쓰는 것보단 알고 있으면 내장함수 등을 사용할 때 도큐먼트를 읽는 데 도움이 됩니다!

  • 함수에 인수를 넣을 때, 어떤 매개변수에 어떤 값을 넣을지 정해줄 수 있어요. 순서 상관 없음!
def cal(a, b):
    return a + 2 * b

print(cal(3, 5))
print(cal(5, 3))
print(cal(a=3, b=5))
print(cal(b=5, a=3))
  • 특정 매개변수에 디폴트 값을 지정해줄 수 있어요.
def cal2(a, b=3):
    return a + 2 * b

print(cal2(4))
print(cal2(4, 2))
print(cal2(a=6))
print(cal2(a=1, b=7))
  • 입력값의 개수를 지정하지 않고 모두 받는 방법!
    이렇게 여러 개의 인수를 하나의 매개변수로 받을 때 관례적으로 args라는 이름을 사용합니다. arguments라는 뜻이에요!
def call_names(*args):
    for name in args:
        print(f'{name}야 밥먹어라~')

call_names('철수','영수','희재')
  • 키워드 인수를 여러 개 받는 방법!
def get_kwargs(**kwargs):
    print(kwargs)

get_kwargs(name='bob')
get_kwargs(name='john', age='27')

클래스

클래스의 사용방법? 각 객체 값을 따로따로 부텨할 때(?) -> 나중에 좀 더 심화 공부가 필요할 듯 하다

class Monster():
    hp = 100
    alive = True

    def damage(self, attack):
        self.hp = self.hp - attack
        if self.hp < 0:
            self.alive = False

    def status_check(self):
        if self.alive:
            print('살아있다')
        else:
            print('죽었다')

m = Monster()
m.damage(120)

m2 = Monster()
m2.damage(90)

m.status_check()
m2.status_check()
profile
잘 하고 있는겨?

0개의 댓글