💡수업 목표💡
- 파이썬 기초 문법을 익히고,
- 여러가지 퀴즈로 빠르게 숙달한다.
- 파이썬 심화 문법들을 다뤄봅니다.
- 머릿속 어딘가에 담아두고, 나중에 생각나면 써먹기!
변수 선언
변수 Variables 란 어떠한 값을 저장할 수 있는 메모리 공간을 변수라고 하고, 그 공간을 쉽게 사용하려고 이름을 만들어서 붙이는데 변수명이라고 한다.
변수이름 = 값
a = 3 # 3을 a에 넣는다.
print(a)
b = a # a에 들어 있는 값인 3을 b에 넣는다.
print(b)
a = 5 # a에 5라는 새로운 값을 넣는다.
print(a, b) # 5 3
자료형
자료형 Data Type이란? 프로그래밍 언어에서 사용할 수 있는 데이터의 종류를 의미한다.
데이터의 종류에 따라 확보해야되는 메모리의 크기가 다르기 때문에. 그 값의 종류를 식별하여 자료형에 대한 가능한 값, 해당 자료형에서 수행을 마칠 수 있는 명령들, 데이터의 의미, 해당 자료형의 값을 저장하는 방식을 결정한다.
Number 숫자형
숫자형 자료형은 따옴표 없이 숫자로만 입력된 형태의 데이터.
정수, 실수 다양한 형태의 숫자를 쓸 수 있고, 숫자형간의 사칙연산이 가능하다.
num = 숫자
num = Int("정수 숫자");
num = float("실수 숫자");
a = 7
b = 2
a+b # 9
a-b # 5
a*b # 14
a/b # 3.5
a//b # 3 (몫)
a%b # 1 (나머지)
a**b # 49 (거듭제곱)
a+3*b # 13 (여러 연산을 한 줄에 할 경우 사칙연산의 순서대로!)
(a+3)*b # 20 (소괄호를 이용해서 먼저 계산할 부분을 표시해줄 수 있어요!)
Boolean 불린형
불린형 자료형은 ture(참) 또는 false(거짓)의 논리형태의 데이터.
기본적으로 0, 빈문자(" "), None을 제외한 모든 값에 대해서 true를 반환한다.
변수 = True or False # 소문자로 쓰면 자료형으로 인식하지 않고 변수명이라 생각해 에러가 납니다~
변수 = Bool(표현식);
String 문자열
문자열은 문자나 숫자를 "" 또는 ''로 감싸고 있는 형태의 데이터.
변수 = "문자열 숫자나 문자";
a = 1 # 따옴표로 감싸지 않으면 문자열이 아닌 숫자!
b = "a"
c = a # 따옴표로 감싸지 않으면 변수이름을 뜻하기 때문에 꼭 구분해서 써야합니다!
print(a, b, c) # 1 "a" 1
문자열 연산
문자열 간의 더하기는 두 문자열을 이어붙인 문자열을 반환한다. 이때 문자열과 다른 자료형은 더할 수 없다.
first_name = "Harry"
last_name = "Potter"
first_name + last_name # HarryPotter
first_name + " " + last_name # Harry Potter
a = "3"
b = 5
a+b # Error!
문자열에서 자주 쓰이는 내장함수, 메소드
내장 함수는 모듈이나 패키지를 가져오지 않고 바로 사용할 수 있는 함수를 의미
메소드는 객체 내의 함수를 의미하는데 여기서는 특정 자료형에서 사용할수 있는 함수로 이해하면 된다. 자료형 뒤에 '.' 을 붙이고 쓰면 된다.
len() : 문자열의 길이를 반환하는 내장함수
print(len("Hello, Sparta!")) # 14
print(len("안녕하세요.")) # 6
.upper() / .lower() : 문자열 내의 모든 알파벳을 대문자/소문자로 바꾸는 메소드
sentence = 'Python is FUN!'
sentence.upper() # PYTHON IS FUN!
sentence.lower() # python is fun!
.split("특정문자") : 특정 문자를 기준으로 문자열을 나누는 메소드
# 이메일 주소에서 도메인 '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]
.replace("변경전문자","변경후문자") : 특정 문자를 다른 문자로 바꾸는 메소드
txt = '서울시-마포구-망원동'
print(txt.replace('-', '>')) # '서울시>마포구>망원동'
문자열 형식화(string formatting)
파이썬에서는 복잡한 문자열을 만들때 원하는 위치에 특정한 값(변수)를 삽입해서 문자열을 그때그때 이쁘게 출력할 수 있도록 지원해준다.
% 서식문자
문자열의 어느 위치에 값이 들어가는지를 표시하기 위해 문자열 안에 % 기호로 시작하는 형식지정 문자열(format specification string)을 붙이고 그 뒤에 다른 값을 붙이면 뒤에 붙은 값이 문자열 안으로 들어간다.
%s | 문자열 |
%d | 정수 |
%f | 부동소수점 실수 |
print("내 이름은 %s입니다." % "홍길동") # 내 이름은 홍길동입니다.
print("나는 %d살 입니다." % 12") # 나는 12살 입니다.
print("원주율의 값은 %f입니다." % 3.141592) # 원주율의 값은 3.141592입니다.
.format() 메소드
.format() 메서드는 % 기호로 시작하는 형식지정 문자열 대신 {} 기호를 사용한다. 또한 자료형을 표시할 필요가 없다. 문자열 내에서 { 문자를 출력하고 싶을 때는 {{라는 글자를 사용한다.
{} 안에 값의 순서를 지정하는 숫자나 인자를 넣을 수도 있다. 가장 앞에 있는 값은 {0}, 그 뒤의 값은 {1}, 이런 식으로 지정한다. 이 방법을 사용하면 값의 순서를 바꾸거나 같은 값을 여러번 인쇄할 수도 있다.
print("내 이름은 {}입니다.".format("홍길동")) # 내 이름은 홍길동입니다.
print("내 이름은 {{{}}}입니다.".format("홍길동")) # 내 이름은 {홍길동}입니다.
"{2}의 {0} 점수는 {1}점입니다. {1}점! {1}점!".format("수학", 100, "철수") # 숫자지정
"{a}점수: {x}점, {b}점수: {y}점".format(a="영어", b="수학", x=100, y=90) # 인자지정
f-string
f-string은 문자열의 앞에 f 글자를 붙인 문자열이다. f 문자열에서는 {} 안에 변수의 이름을 바로 사용할 수 있다.
s = {'name':'영수','score':70}
name = s['name']
score = str(s['score'])
print(f'{name}은 {score}점입니다')
List 리스트
리스트는 관련 있는 데이터를 하나의 변수에 할당하여 관리하기 위한 데이터 타입으로 [ ]로 감싸서 나타내고, 이런 요소들을 쉼표로 구분하며, 안에 어떤 데이터 타입이든 다 들어갈 수 있다. 리스트안에 리스트가 들어갈 수도 있고, 딕셔너리가 들어갈 수도 있다.
변수명 = [value1,value2,value3]
a = [1, 3, 2, 4]
b = [3, "a", 6, 1]
c = []
d = list()
e = [1, 2, 4, [2, 3, 4]]
# 인덱싱
print(a[3]) # 4
# 슬라이싱
print(a[1:]) # [3, 2, 4]
print(a[:3]) # [1, 3, 2]
print(a[1:3]) # [3, 2]
print(a[-1]) # 4 (맨 마지막 것)
print(a[::-1]) # 역순 [4,2,3,1]
print(a[::-2]) # 역순 [4,3]
리스트 에서 자주 쓰이는 내장함수, 메소드
len() : 리스트의 길이를 반환하는 내장함수
a = [1, 5, 2]
print(len(a)) # 3
.append() :리스트 끝에 값을 덭붙이는 메소드
a = [1, 2, 3]
a.append(5) # [1, 2, 3, 5]
.sort() : 리스트 값을 정렬하는 메소드
a = [2, 5, 3]
a.sort() # 오름차순 [2, 3, 5]
a.sort(reverse=True) #내림차순 [5, 3, 2]
값 in 리스트 : 요소가 리스트 안에 있는지 Boolean으로 값을 반환하는 연산자
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)의 쌍으로 이루어진 데이터타입으로 {}로 감싸서 나타내고, 이런 요소들을 쉼표로 구분하며, 안에 어떤 데이터 타입이든 다 들어갈 수 있다. 딕셔너리안에 리스트가 들어갈 수도 있고, 딕셔너리가 들어갈 수도 있다.
다만 딕셔너리의 요소에는 순서가 없기 때문에 인덱싱은 할 수 없다.
{ Key1:Value1,
Key2:Value2,
Key3:Value3, ...}
# 빈 딕셔너리 만들기
a = {}
a = dict()
person = {"name":"Bob", "age": 21}
person["name"] = "Robert"
print(person) # {'name': 'Robert', 'age': 21}
print(person[1]) # 0이라는 key가 없으므로 KeyError 발생! 인덱싱 불가.
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 딕셔너리 : 요소가 딕셔너리 안에 해당 Key가 있는지 Boolean으로 값을 반환하는 연산자
person = {"name":"Bob", "age": 21}
print("name" in person) # True
print("email" in person) # False
print("phone" not in person) # True
심화 자료형
튜플 Tuple
튜플(tuple)은 리스트와 비슷하지만 불변인 자료형이다. ()로 감싸서 나타내고 순서가 있지만 생성,삭제,수정이 불가능하다.
변수명 = (value1,value2,value3)
a = (1,2,3)
print(a[0])
a[0] = 99 # Error!
#주로 딕셔너리 대신 리스트와 튜플로 딕셔너리 '비슷하게' 만들어 사용해야 할 때 많이 쓰임.
a_dict = [('bob','24'),('john','29'),('smith','30')]
집합 Set
집합(set)은 집합에 관련된 것을 쉽게 처리하기 위해 만든 자료형dlek.
변수명 = 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) # {1, 2, 3, 4, 5} 중복 제거
a = set(['사과','감','수박','참외','딸기'])
b = set(['사과','멜론','청포도','토마토','참외'])
print(a & b) # 교집합
print(a | b) # 합집합
print(a - b) # 차집합
조건문 if
조건문은 조건식의 값이 true인지 false인지에 따라서 로직을 제어하는 것.
- if문은 지정한 조건에 따라 명령문의 실행 여부를 결정.
- else문은 조건을 만족하지 않은 경우에 명령문이 실행.
if 조건식:
실행 문장;
# if ~ else문
if 조건식:
실행 문장 1;
else:
실행 문장 2;
age = 27
if age < 20:
print("청소년입니다.")
elif age < 65:
print("성인입니다.")
else:
print("무료로 이용하세요!")
반복문 for
반목문은 동일한 코드를 반복 실행해야하는 경우 반복문(loop)를 통해서 코드를 여러회 반복하여 실행시킬수 있다.
for 변수 in 리스트(또는 튜플, 문자열):
수행할 문장1
수행할 문장2
...
fruits = ['사과', '배', '감', '귤']
for fruit in fruits:
print(fruit)
enumerate()
파이썬은 순회가 가능한 왠만한 모든 데이터 타입을 사용해서 반복문을 돌리는데 그러다보니 인덱스에 접근하기 쉽지 않다. enumerate(0는 파이썬답게 인덱스(index)와 원소를 동시에 접근하면서 루프를 돌 수 있도록 해준다.
fruits = ['사과', '배', '감', '귤','귤','수박','참외','감자','배','홍시','참외','오렌지']
for i, fruit in enumerate(fruits):
print(i,fruit)
Break문
break는 for문 또는 while문 등 반복문 안에서 조건식과 상관없이 강제로 반복문을 종료.
for i, fruit in enumerate(fruits):
print(i, fruit)
if i == 4:
break # 5개만 출력되고 반복문 끝
함수
하나의 특별한 목적의 작업을 수행하기 위해 독립적으로 설계된 프로그램 코드의 집합
def 함수명(매개변수):
<수행할 문장1>
<수행할 문장2>
...
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 cal(a, b):
return a + 2 * b
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처럼 매개변수 이름 앞에 *을 붙이면 입력값을 전부 모아서 튜플로 만들어 여러개의 인수를 하나의 매개변수로 받을 수 있다.
# 여러 개의 인수를 하나의 매개변수로 받을 때 관례적으로 args라는 이름을 사용. arguments라는 뜻!
def call_names(*args):
for name in args:
print(f'{name}야 밥먹어라~')
call_names('철수','영수','희재')
키워드 파라미터 kwargs
키워드 파라미터를 사용할 때는 매개변수 앞에 별 두 개(**)를 붙인다. 매개변수 kwargs는 딕셔너리가 되고 모든 key=value 형태의 결괏값이 그 딕셔너리에 저장된다.
def get_kwargs(**kwargs):
print(kwargs)
get_kwargs(name='bob') # {'name':"bob"}
get_kwargs(name='john', age='27') # {'name':"john", "age":27}
클래스와 객체
객체 Object란 물리적으로 존재하거나 추상적으로 생각할 수 있는 것 중에서 자신의 속성을 가지고 있고 다른것과 식별 가능한 것으로 단순히 하나의 데이터 값만이 아닌 속성(property)와 기능(method)등 복합적인 집합이다.
속성(데이터)과 기능(메서드)으로 하나의 추상화 틀을 구성하는 것이 클래스 라고 한다.
객체지향 프로그래밍은 실세계에 존재하고 인지하고 있는 객체(Object)를 소프트웨어의 세계에서 표현하기 위해 객체의 핵심적인 개념 또는 기능만을 추출하는 추상화(abstraction)를 통해 모델링하려는 프로그래밍 패러다임을 말하며, 자바스크립트는 객체지향 프로그래밍(Object-Oriented Programming)을 지원한다.
class 클래스명():
변수 = 변수값
def 함수(매개변수):
함수 기능
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()
자세한 Python 참고자료
'스파르타코딩클럽 > Python' 카테고리의 다른 글
파이썬 Django 기초 - 2주차 (2) 데이터베이스와 Model (0) | 2022.09.28 |
---|---|
파이썬 Django 기초 - 2주차 (1) Django 프로젝트 구조 (0) | 2022.09.28 |
파이썬 Django 기초 - 1주차 (1) | 2022.09.26 |
Python에서 venv로 가상 환경 사용하기 (2) | 2022.09.26 |
Python 설치 및 IDE 설정 (1) | 2022.09.26 |