[참고 게시글]
https://docs.python.org/ko/3.9/tutorial/introduction.html
1. 변수선언과 자료형
▶ 변수 선언
# 변수 이름 = 값
# a = b와 b = a는 다름.
a = b는 a라는 변수에 b라는 값을 넣은 것이고, b = a는 그 반대
# 변수는 값을 넣어주는 그릇으로서 변수에 담긴 값을 가리키고 있음
컴퓨터에서 값이 들어있는 그 메모리 공간 주소를 변수가 가리키고 있는 것
▶ 자료형
# 프로그래밍을 할 때 쓰이는 숫자, 문자열 등 자료형태로 사용하는 모든 것
# 숫자형(정수형, 실수형)
사칙연산(+, -, *, /) 가능. 몫(//), 나머지(%), 거듭제곱(**) 가능
변수에 저장된 값에 연산을 하고, 다시 그 값을 같은 변수에 저장할 수 있음
a = 3
a = a + 7
print(a)
# 10 이 출력됨.
# a 라는 변수가 처음에는 3 이라는 값을 가지고 있었지만
# 다음 연산에서 7과 더해진 뒤 다시 a 라는 변수에 저장되면서
# a 는 10이 됨.
# bool 자료형(True / False)
참 / 거짓을 나타내는 자료형
True / False를 써줄 때 소문자로 적게되면 bool 자료형이 아니라 변수명으로 인식하니 주의!
비교 연산자의 결과 나타낼 때 쓰임
1 < 3 # True
5 >= 2 # False
7 == 10 # False
4 != 6 # True 같지 않다
논리 연산자 사용 가능
a = 7 > 3 # True
not a # False NOT 연산자 >> 참을 거짓으로, 거짓을 참으로 바꿔줌
a and b # False AND 연산자 >> 모두 참이어야 True 반환
a or b # True OR 연산자 >> 둘 중 하나만 참이면 True 반환
[참고 게시글]
[AI기본과정/파이썬 기초] - 파이썬 기초 | 변수 개념 | input()함수 | int() 함수 | = 와 == 의 차이
[AI기본과정/파이썬 기초] - 파이썬 기초 | 산술, 대입, 비교, 논리 연산자 | ==, !=, +=, //=, %=, **= 사용법
2. 문자열 다루기
▶ 문자열 기초
문자열은 작은 따옴표(' ')나 큰 따옴표(" ")로 감싸주어야 함
▶ 문자열 연산
문자열 간 합하고 싶을 때는 '+ 연산자' 사용 ( '+ 연산자' 사용 시 띄어쓰기 없이 합쳐짐)
문자열과 정수를 더하면 에러 남
.(온점)을 붙이고 쓰는 내장함수들을 메소드(method)라고 함
- 문자열 길이 구하기 : len('길이 세줄 문자열')
- 특정 문자를 다른 문자로 바꾸기 : replace('바뀌기 전 문자', '바뀐 후 문자')
- 모든 알파벳 대문자/소문자로 바꾸기 : upeer() / .lower()
- 특정 문자 기준으로 문자열을 나누기 : split('특정문자')
▶ 인덱싱과 슬라이싱
인덱싱: 문자열 안에서 그 문자가 몇 번째 자리에 있는 문자인지 '인덱스'를 넣어 부르는 것
슬라이싱: 문자열의 일부를 잘라낼 때 사용하는 것
fruit = apple
# 인덱싱
fruit[0] # apple 중 0 번째 글자인 a가 출력됨
######################################################################
# 슬라이싱[시작 자리, 끝+1 자리]
fruit[1:4] # fruit[1번째 자리부터 3번째 자리까지 출력] >> ppl 출력
fruit[2:] # fruit[2번째 자리부터 문자열 끝까지 출력] >> ple 출력
fruit[:3] # fruit[시작부터 2번째 자리까지 출력] >> app 출력
fruit[-1] # fruit[마지막 자리 출력] >> e 출력
# 여기서 -1은 뒤에서부터 자리를 세줄 때 사용
# 즉, 마지막의 앞(전) 자리는 -2번째 자리가 됨, 그 앞(전)은 -3 ...
fruit[:] # 처음부터 끝까지 출력 >> apple
[참고 게시글]
3. 리스트[ ]와 딕셔너리{ }
▶ 리스트(list) [ ]
컴파운드 자료형(여러 자료형을 담을 수 있음, 리스트를 중첩도 가능)
순서가 중요함
내용 변경 가능(가변, 새로운 값 추가 / 삭제 / 변경 등이 가능)
인덱싱, 슬라이싱 가능
- 길이 세주기: len()
- 덧붙이기 : append()
- 정렬하기 : sort()
- 요소가 리스트 안에 있는지 알아보기 : 요소 in 리스트명
▶ 딕셔너리(dictionary) { }
키(key)와 값(value)의 쌍으로 이루어진 자료의 모임 { 'key' : 'value' }
순서가 없음 (>> 그래서 인덱싱을 사용할 수 없음)
내용 변경 가능(가변, 새로운 쌍의 자료를 추가 / 삭제 / 변경 등이 가능)
딕셔너리의 value에는 여러 자료형을 담을 수 있음. 딕셔너리 중첩도 가능
- 해당 키가 딕셔너리 안에 있는지 알아보기 : 키 in 딕셔너리명
▶ 리스트와 딕셔너리의 조합
people = [{'name' : 'jack', 'age' : 28},
{'name' : 'jill', 'age' : 25}]
print(people[1]['age'])
# 25 가 출력됨
[참고 게시글]
4. 튜플, 집합
▶ 튜플(tuple)
리스트와 비슷하게 순서가 존재하지만 불변형임.
딕셔너리 대신 리스트와 튜플로 딕셔너리 '비슷하게' 만들어 사용해야 할 때 많이 쓰임
▶ 집합(set)
중복을 제거해줌.
교집합, 합집합, 차집합도 구할 수 있음
# 집합 교집합, 합집합
a = ['딸기','참외','수박','멜론']
b = ['딸기','수박','포도','바나나','자두']
a_set = set(a)
b_set = set(b)
print(set_a & set_b) # 교집합
# {'딸기', '수박'}
print(set_a | set_b) # 합집합
# {'딸기', '참외', '수박', '멜론', '포도', '바나나', '자두'}
# 집합 차집합
student_a = ['국어','영어','수학','과학','사회','체육','음악']
student_b = ['영어','일본어','미술','수학','사회']
a_set = set(student_a)
b_set = set(student_b)
print((a_set) - (b_set)) #차집합
# {'국어', '과학', '체육', '음악'} 이 출력됨
5. 조건문
▶ if (조건):
조건을 만족했을 때만 특정 코드를 실행하도록 하는 문법
▶ elif (조건):
if 조건문 외의 다양한 조건을 주기 위해 작성
▶ else :
if 조건문을 만족하지 않을 때 실행할 코드를 작성
[참고 게시글]
[AI기본과정/파이썬 기초] - 파이썬 기초 | 조건문 | if문 | if~else문 | 중첩 if문 | elif문 사용법 | 조건문 기본 제어구조(순차/선택/반복구조)
6. 반복문
▶ for 요소 in 리스트:
(연산문 .. )
리스트 안에 있는 요소들을 하나씩 꺼내서 마지막 요소까지 밑의 연산을 반복적으로 실행함
▶ for i in range(반복 시작위치 인덱스, 반복 끝 위치 인덱스, 간격):
(연산문 .. )
range() 함수로 지정한 만큼의 숫자대로 밑의 연산을 반복적으로 실행함
people = [
{'name': 'jack', 'age': 28},
{'name': 'jill', 'age': 25},
{'name': 'anna', 'age': 30},
{'name': 'sena', 'age': 17}
]
for person in people:
name = person['name']
age = person['age']
if age > 20:
print(name, age)
# jack 28
# jill 25
# anna 30 이라고 출력됨
▶ enumerate
enumerate의 뜻은 '낱낱이 세다'라는 뜻으로 열거하거나 나열할 때 사용
순서가 있는 자료형을 입력 받았을 때 인덱스와 값을 포함하여 리턴
인덱스와 값을 동시에 반복하고 싶을 때 사용
for문과 함께 자주 사용
people = [
{'name': 'jack', 'age': 28},
{'name': 'jill', 'age': 25},
{'name': 'anna', 'age': 30},
{'name': 'sena', 'age': 17}
]
for i, person in enumerate(people):
name = person['name']
age = person['age']
print(i, name, age)
if i > 3:
break
# 1 jack 28
# 2 jill 25
# 3 anna 30 이라고 출력됨
[참고 게시글]
7. 함수
▶ def 함수명(함수 매개변수):
반복적으로 사용하는 코드들에 이름을 붙여놓은 것
return을 통해 (결과를 단순하게 출력(print)해 주는 것이 아니라) 결과 값을 돌려주도록 할 수도 있음
def vat(price):
if price < 1000:
return 100
if price < 2000:
return 200
else:
return 300
myvat = vat(1450)
print(myvat)
# 200 이 출력됨
[참고 게시글]
[AI기본과정/파이썬 기초] - 파이썬 기초 | 함수 | def ~ return | 매개변수 전달, 값 변환 | pass 키워드 | 지역변수/전역변수 | Global 예약어
8. f-string
scores = [
{'name':'안나','score':80},
{'name':'세나','score':45},
{'name':'데이','score':95},
{'name':'지니','score':65}
]
for s in scores:
name = s['name']
score = s['score']
print(name + '의 점수는 '+score+'점입니다.')
# 위 print문을 f-string을 사용하면,
print(f'{name}의 점수는 {score}점 입니다.')
9. 예외처리
▶ try:
(-중간과정-)
except:
에러가 있어도 건너뛰게 할 수 있는 방법
단, 남용하면 어떤 에러가 난 건지 확인할 수 없으므로 서버 상의 문제 등 정말 써야할 경우만 사용
scores = [
{'name':'안나','score':},
{'name':'세나','score':45},
{'name':'데이','score':95},
{'name':'지니','score':65}
] # 지금 안나의 점수가 비어있는 상태!!
for s in scores:
try:
if scores['socre'] > 60:
print(scores['name'])
except:
print(scores['name'], '에러 발생')
# 안나 에러 발생
# 데이
# 지니 # 가 출력됨
[참고 게시글]
[AI기본과정/파이썬 기초] - 파이썬 기초 | 예외 처리 | try ~ except ~ | ZeroDivisionError | IndexError
10. 파일 불러오기
from 파일이름 import *(또는 사용할 함수 등)
# /from 파일이름/ 안의 데이터들을 가져다 쓸 수 있음
11. 한 줄의 마법
▶ if문 삼항연산자
(참일 때 값) if (조건) else (거짓일 때 값)
▶ 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)
12. map, lamda, filter
▶ map(함수, 리스트명)
리스트의 모든 원소를 조작하기
people = [
{'name': 'jack', 'age': 28},
{'name': 'jill', 'age': 25},
{'name': 'anna', 'age': 30},
{'name': 'sena', 'age': 17}
]
def check_adult(person):
if person['age'] > 20:
return '성인'
else:
return '청소년'
result = map(check_adult, people)
print(list(result))
# people을 하나하나 돌면서 check_adult에 넣어라
# 그리고 그 return 값을 list로 만들어라
################################################
# list(map( )) 이렇게 더 많이 쓴다고 함
result = list(map(check_adult, people)
print(result)
▶ map 함수_ if문 삼항연산자 버전
def check_adult(person):
return '성인' if person['age'] > 20 else '청소년'
result = map(check_adult, people)
print(list(result))
▶ map 함수_ lamda x : x식
result = map(lambda x: ('성인' if x['age'] > 20 else '청소년'), people)
print(list(result))
▶ filter
리스트의 모든 원소 중 특별한 것만 뽑기
map과 유사한데 True인 것들만 뽑아오는 것
result = filter(lambda x: x['age'] > 20, people)
print(list(result))
13. 함수의 매개변수
▶ 함수에 인수를 넣을 때 어떤 매개변수에 어떤 값을 넣을지 정해줄 수 있음
순서 상관 없음. (a = 3, b = 5 이렇게 적어줘도 되고, b = 5, a = 3 이렇게 적을 수도 있음)
def cal(a, b):
return a + 2 * b
print(cal(3, 5))
print(cal(a=3, b=5))
print(cal(b=5, a=3))
▶ 특정 매개변수에 기본값을 지정해 줄 수 있음
def cal(a, b=3):
return a + 2 * b
print(cal(4))
print(cal(4, 2)) # 기본 값으로 b=3으로 이미 지정되어 있지만 여기서처럼 다시 2로 지정 가능
print(cal(a=7))
print(cal(a=2, b=6))
▶ 입력값의 개수를 지정하지 않고 모두 받는 방법
# 매개변수 args
여러 개의 인수를 하나의 매개변수를 받을 때 관례적으로 arguments라는 뜻의 args를 사용함
def call_names(*args):
for name in args:
print(f'{name}야 밥먹어라~')
call_names('안나','세나','데이')
# 매개변수 kwargs
키워드 인수를 여러 개 받을 때 kwargs를 사용함
def get_kwargs(**kwargs):
print(kwargs)
get_kwargs(name='anna')
get_kwargs(name='sena', age='27')
14. 클래스
▶ 클래스를 언제 사용해야 하는가?
객체들이 자신의 속성을 관리하도록 할 때 (객체지향)
# 나에 대한 클래스를 생성해봄
class annasena():
def __init__(self, name, email, money):
self.name = ''
self.email = ''
self.money = 0
def income(self, amount):
self.money = self.money + amount
print(f'지금 내 잔고는~ {self.money}만원! 오예')
def spend(self, amount):
if amount > self.money:
print(f'돈 없어,,이거 못 사!!')
else:
self.money = self.money - amount
print(f'지금 내 잔고는~ {self.money}만원..흑흑')
my_info = annasena('anna', 'anna@mail.com', 200)
my_info.income(100)
my_info.spend(30)
my_info.spend(80)
[참고 게시글]
[AI기본과정/파이썬 기초] - 파이썬 기초 | 객체(인스턴스), 클래스, 생성자, 상속 개념 | 다양한 메소드 | __init__() | __del__() | __add__()
댓글