📝 꾸준함이 무기/Python

파이썬 문법기초

Cheri 2021. 6. 1. 09:14

사전설치 : python, pycharm

파이썬은 들여쓰기로 코드를 구분한다. (JS의 ;(세미콜론)과 같은 기능이다.)

 

1. 변수 선언

# '#'을 입력하면 주석처리가 됩니다.

# 변수선언
a = 1

# 출력
print(a)

 

2. 자료형

문자형
# ""이나 ''에 문자열을 감싸주면됩니다.
a = "hello"
b = 'cheri'

a + b # hellocheri
a + 5 # error! 


#문자열의 길이 구하기
len(a) #5


#대소문자로 변환
a.upper() #HELLO
a.lower() #hello


#문자열 나누기
# 이메일 주소에서 도메인 'gmail'만 추출하기
myemail = 'test@gmail.com'

result = myemail.split('@') # ['test','gmail.com']


#특정 문자 바꾸기
txt = '서울시-마포구-망원동'
print(txt.replace('-', '>')) # '서울시>마포구>망원동'


#인덱싱, 슬라이싱
f="abcdefghijklmnopqrstuvwxyz"
f[1]   # b 파이썬은 숫자를 0부터 셉니다

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  처음부터 끝까지

 

숫자형
# 파이썬은 숫자형과 소수형이 나뉘어져있습니다.

a = 15 # 정수형
a = 1.5 # 소수형


a = 7
b = 2

a+b   # 9
5+"5" # error
a-b   # 5
a*b   # 14
a**   # 49 (거듭제곱)
a/b   # 3.5
a//b  # 3 (몫)
a%b   # 1 (나머지)
a+=b  # a = 9 (복합대입연산자) 


#문자열을 숫자로
a = "1"
int(a) #1

 

불리언 (Boolean)
x = True   # 참
y = False  # 거짓

# 소문자로 쓰면 자료형으로 인식하지 않고 변수명이라 생각해 에러가 납니다!
z = true   # name 'true' is not defined


#비교연산자
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 연산자로 모두 참이어야 참을 반환한다.
a or b     # True     OR 연산자로 둘 중 하나만 참이면 참이다.

 

리스트 (list)
#순서가 있는 자료형들의 모임!
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


#슬라이싱
a = [1, 3, 2, 4]
print(a[3])  # 4
print(a[1:3]) # [3, 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

 

딕셔너리 (dictionary)
#딕셔너리는 키(key)와 밸류(value)의 쌍으로 이루어진 자료의 모임입니다. 
person = {"name":"Bob", "age": 21}
print(person["name"])


#빈 딕셔너리 만들기
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":"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'

 

 

3. 조건문

if문
#조건에 맞는 특정 코드만 실행하게 한다.
money = 5000
if money > 3800:
    print("택시 타자!")

 

else와 elif
#조건을 만족하지 않을 때 다른 코드를 실행하고 싶을 때 쓰는 문법입니다.
money = 2000
if money > 3800:
    print("택시 타자!")
elif money > 2500:
	print("버스 타자!")
else:
    print("걸어가자...")

 

 

4. 반복문

for문
#반복 작업에 사용된다.
fruits = ['사과', '배', '감', '귤']

for fruit in fruits:
    print(fruit)
    

#enumerate
#인덱스와 함께 출력
for i, fruit in enumerate(fruits):
    print(i,fruit)
    

#break
#앞의 2개만 출력하고 싶다면?
for i, fruit in enumerate(fruits):
    print(i, fruit)
    if i == 2:
        break

 

 

5. 함수

#함수는 반복적으로 사용하는 코드들에 이름을 붙여놓은 것입니다.
def hello():
		print("안녕!")
    print("또 만나요!")


hello()


#조건문에 넣을 값을 바꿔가면서 결과를 확인할 때 쓰면 편합니다.
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)
#함수 심화
#매개변수의 기본값
def cal(a=1,b=2):
  return a+2*b
print(cal()) #5

#매개변수 하나만 기본값 설정
def cal(a,b=2):
  return a+2*b
print(cal(1)) #5


#무제한 매개변수
def say(*args):
  for arg in args:
    print(f'{arg} 밥먹어라~')

say('철수','영희')
#철수 밥먹어라~
#영희 밥먹어라~


#무제한 키워드 매개변수
def dic (**keyword):
  print(keyword)

dic(name='bob', age=27)
#{'name': 'bob', 'age': 27}
#그대로 딕셔너리 형태로 만듭니다.
#매개변수에 딕셔너리 형태로 넣으면 안됩니다! 일반 매개변수 기본값 넣듯이 값 입력하기!

 

6. 튜플, 집합

#튜플은 리스트와 비슷하지만 불변인 자료형입니다.
#따라서, 값 업데이트가 안된다.
#주로 딕셔너리와 비슷하게 만들어 사용해야 할때 많이 쓰입니다.

tuple = (1,2,3)
print(tuple[1]) #2

tuple_dict = [('bob',24), ('john',29)]
#집합(set)은 중복을 제거해준다.

numbers = [1,2,3,4,3,2,3,4,5,8,7,1]
numbers_set = set(numbers)
print(numbers_set) #{1,2,3,4,5,7,8} 


a = ['사과','감','수박','참외','딸기']
b = ['사과','멜론','청포도','토마토','참외']

set_a = set(a)
set_b = set(b)

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

 

 

7. 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 = str(s['score'])
    print(f'{name}은 {score}점입니다')

 

 

8. 예외처리

조건과 맞지 않는 데이터를 발견하면 error가 나타나는데, 

예외처리를 해주면 error가 넘겨지고 실행됩니다.

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('에러입니다')

 

 

9. 파일 불러오기

#main_func.py 작성
def say_hi():
  print('안녕!')

def say_hi_to(name):
  print(f'{name}님 안녕하세요!')
  
  
#main.py 작성
from main_func import * #main_func에 있는 전체 가져오기
#부분만 가져오려면 import 옆에 say_hi_to 처럼 적어주면 된다.

say_hi()
say_hi_to('영수')

 

 

10. 축약형

삼항연산자

(참일 때 값) if (조건) else (거짓일 때 값)

num = 3

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

print(f'{num}은 {result}입니다.')
# 3은 홀수입니다.

 

for문
#일반적인 for문
a_list  = [1, 3, 2, 5, 1, 2]
b_list = []

for a in a_list:
  b_list.append(a*2)
print(b_list)

#for문 줄여쓰기
a_list  = [1, 3, 2, 5, 1, 2]
b_list = [a*2 for a in a_list]

print(b_list)

 

 

11. map, filter, lambda식

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}
]

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

result = map(check_adult, people)
print(list(result))
#['청소년', '성인', '청소년', '청소년', '성인', '성인', '성인', '성인']


#lambda식으로 변경
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}
] 

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

 

filter - 리스트의 모든 원소 중 조건에 맞는 것만 뽑아내기
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}
]

result = filter(lambda x: x['age'] > 20, people)
print(list(result))
#[{'name': 'carry', 'age': 38}, {'name': 'ben', 'age': 27}, {'name': 'bobby', 'age': 57}, {'name': 'red', 'age': 32}, {'name': 'queen', 'age': 25}]

 

 

12. 클래스


비슷하게 생긴 인스턴스들을 만들어야할 때, 사용한다.

class Monster():
    hp = 100
    alive = True

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

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

m = Monster()
m.damage(150)
m.status_check()