upper()
: 모든 문자열을 대문자로 변경lower()
: 모든 문자열을 소문자로 변경data = 'python'
data.upper()
# Terminal
'PYTHON'
type()
: 객체의 타입을 체크해주는 함수dir()
: 괄호 안 객체에 대해 어떤 메서드를 쓸 수 있는지 알려주는 함수help()
: 키워드, 함수, 클래스, 매서드 등에 대한 사용법을 알려주는 함수tuple
tuple
데이터 타입은 여러 개의 식별자로 받을 수 있다
data = 1, 2
print(type(data), data)
d1, d2 = data
print(d1, d2)
# Terminal
<class 'tuple'> (1, 2)
1 2
+
-
*
/
//
%
**
데이터 (int str list) + 데이터 = 데이터
식별자 산술= 데이터
==
!=
>
<
>=
<=
데이터 + 데이터 = 논리값
not
and
or
논리값 + 논리값 = 논리값
a = 10, b = 20, c = 3
Operator | Description | Example |
---|---|---|
+ | 더하기 | a + b = 30 |
- | 빼기 | a - b = -10 |
* | 곱하기 | a * b = 200 |
/ | 나누기 | b / a = 2.0 |
% | 나머지 | b % a = 0 |
** | 제곱 | a ** c = 1000 |
// | 몫 | a // c = 3 |
data1, data2 = 14, 4
data1 - data2, data1 // data2, data1 % data2, data2 ** 2, data2 ** 0.5
# Terminal
(10, 3, 2, 16, 2.0)
# **연산자 우선순위**
1 + 2 * 3, (1 + 2) * 3
# Terminal
(7, 9)
# **나이를 입력 받아 연령대로 출력하는 코드 작성**
age = 49
ages = age // 10 * 10
ages # 30
# Terminal
40
# **데이터 타입에 따른 연산자 사용**
d1, d2, d3, d4 = 1, 2, '3', '4'
# **데이터 타입에 따라서 수행되는 연산이 다름**
d1 + d2, d3 + d4
# Terminal
(3, '34')
# **데이터 타입의 형변환**
# int(), float(), bool(), str(), list(), tuple(), dict()
d1 + int(d3), str(d1) + d3
# Terminal
(4, '13')
# **추가적인 연산, 형변환**
d5, d6 = [1, 2], list('ABC')
print(d5 + d6, d6 * 2, d4 * 5)
# Terminal
[1, 2, 'A', 'B', 'C'] ['A', 'B', 'C', 'A', 'B', 'C'] 44444
누적해서 산술 연산 수행
a = 10, b = 20
Operator | Description | Example |
---|---|---|
= | 왼쪽 변수에 오른쪽 값을 할당한다 | c = a + b → c = a + b |
+= | 왼쪽 변수에 오른쪽 값을 더하고 결과를 왼쪽변수에 할당 | c += a → c = c + a |
-= | 왼쪽 변수에서 오른쪽 값을 빼고 결과를 왼쪽변수에 할당 | c -= a → c = c - a |
*= | 왼쪽 변수에 오른쪽 값을 곱하고 결과를 왼쪽변수에 할당 | c = a → c = c a |
/= | 왼쪽 변수에서 오른쪽 값을 나누고 결과를 왼쪽변수에 할당 | c /= a → c = c / a |
%= | 왼쪽 변수에서 오른쪽 값을 나눈 나머지의 결과를 왼쪽변수에 할당 | c %= a → c = c % a |
**= | 왼쪽 변수에 오른쪽 값만큼 제곱을 하고 결과를 왼쪽변수에 할당 | c = a → c = c a |
//= | 왼쪽 변수에서 오른쪽 값을 나눈 몫의 결과를 왼쪽변수에 할당 | c //= a → c = c // a |
data = 10
# data = data + 5
data += 5
data
# Terminal
15
a = 10, b = 20
Operator | Description | Example |
---|---|---|
== | 값이 동일하다 | (a == b) → false |
!= | 값이 동일하지 않다 | (a != b) → true |
> | 왼쪽 값이 오른쪽 값보다 크다 | (a > b) → false |
< | 왼쪽 값이 오른쪽 값보다 작다 | (a < b) → true |
>= | 왼쪽 값이 오른쪽 값보다 크거나 동일하다 | (a >= b) → false |
<= | 왼쪽 값이 오른쪽 값보다 작거나 동일하다 | (a <= b) → true |
# ==, !=, >, <, >=, <=
# 데이터 + 데이터 = 논리값
# 수식의 문법이 틀리면 Fasle, 맞으면 True 출력
d1, d2 = 10, 5
d1 == d2, d1 != d2, d1 > d2
# Terminal
(False, True, True)
# **ATM 기기 코드로 구현**
# 인출이 가능하면 True, 불가능하면 False 출력
# 인출금액을 입력받아서 처리 : input()
balance = 10000
draw = int(input('insert draw amount : '))
balance >= draw
# Terminal
insert draw amount : 2000
True
a = True, b = False
Operator | Description | Example |
---|---|---|
and | 논리 AND 연산. 둘다 참일때만 참 | (a == b) → false |
or | 논리 OR 연산. 둘 중 하나만 참이여도 참 | (a != b) → true |
not | 논리 NOT 연산. 논리 상태를 반전 | (a > b) → false |
논리값 + 논리값 = 논리값 : 논리값(데이터+데이터) + 논리값(데이터+데이터) = 논리값
비교연산자 : 조건1개
논리연산자 : 조건2개이상
not
, and
(T: T and T = T), or
(F: F or F = F)
not
> and
> or
and
는 두개의 조건이 모두 True이여야 True
or
는 두개의 조건중 하나만 True이여도 True
not False, not (True and False), False or True, (10 > 5) or (10 > 15)
# Terminal
(True, True, True, True)
# **ATM 기기 업그레이드**
# 1회당 최대 인출금액은 5000원 입니다.
# 잔고보다 인출금액이 작거나 같음 : 최대인출금액 5000원
# 인출이 가능하면 True, 불가능하면 False 출력
balance = 10000
draw = 4000
(balance >= draw) and (draw <= 5000)
# Terminal
True
컬렉션 데이터에서 특정 데이터가 있는 확인 : 결과 논리값
a = 10, b = 10, list = [1, 2, 3, 4, 5]
Operator | Description | Example |
---|---|---|
in | list 내에 포함되어 있으면 참 | (a in list) = False |
not in | list 내에 포함되어 있지 않으면 참 | (b not in list) = True |
in
not in
data = list('ABC')
'B' in data, 'D' in data, 'D' not in data
# Terminal
(True, False, True)
# **선수 명단에 손흥민이 있으면 True 출력**
players = ['메시', '손흥민', '호날두']
'손흥민' in players
# Terminal
True
+
-
< *
/
//
%
< **
데이터 + 데이터 = 데이터
식별자 산술= 데이터
==
!=
>
<
>=
<= 데이터 + 데이터 = 논리값 (조건1개)
not
> and
> or
논리값 + 논리값 = 논리값 (조건2개 이상)
in
not in
data1, data2 = 0.1, 0.2
(data1 + data2) == 0.3
# Terminal
False
# 부동소수점 때문에 'False'가 출력됨
# **부동 소수점 연산 문제**
data1 + data2
# Terminal
0.30000000000000004
# **해결방법 1 : 반올림으로 해결 round()**
print(round(data1 + data2, 1))
round(data1 + data2, 1) == 0.3
# Terminal
0.3
True
# **해결방법 2 : 고정소수점 연산**
from decimal import Decimal
print(float(Decimal(str(data1)) + Decimal(str(data2))))
float(Decimal(str(data1)) + Decimal(str(data2))) == 0.3
# Terminal
0.3
True
특정 조건에 따라서 다른 코드를 실행
if
elf
else
# 내가 가진 돈이 5000원 이상이면 택시를 탄다.
# 내가 가진 돈이 2000원 이상이면 버스를 탄다.
# 그렇지 않으면(2000원 이상이 없으면) 걸어간다.
money = 3000
if money >= 5000:
print('택시 탄다')
elif money >= 2000:
print('버스 탄다')
else:
print('걸어 간다')
print('END')
# Terminal
버스 탄다
END
Python은 들여쓰기를 강조한다
이는 조건문에서도 엄격하게 적용되며, 조건문에 포함되는 코드들은 들여쓰기를 해주어야 알맞게 작동
다른 언어에서는 조건문을 다음과 같이 작성하여, 들여쓰기를 강조하지는 않음
if(money >= 2000){
print('버스 탄다');
}
# 90 >= A, 80 >= B, 70 >= C, 60 >= D, F
point = 87
if point >= 90:
print('A')
elif point >= 80:
print('B')
elif point >= 70:
print('C')
elif point >= 60:
print('D')
else:
print('F')
# Terminal
B
**# 조건을 확인하는 코드 부분의 데이터가 bool(True, False)가 아니면, bool() 형변환해서 판단**
number = 8
if number % 2:
print('홀수')
else:
print('짝수')
# Terminal
짝수
# **숫자 데이터 연산과 bool() 을 통한 형변환 연산**
number = 8
number % 2, bool(number % 2)
# Terminal
(0, False)
# **bool() 형변환 했을 때 False가 나오는 데이터**
bool(0), bool(0.0), bool(''), bool(' '), bool([]), bool(()), bool({})
# Terminal
(False, False, False, True, False, False, False)
# bool(''), bool(' ')에서 후자는 공백이 있기에 True로 출력됨
프로그래밍 = 알고리즘 + 코딩
# 1. 계좌생성 : account : 10000
account = 10000
# 2. 입금, 출금 입력 : 입금(0), 출금(1) : command 변수에 저장
command = int(input('입금(0), 출금(1)을 입력하세요 : '))
# 3. 금액입력 : money 변수에 저장
money = int(input('금액을 입력하세요 : '))
# 4. 입금인 경우
if command == 0:
# 4-1. 입력받은 금액을 계좌에 추가
account += money
# 5. 출금인 경우
else:
# 5-1. 잔액이 부족한 경우 : 'xx의 잔액이 부족합니다.' 출력
if account < money:
print(f'{money - account}의 잔액이 부족합니다.')
# 5-2. 잔액이 충분한 경우 : 'xx의 잔액이 출금되었습니다.' 출력
else:
account -= money
print(f'{money}의 잔액이 출금되었습니다.')
# 6. 계좌 잔액 출력 : 'xx의 잔액이 남았습니다.' 출력
print(f'{account}의 잔액이 남았습니다.')
# Terminal
입금(0), 출금(1)을 입력하세요 : 1
금액을 입력하세요 : 7000
7000의 잔액이 출금되었습니다.
8000의 잔액이 남았습니다.
간단한 조건문을 한줄의 코드로 작성하는 방법
<true data> if <condition> else <false data>
# **일반 조건문**
balance, draw = 10000, 12000
if balance >= draw:
print("인출가능")
else:
print("인출불가")
# Terminal
인출불가
# **삼항 연산자로 변환**
balance, draw = 10000, 2000
result = "인출가능" if balance >= draw else "인출불가"
result
# Terminal
인출불가
특정 코드를 반복적으로 실행 → 코드 유지 보수에 좋음
while
for
break
continue
range()
enumerate()
zip()
# **문자열 세번 출력하기**
print('jupyter')
print('jupyter')
print('jupyter')
# Terminal
jupyter
jupyter
jupyter
while
무한루프에 빠지지 않도록 조심(특별한 이유가 아니라면 무한루프에서 탈출하는 코드를 중간에 넣어줘야 함)
무한루프 나오는 방법 : 런타임 → 실행 중단으로
count = 3
while count: # 조건을 확인하는 코드에 True, False가 아니면 bool() 형변환 해서 판단
print('jupyter')
count -= 1
# Terminal
jupyter
jupyter
jupyter
for
# _ : 식별자로 사용될때 사용되지 않는 식별자로 사용
for _ in [0, 1, 2]:
print('jupyter')
# Terminal
jupyter
jupyter
jupyter
range()
리스트를 만들어주는 함수
range(end)
range(start, end)
range(start, end, stride)
list(range(3)), list(range(3, 10)), list(range(3, 10, 2))
# Terminal
([0, 1, 2], [3, 4, 5, 6, 7, 8, 9], [3, 5, 7, 9])
# **range() 를 활용한 문자열 세번 출력하기**
for _ in range(3):
print('jupyter')
# Terminal
jupyter
jupyter
jupyter
# **일 ~ 토 중에 주중, 주말을 나눠서 출력하는 코드 작성하기 + 스케쥴도 추가해보기**
week = list('일월화수목금토')
for day in week:
if (day == '일') or (day == '토'):
print(day, '주말', '육아')
else:
print(day, '주중', '강의, 육아')
# Terminal
일 주말 육아
월 주중 강의, 육아
화 주중 강의, 육아
수 주중 강의, 육아
목 주중 강의, 육아
금 주중 강의, 육아
토 주말 육아
# **30세 이상의 사용자 목록 출력**
users = ['홍길동(32)', '김파이썬(27)', '정노트북(43)']
for user in users:
# print(user, int(user[-3:-1]))
if int(user[-3:-1]) >= 30:
print(user)
# Terminal
홍길동(32)
정노트북(43)
break
과 continue
break
: 반복되는 코드를 중단continue
: 아래에 있는 코드를 실행하지 않고 반복구문의 코드로 올라서 코드를 실행for data in range(10): # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
if data % 2: # 홀수 일때 True
continue
if data >= 5:
break
print(data)
# Terminal
0
2
4
# **랜덤한 숫자 먼저 맞추기 게임 만들기**
# 1. 0 ~ 9의 랜덤한 숫자 생성
import random
random_number = random.randint(0, 9)
# 2. 숫자를 입력한 횟수를 카운팅하는 변수 선언 : count
count = 0
# 3. 아래의 내용 반복 : while True:
while True:
# 3-1. 숫자를 입력 받음 : int(input())
input_number = int(input('insert number(0~9) : '))
# 3-2. 카운팅 +1 추가 : count +=
count += 1
# 3-3. 랜덤한 숫자와 입력받은 숫자가 같은지 확인 : if ==
if random_number == input_number:
# 3-4. 같으면 카운팅 횟수 출력 > 게임 종료 : print() break
print(f'count : {count}')
break
# 3-5. 다르면 up, down 출력하기
# Terminal
insert number(0~9) : 5
insert number(0~9) : 3
insert number(0~9) : 2
insert number(0~9) : 4
insert number(0~9) : 7
insert number(0~9) : 6
insert number(0~9) : 9
insert number(0~9) : 8
insert number(0~9) : 0
count : 9
# 9번 만에 맞추었음
enumerate()
반복문에서 리스트 데이터에 idx 숫자를 출력할때 사용
# **user_id와 user를 출력 코드작성하기**
users = ['홍길동(32)', '김파이썬(27)', '정노트북(43)']
idx = 0
for user in users:
print(idx, user)
idx += 1
# Terminal
0 홍길동(32)
1 김파이썬(27)
2 정노트북(43)
users, list(enumerate(users))
# Terminal
(['홍길동(32)', '김파이썬(27)', '정노트북(43)'],
[(0, '홍길동(32)'), (1, '김파이썬(27)'), (2, '정노트북(43)')])
for idx, user in enumerate(users):
print(idx, user)
# Terminal
0 홍길동(32)
1 김파이썬(27)
2 정노트북(43)
zip()
같은 인덱스의 데이터끼리 튜플로 묶어서 리스트로 출력
players = ['손흥민', '메시', '호날두']
goals = [30, 20, 10]
games = [50, 30, 40, 20]
# print(list(zip(players, goals)))
for data in zip(players, goals, games):
print(data)
# Terminal
('손흥민', 30, 50)
('메시', 20, 30)
('호날두', 10, 40)
아이폰을 구매한 고객에게 아이패드를 구매하라고 추천하는게 좋을까?
import pickle
with open('purchase_apple.pkl', 'rb') as file:
data = pickle.load(file)
data[:2]
# Terminal
[{'customer_id': 10023, 'iPhone': 1, 'iPad': 1},
{'customer_id': 10044, 'iPhone': 0, 'iPad': 1}]
# iPhone을 구매한 고객에게 iPad를 구매하라고 추천하는게 좋을까?
# P(iPad|iPhone)
# P(iPhone)
# P(iPad)
# P(iPhone & iPad)
total = len(data)
iphone = ipad = iphone_ipad = 0
for user in data:
iphone += user['iPhone']
ipad += user['iPad']
if (user['iPhone'] == 1) and (user['iPad'] == 1):
iphone_ipad += 1
total, iphone, ipad, iphone_ipad
# Terminal
(3593, 1798, 1510, 1291)
# P(iPhone) : 아이폰을 구매한 사람들
p_iphone = round(iphone / total, 4)
# P(iPad) : 아이패드를 구매한 사람들
p_ipad = round(ipad / total, 4)
# P(iPhone & iPad) : 둘 다 구매한 사람들
p_iphone_ipad = round(iphone_ipad / total, 4)
p_iphone, p_ipad, p_iphone_ipad
# 확률로 변환하기
# Terminal
(0.5004, 0.4203, 0.3593)
# P(iPad|iPhone) = P(iPad & iPhone) / P(iPhone)
# iPhone을 구매한 사람에게 iPad를 구매하라고 추천하는것이 좋을까?
round(p_iphone_ipad / p_iphone, 4)
# Terminal
0.718
→ 그냥 아이패드를 구매하는 확률보다 아이폰을 산 사람들이 아이패드를 구매할 확률이 높으니 충분히 타겟 마케팅을 진행할 만 하다고 판단할 수 있다