#오늘 배운 것
파이썬을 설치한다는 것 = 번역팩을 설치했다.
변수 선언
새 변수를 만들 때는 변수이름 = 값의 형태를 사용.
a = 3 # 3을 a에 넣는다.
print(a)
b = a # a에 들어 있는 값인 3을 b에 넣는다.
print(b)
a = 5 # a에 5라는 새로운 값을 넣는다.
print(a, b) # 5 3
사칙연산 외의 다른 것들도 사용 가능하다.
a//b # 3 (몫)
a%b # 1 (나머지)
a**b # 49 (거듭제곱)
bool자료형
x = True # 참
y = False # 거짓
# 소문자로 쓰면 자료형으로 인식하지 않고 변수명이라 생각해 에러가 납니다~
z = true # name 'true' is not defined
True = 1 # True/False는 변수명으로 쓸 수 없어요!
문자열
JS처럼 큰 따옴표(" "), 작은 따옴표(' ')로 사용한다.
문자열 간의 더하기
문자열 + 정수는 이루어질 수 없다.
first_name = "Harry"
last_name = "Potter"
first_name + last_name # HarryPotter
first_name + " " + last_name # Harry Potter
a = "3"
b = "5"
a + b # 35
문자열의 길이는 len()함수를 써서 구한다.
print(len("Hello, Sparta!")) # 14
print(len("안녕하세요.")) # 6
※특정 자료형 뒤에 .을 붙이고 쓰는 내장 함수를 메소드라고 한다.
문자열 알파벳을 대문자/소문자로 변경
sentence = 'Python is FUN!'
sentence.upper() # PYTHON IS FUN!
sentence.lower() # python is fun!
특정 문자를 기준으로 문자열을 나누기
# 이메일 주소에서 도메인 'gmail'만 추출하기
myemail = 'test@gmail.com'
result = myemail.split('@') # ['test','gmail.com'] (뒤에 배울 '리스트'라는 자료형이에요 :))
result[0] # test (리스트의 첫번째 요소)
result[1] # gmail.com (리스트의 두 번째 요소
result2 = result[1].split('.') # ['gmail','com']
result2[0] # gmail -> 우리가 알고 싶었던 것
result2[1] # com
# 한 줄로 한 번에!
myemail.split('@')[1].split('.')[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 처음부터 끝까지
자르기 ※특정 문자열을 자르고 싶을 때는 split('문자열')을 사용한다.
myemail = 'abc@sparta.co'
domain = myemail.split('@')[1].split('.')[0]
print(domain)
리스트
순서가 있는 자료형 모임. 데이터 타입 상관없이 넣을 수 있다.
순서가 있기 때문에 문자열처럼 인덱싱과 슬라이싱을 사용할 수 있다.
a = [1, 5, 2]
b = [3, "a", 6, 1]
c = []
d = list()
e = [1, 2, 4, [2, 3, 4]]
print(e[3][1]) //리스트 안 리스트를 호출할 때
리스트의 길이 - len()을 통해 알 수 있다.
b = [1, 3, [2, 0], 1]
print(len(b)) # 4
덧붙이기(.append)
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]
정렬하기(.sort)
a = [2, 5, 3]
a.sort()
print(a) # [2, 3, 5]
a.sort(reverse=True) //내림차순으로 정렬한다.
print(a) # [5, 3, 2]
리스트 안 원하는 값이 있는지 알 수 있다.(a in b)
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}
person["name"] = "Robert"
print(person) # {'name': 'Robert', 'age': 21}
person["height"] = 174.8
print(person) # {'name': 'Robert', 'age': 21, 'height': 174.8}
딕셔너리도 안 원하는 값이 있는지 알 수 있다.(a in b)
person = {"name":"Bob", "age": 21}
print("name" in person) # True
print("email" in person) # False
print("phone" not in person) # True
조건문
js의 if문과 비슷하다. 하지만 파이썬에서는 어디까지 구문에 포함되는지를 들여쓰기로 구분하기 때문에 들여쓰기를 잘 해야한다.
if / else
다양한 조건을 판단해야할 경우 elif를 쓴다. (js의 else if)
age = 27
if age < 20:
print("청소년입니다.")
elif age < 65:
print("성인입니다.")
else:
print("무료로 이용하세요!")
반복문
fruits = ['사과', '배', '감', '귤']
for fruit in fruits:
print(fruit)
//리스트 안 요소들을 하나씩 꺼내 쓴다.
enumerate
출력되는 요소앞의 순서를 적어준다.
break
if문의 조건을 만족했을 때 실행을 멈추라는 뜻
for i, fruit in enumerate(fruits):
print(i, fruit)
if i == 4:
break
함수(def)
반복적으로 사용하는 코드들에 이름을 붙여놓은 것. 구문 변경없이 값만 변경하여 사용하기엔 편하다.
def sum(a,b):
print('더하기를 하셨네요!') //프린트를 먼저 읽고
return a+b //아래 result에 값을 준 1,2를 return값에 저장해 더한다.
result = sum(1,2)
조건문의 값을 바꿔가면서 결과를 볼 수 있다.
단순한 출력 뿐만 아니라 결과 값을 돌려주도록 함수를 만들 수도 있다.
def bus_fee(age):
if age > 65:
return 0
elif age > 20:
return 1200
else:
return 0
money = bus_fee(28)
print(money)
※문자열을 숫자열로 바꾸려면 int(" ")로 변경하면 된다.
숫자를 문자열로 바꿀대는 str( )으로 변경하면 된다.
튜플
리스트와 비슷하지만 불변인 자료형. 순서가 존재한다.변경할 수 없다.
딕셔너리 대신 리스트와 튜플로 딕셔너리 '비슷하게' 만들어 사용해야 할 때 많이 쓰인다.
a = (1,2,3)
print(a[0])

print(people[0])을하면 이름이,[1]을 하면 나이가 출력될 것이다.
집합
집합을 구현한다. 중복을 제거하기에 좋다. 교집합 / 합집합 / 차집합도 구할수가 있다.
a = ['사과','감','수박','참외','딸기']
b = ['사과','멜론','청포도','토마토','참외']
print(a & b) # 교집합
print(a | b) # 합집합
print(set_a-set_b) #차집합
f-string
기존의 문자열과 변수를 넣으려면 +기호를 사용해야하지만 f-string의 경우 문자열과 변수를 포함해도 쉽게 표현가능하다.
//기존의 점수와 이름을 출력하는 방법
for s in scores:
name = s['name']
score = str(s['score'])
print(name+'는 '+score+'점 입니다')
//f-string을 활용한 출력방법
for s in scores:
name = s['name']
score = str(s['score'])
print(f'{name}은 {score}점입니다')
예외처리
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:
if person['age'] > 20:
print (person['name'])
//현재 bobby의 age가 들어가 있지않다. 이러면 에러가 발생할 수 밖에 없다.
for person in people:
try:
if person['age'] > 20:
print (person['name'])
except:
name = person['name']
print(f'{name} - 에러입니다')
이 때 try: 코드 / except: 에러가 나면 이런식으로 표현하라.라는 뜻으로 사용한다. 추후에 에러가 발생하면 멈추지 않고 에러난 코드에 except의 코드가 표시된다.
ex)서버한테 콜을 할 경우 자주 사용한다. 자주 남용하면 좋지 않으니 되도록 사용을 자제하자.
파일을 불러오기
여러개의 파일로 분리해서 메인에 불러오고 싶다면
from (파일) import *
from (파일) import (변수) //일부 변수만 가져오고 싶을 경우
if문의 삼항연산자
조건에 따라 다른 값을 변수에 저장하고 싶은 경우
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}입니다.")
result = ("if조건이 채워졌을 때" 조건 "아닌경우")
for 간단하게 사용하기
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 = [a*2 for a in a_list]
print(b_list)
b_list = ["반복문코드" 반복문 ]
map,filter,lambda
map
리스트를 하나씩 돌면서 함수에 대입시키고 이것을 다시 리스트로 묶어놓은 것.
def check_adult(person):
return '성인' if person['age'] > 20 else '청소년'
result = map(check_adult, people)
print(list(result))
//list는 맵 앞에 써도 상관없다
//map은 people에 있는 코드를 하나하나씩 check_adult에 대입하면서 분류하고 이걸 다시 result에 list로 분류한 것이다.
lambda
함수를 대신해 lambda를 사용하여 더 간단하게 만들 수 있다.
사용할 때 요소를 x로 많이 표현한다.
lambda 매개변수 : 표현식
result = map(lambda x: ('성인' if x['age'] > 20 else '청소년'), people)
print(list(result))
filter
map과 유사하지만 결과가 참인 값들로 새로 시리트를 만드는 것이다.
filter(함수, 리스트)
result = filter(lambda x: x['age'] > 20, people)
print(list(result))
함수와 매개변수
라이브러리를 사용할 때 코드로 확인하기에 좋다.
함수를 설정할 때 요소를 숫자로 고정하면 순서를 지킬 필요가 없어 편하다.
만약 예시에 cal(a,b)대신 cal(a,b=2)숫자를 넣고 print(cal(1,3))식으로 고정한다면 a=1,b=3으로 고정된다.
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))
*args = 변수를 무제한으로 넣을 수 있다. 예시의 call_names의 변수를 무제한으로 넣어도 무제한으로 추가된다.
def call_names(*args):
for name in args:
print(f'{name}야 밥먹어라~')
call_names('철수','영수','희재'...)
**kwargs = 키워드로 인수를 받는다.키워드를 딕셔너리로 그대로 가져다 쓸 수 있도록 만든다.
def get_kwargs(**kwargs):
print(kwargs)
get_kwargs(name='bob')
get_kwargs(name='john', age='27')
클래스
객체를 만들기위한 틀로서 동일한 객체들을 만들 수 있으며 고유한 성격을 가진다.
메서드의 첫번째 매개변수는 반드시 self로 지정한다.
객체는 '객체명 = 클래스명()'을 통해서 생성하며, 메서드는 객체 뒤에 점을 붙인 후 메서드를 호출하면 된다.
class 클래스명:
def 메서드명(self, ...):
[메서드 코드]
객체지향적인 속성.
필요한 물체에 관련된 속성을 붙이고, 컨트롤할 수 있는 함수를 만들어 붙이고, 중앙에서 그 함수만 불러 제어한다.
자체적으로 staus를 관리한다.
예시의 m1,m2를 인스턴스라고 한다.
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: //기본적으로 true속성을 가진다.
print('살아있다')
else:
print('죽었다')
m = Monster()
m.damage(120)
m2 = Monster()
m2.damage(90)
m.status_check()
m2.status_check()
#마치며
파이썬의 기초부터 많이 사용하는 코드까지 배워봤다.
다소 js와 비슷한 부분도 많았는데 또 js랑 애매하게 다르니까 헷갈리기도 하고..
중괄호를 써서 구분하는게 난 더 편한 것같다. 파이썬의 줄바꿈 구분은 너무 구분하기가 어렵다....
만약 if문안의 또다른 if문을 써야할 경우가 생기면 머리아파질 것같아ㅋㅋㅋ...
'[내일배움캠프] > TIL' 카테고리의 다른 글
| 22.11.10)Client와 알고리즘을 배운9일차 (1) | 2022.11.10 |
|---|---|
| 22.11.09)알고리즘을 배운 8일차 (1) | 2022.11.09 |
| 22.11.07)JS의 첫날인 6일차 (1) | 2022.11.07 |
| 22.11.04)드디어 미니프로젝트의 끝인 5일차 (0) | 2022.11.04 |
| 22.11.03)GET과 POST를 통합했던 4일차 (0) | 2022.11.03 |