# if 조건식
# 조건식의 결과가 True일 때 실행문
# else :
# 조건식의 결과가 False일 때 실행문
num = 6
if num >= 0:
print('양수')
else:
print('음수')
2. elif 구문
🐰 세 개이상의 조건을 연결해서 사용하는 조건문
# if 조건식1 :
# 조건식1의 결과가 True일 때 실행문
# elif 조건식2 :
# 조건식1의 결과가 False이고, 조건식2의 결과가 True일 때 실행문
# elif 조건식3 :
# 조건식1, 2의 결과가 False이고, 조건식3의 결과가 True일 때 실행문
# else :
# 조건식1, 2, 3의 결과가 False일 때 실행문
# 나이를 입력받아 7살 이하면 '미취학', 8~13살이면 '초등학생', 14 ~ 16살이면 '중학생',
# 17 ~ 19살이면 '고등학생', 20살 이상이면 '성인'을 출력하는 프로그램입니다.
age = int(input('몇 살입니까? >>> ')) # int() 함수를 이용해서 정수로 변환
if age <= 7:
print('미취학')
elif age <= 13:
print('초등학생')
elif age <= 16:
print('중학생')
elif age <= 19:
print('고등학생')
else:
print('성인')
📌 else 구문과 elif 구문은 이전의 조건이 맞지 않을 때 넘어오는 부분
➡️ 이미 제외된 조건을 한번 더 검사할 필요 없기 때문에 위의 예제와 같이 간단하게 표현 가능
3. pass 키워드
🐰 프로그래밍을 하다 보면 전체 골격을 잡아 놓고 내부에서 처리할 내용은 나중에 채워넣는 경우가 있음
➡️ 이런 경우 if 조건문에 구현 내용을 아무 것도 적어 놓지 않으면 error가 발생함
➡️ 이때'곧 개발하겠음' 이라는 의미로 'pass' 키워드를 넣어주면 error가 발생하지 않는다
# pass 키워드를 사용한 미구현 부분 입력
num = int(input('정수 입력 >>> '))
if num > 0:
# 양수일 때 : 미구현 상태
pass
else:
# 음수일 때 : 미구현 상태
pass
💡 raise NotImplementedError
- 아직 구현하지 부분이라는 의미의 오류를 강제로 발생하게 함
num = int(input('정수 입력 >>> ')
if num > 0:
# 양수일 때
raise NotImplemetedError
else:
# 음수일 때
raise NotImplementedError
# True나 False 모두 첫 글자는 반드시 대문자로 작성
# 파이썬에는 False는 값이 없는 모든 경우를 의미. 숫자0, 빈 문자열'', 빈 리스트[] 등은 모두 False로 인식
print(bool(0)) # False
print(bool('')) # False
print(bool([])) # False
print(type(True)) # <class 'bool'>
print("가방" == "가방") # True
print("가방" < "하마") # True
📌 문자열도 비교 연산자 적용 가능하다. 사전 순서로 '가방'이 '하마'보다 앞에 있기 때문에 작은 값이다.
a = 10
b = 0
print('not {} : {}'.format(a, not a)) # False
print('not {} : {}'.format(b, not b)) # True
📌 and 연산자와 or 연산자
[ and 연산자 ]
좌변
우변
결과
True
True
True
True
False
False
False
True
False
False
False
False
[ or 연산자 ]
좌변
우변
결과
True
True
True
True
False
True
False
True
True
False
False
False
a = 10
b = 0
print('{} > 0 and {} > 0 : {}'.format(a, b, a > 0 and b > 0)) # False
print('{} > 0 or {} > 0 : {}'.format(a, b, a > 0 or b > 0)) # True
2. if 조건문
👩🏻💻 파이썬에서 if 조건문은 조건에 따라 코드를 실행하거나, 실행하지 않게 만들고 싶을 때 사용
👩🏻💻 이렇게 조건을 기반으로 실행의 흐름을 변경하는 것을 '조건 분기'라고 함
# 기본적인 구조
if 불 값이 나오는 표현식:
# if 조건문 뒤에 반드시 콜론(:)을 붙인다
불 값이 참일 때 실행할 문장
# 4칸 들여쓰기 한다 -> 들여쓰기 안하면 오류 발생!
num = 15
if num > 0:
print('양수') # 조건식이 True라서 실행이 됨
if True:
print('양수')
if False:
print('양수')
💡 들여쓰기 indentation 규칙
a. 공백 space이나 탭 tab을 이용하여 들여쓰기를 수행. b. 공백의 개수는 상관이 없음 c. 탭은 1개만 사용 d. 동일 구역에서 들여쓰기는 통일해야 함. 공백과 탭을 혼용하여 사용할 수 없고 들여쓰기 수준도 동일해야 함 e. 주로 사용하는 들여쓰기는 공백 4개, 공백 2개, 탭 1개.
if num > 0: print('양수') # 실행문이 하나면 한 줄 코드로 가능
3. 짝수와 홀수 구분
# 입력 받기
num = input('정수 입력 >>> ')
# 마지막 자리 숫자 추출
last_num = num[-1]
# 짝수 확인
if last_num in '02468':
print('짝수입니다.')
# 홀수 확인
if last_num in '13579':
print('홀수입니다.')
# 나머지 연산자 활용 예제
# 임의의 정수를 입력받은 뒤 해당 값이 3의 배수인지 아닌지 판별하는 프로그램을 구현하세요
'''
실행 예)
정수를 입력하세요 >>> 14
14는 3의 배수가 아닙니다.
---------------------
정수를 입력하세요 >>> 15
15는 3의 배수입니다.
'''
num = int(input('정수를 입력하세요 >>> '))
if (num % 3) == 0:
print(f'{num}는 3의 배수입니다.')
else:
print(f'{num}는 3의 배수가 아닙니다.')
print(f'{num}는 3의 {"배수입니다."if (num % 3) == 0 else "배수가 아닙니다."}')
# 1) del 키워드
del 리스트명[인덱스]
del 리스트명[시작_인덱스:종료_인덱스:증감값] # 범위 지정해 한꺼번에 제거, 종료 인덱스는 포함 x
# 2) pop()
리스트명.pop(인덱스)
# del 키워드로 제거
my_list = ['apple', 'banana']
del my_list[0]
print(my_list) # 결과 : ['banana']
# pop()으로 제거
# 리스트의 마지막 요소가 반환되면서 삭제
my_list = ['apple', 'banana']
item = my_list.pop()
print(item) # 결과 : banana
print(my_list) # 결과 : ['apple']
# 인덱스 값을 인수로 전달하면 해당 인덱스 값이 삭제
my_list = ['apple', 'banana']
item = my_list.pop(0)
print(item) # 결과 : apple
print(my_list) # 결과 : ['banana']
2) 값으로 제거 : remove()
👾 값을 지정해서 제거하는 함수
리스트.remove(값)
# 인수로 전달된 값과 동일한 요소를 찾아서 제거. 동일한 요소가 여러 개인 경우에는 첫 번째 요소가 제거
my_list = ['apple', 'banana', 'cherry', 'mango']
my_list.remove('cherry')
print(my_list) # ['apple', 'banana', 'mango']
# 중복된 값이 있는 경우 제일 앞에 있는 것만 삭제
my_list = ['apple', 'banana', 'cherry', 'mango', 'cherry']
my_list.remove('cherry')
print(my_list) # ['apple', 'banana', 'mango', 'cherry']
# 특정 값을 전부 삭제를 원할 경우 반복문 사용.
my_list = ['apple', 'banana', 'cherry', 'mango', 'cherry']
for idx in range(my_list.count('cherry')):
my_list.remove('cherry')
print(my_list) # ['apple', 'banana', 'mango']
🐰 메소드 method란 특정 객체 object가 가지고 있는 함수 function을 의미 🐰 함수는 독립적으로 호출할 수 있지만, 메소드는 특정 객체를 통해서만 호출할 수 있음
함수()
객체.메소드() : 점(.) 연산자 사용
객체 -> 메소드() php, c
1) count()
👩🏻🚀 문자열 내부에 포함된 특정 문자열의 개수를 반환하는 메소드
s = '내가 그린 기린 그림은 목 긴 기린 그림이고, 네가 그린 기린 그림은 목 짧은 기린 그림이다.'
print(s.count('기린')) # 4
# 인덱스를 지정해서 범위를 지정할 수 있음
s = 'best of best'
print(s.count('best',5)) # 1 / 인덱스 5번 부터 검색
# 마이너스 인덱스를 사용할 수 있음
s = 'best of best'
print(s.count('best', -7)) # 1 / o부터 검색
2) find()
👩🏻🚀 문자열 내부에 포함된 특정 문자열을 찾고자 할 때 사용 👩🏻🚀 찾고자 하는 문자열이 있으면 그 문자열이 처음으로 나온 위치 즉 인덱스 index를 반환
🐰 find(): 왼쪽부터 찾아서 처음 등장하는 위치를 찾는다
🐰 rfind(): 오른쪽부터 찾아서 처음 등장하는 위치를 찾는다
s = 'apple'
print(s.find('p')) # 1
# 찾는 문자열이 없는 경우 -1 반환
s = 'apple'
print(s.find('z')) # -1
if s.find('z') == -1:
print(s)
# 인덱스를 이용해서 검색할 범위를 지정 가능
# 시작할 인덱스를 지정하지 않는 경우에는 문자열의 처음부터 찾고, 시작할 인덱스를 지정하는 경우 지정된 인덱스부터 찾음
s = 'best of best'
print(s.find('best')) # 0
print(s.find('best',5)) # 8
# find() 메소드와 찾는 방향이 다른 rfind() 메소드
# right와 find를 합친 이름으로 오른쪽부터 찾음
s = 'best of best'
print(s.find('best')) # 8
📌 문자열은 0번째 부터 시작, 결과는 해당 글자가 위치한 인덱스를 찾아 리턴함
📌 찾는 문자열이 없는 경우 -1 반환
3) index()
👩🏻🚀 find() 메소드와 같은 역할을 수행하며 사용방법도 동일. 두 메소드의 차이점은 문자열이 없을 때 발생 👩🏻🚀 find() 메소드는 찾는 문자열이 없는 경우 -1을 반환, index() 메소드는 오류 발생
s = 'apple'
print(s.index('p')) # 1
print(s.index('z')) # ValueError : substring not found
4) upper() / lower() / capitalize()
👩🏻🚀 upper : 모두 대문자로 변환한 결과를 반환
👩🏻🚀 lower: 모두 소문자로 변환한 결과를 반환
👩🏻🚀 capitalize: 첫 글자는 대문자로 변환하고 나머지는 소문자로 변환한 결과를 반환
s = 'Best of best'
print(s.upper()) # BEST OF BEST
print(s.lower()) # best of best
print(s.capitalize()) # Best of best
5) join()
👩🏻🚀 인수로 전달한 반복가능객체(문자열, 리스트 등)의 각 요소 사이에 문자열을 포함시켜 새로운 문자열을 만들고 그 결과를 반환
문자열.join(문자열로 구성된 리스트)
print('-'.join('python')) # p-y-t-h-o-n
print('+'.join(['a', 'b', 'c', 'd', 'e'])) # a+b+c+d+e
# 포함하는 문자 없이 단순하게 리스트의 요소들을 연결하고자 한다면 빈 문자열 사용
print(' '.join(['x', 'y', 'z'])) # x y z
a = {'a': 'apple', 'b': 'banana'}
print(''.join(a)) # ab / 딕셔너리의 경우 key를 연결
6) split()
👩🏻🚀 문자열을 '특정한 문자'로 자를 때 사용하는 함수
s = 'Life is too short'
s2 = s.split() # split() 메소드에 아무 인수도 전달하지 않으면 공백문자를 기준으로 각 문자열이 분리
print(s2) # ['Life', 'is', 'too', 'short']
s = '010-1234-5678'
s2 = s.split('-') # 공백대신 특정 문자열을 기준으로 분리하는 방법
print(s2) # ['010', '1234', '5678']
7) replace()
👩🏻🚀 문자열의 일부 문자열을 다른 문자열로 바꾼 결과를 반환
s = 'Life is too short'
s2 = s.replace('short', 'long')
print(s2) # Life is too long
# 특정 문자열을 제거하기 위한 용도로 사용
s = '010-1234-5678'
s2 = s.replace('-', '')
print(s2) #01012345678
8) strip()
strip()
문자열 양옆의 공백을 제거
lstrip()
문자열 왼쪽의 공백을 제거
rstrip()
문자열 오른쪽의 공백을 제거
s = ' apple'
print(len(s)) # 10
s2 = s.lstrip()
print(s2) # apple
print(len(s2)) # 5
👩🏻💻 숫자를 문자열로 변환하는 함수로 중괄호{}를 포함한 문자열 뒤에 마침표(.)를 찍고 format() 함수를 사용
▶️ 중괄호 개수와 format() 함수 괄호 안 매개변수의 개수는 반드시 같아야 함
"{}".format(10)
"{} {}".format(10,20)
📌 위의 구문과 같이 앞쪽에 있는 문자열 {} 기호가 format() 함수 괄호 안에 있는 매개 변수로 차례로 대치되면서 숫자가 문자열로 되는 것
zipcode = '06236'
print('우편번호 : {}'.format(zipcode)) # format() 메서드를 이용해 출력
# 결과) 우편번호 : 06236
zipcode_str = '우편번호 : {}'.format(zipcode)
print(zipcode_str)
# 결과) 우편번호 : 06236
address = '''서울특별시 강남구
테헤란로 146''' # multi line
print('주소 : {addr}'.format(addr=address)) # format() 메서드의 변수 이용
# 결과) 주소 : 서울특별시 강남구
# 테헤란로 146
📌 {} 기호의 개수가 format() 함수의 매개변수 개수보다 많으면 IndexError 예외가 발생
2. format() 함수의 다양한 기능
1) 정수 출력의 다양한 형태
# 정수를 특정 칸에 출력하기
# 정수
num_a = "{:d}".format(52)
# 특정 칸에 출력하기
num_b = "{:5d}".format(52) # 5칸
num_c = "{:10d}".format(52) # 10칸
# 빈칸을 0으로 채우기
num_d = "{:05d}".format(52) # 양수
num_e = "{:05d}".format(-52) # 음수
print('# 기본')
print(num_a)
print('# 특정 칸에 출력하기')
print(num_b)
print(num_c)
print('# 빈칸을 0으로 채우기')
print(num_d)
print(num_e)
📌 {:d}는 int 자료형의 정수를 출력하겠다고 직접적으로 지정하는 것
➡️ 매개변수로 정수만 올 수 있다.
📌 {:5d}는 5칸을 빈칸으로 잡고 뒤에서부터 52라는 숫자를 채운다.
📌 {:05d}는 5칸을 잡고 뒤에서부터 52라는 숫자를 넣은 후 앞의 빈곳을 0으로 채운다.
➡️ 부호가 있을 때는 맨 앞자리를 부호로 채우고 나머지 빈 곳을 0으로 채움
# 기호와 함께 출력하기
num_a = "{:+d}".format(33) # 양수
num_b = "{:+d}".format(-33) # 음수
num_c = "{: d}".format(33) # 양수: 기호 부분 공백
num_d = "{: d}".format(-33)# 음수: 기호 부분 공백
print("# 기호와 함께 출력하기")
print(num_a)
print(num_b)
print(num_c)
print(num_d)
📌 {:+d} 와 같이 d앞에 +기호를 붙이면 양수와 음수 기호를 표현할 수 있다.
📌 {: d} 처럼 앞에 공백을 두어 기호 위치를 비워주면 함수에 입력한 기호가 표현된다.
# < : 지정된 공간 내에서 왼쪽 정렬
# > : 지정된 공간 내에서 오른쪽 정렬
# ^ : 지정된 공간 내에서 가운데 정렬
# 10d는 10자리의 필드 폭을 의미
print("10자리 폭 왼 쪽 정렬 '{:<10d}'".format(123))
# 10자리 폭 왼 쪽 정렬 '123 '
print("10자리 폭 오른 쪽 정렬 '{:>10d}'".format(123))
# 10자리 폭 오른 쪽 정렬 ' 123'
print("10자리 폭 가운데 정렬 '{:^10d}'".format(123))
# 10자리 폭 가운데 정렬 ' 123 '
print()
# 채움문자를 지정하면 공백 대신 채움문자가 빈자리를 채움
print("10자리 폭 왼 쪽 정렬 채움문자 '{:*<10d}'".format(123))
# 10자리 폭 왼 쪽 정렬 채움문자 '123*******'
print("10자리 폭 오른 쪽 정렬 채움문자 '{:*>10d}'".format(123))
# 10자리 폭 오른 쪽 정렬 채움문자 '*******123'
print("10자리 폭 가운데 쪽 정렬 채움문자 '{:*^10d}'".format(123))
# 10자리 폭 가운데 쪽 정렬 채움문자 '***123****'
# 조합하기
num_a = "{:+5d}".format(33) # 기호를 뒤로 밀기: 양수
num_b = "{:+5d}".format(-33) # 기호를 뒤로 밀기: 음수
num_c = "{:=+5d}".format(33) # 기호를 앞으로 밀기: 양수
num_d = "{:=+5d}".format(-33) # 기호를 앞으로 밀기: 음수
num_e = "{:+05d}".format(33) # 0으로 채우기: 양수
num_f = "{:+05d}".format(-33) # 0으로 채우기: 음수
print("# 조합하기")
print(num_a)
print(num_b)
print(num_c)
print(num_d)
print(num_e)
print(num_f)
📌 기호와 공백을 조합할 때 '=' 기호를 앞에 붙일 수 있다.
➡️ 5칸의 공간을 잡았을 때 기호를 빈칸 앞에 붙일 것인지, 숫자 앞에 붙일 것인지 지정
# 부동 소수점 출력의 다양한 형태
num_a = "{:f}".format(12.345)
num_b = "{:15f}".format(12.345) # 15칸 만들기
num_c = "{:+15f}".format(12.345) # 15칸에 부호 추가하기
num_d = "{:+015f}".format(12.345) # 15칸에 부호 추가하고 0으로 채우기
print(num_a)
print(num_b)
print(num_c)
print(num_d)
👩🏻💻 문자열 앞에 'f'를 붙여서 만드는데, 문자열 내부에 표현식을 {} 괄호로 감싸서 삽입할 수 있다.
f'문자열{표현식}문자열'
who = 'you'
how = 'happy'
print(f'{who} make me {how}') # you make me happy / 문자열에 f 또는 F라는 접두어 prefix를 붙임
age = 25
print(f'내년엔 {age + 1}살이 됩니다.') # 내년엔 26살이 됩니다.
📌 format() 함수보다 간단하고 직관적이라 대부분 f-문자열을 사용하는 편
💡 format() 함수를 사용하는 것이 더 좋은 경우
a) 문자열 내용이 너무 많을 때
- f-문자열을 사용하면 어떤 데이터를 삽입하여 출력하는지 확인하기 위해 문자열을 모두 읽어야 하는 문제가 있다.
# TypeError가 발생하는 경우
string = "문자열"
number = 273
string + number
5. 변수
👩🏻💻 변수는 값을 저장할 때 사용하는 식별자
👩🏻💻 파이썬에서 pi를 변수라고 하며 숫자 뿐만 아니라 모든 자료형을 저장
1) 변수를 활용하는 방법
a. 변수를 선언 및 값 할당
# 변수 선언
pi = 3.14159265
'''
여기서 기호 '='는 같다는 의미가 아닌 우변의 값을
좌변에 '넣겠다', '할당하겠다'를 의미
'''
b. 변수 참조
- 변수에서 값을 꺼내는 것을 의미
# 변수 참조
2 * pi * r
'''
3.14159265 값을 직접 쓰지 않고
pi를 써서 안에 들어있는 값을 사용
'''
💡 파이썬은 다른 프로그래밍 언어와 달리 변수에 자료형 지정 x
name = 'Alice' # single line 문자열 저장
age = 25 # 정수를 저장
address = '''
우편번호 12345
서울시 영등포구 여의도동
서울빌딩 501호
''' # multiple line 문자열 저장
boyfriend = None # 아무 값도 저장하지 않음
height = 168.5 # 실수를 저장
print(name) # Alice
print(age) # 25
print(address)
#우편번호 12345
서울시 영등포구 여의도동
서울빌딩 501호
print(boyfriend) # None
print(height) # 168.5
6. 복합 대입 연산자
연산자 이름
설명
+=
숫자 덧셈 후 대입
-=
숫자 뺄셈 후 대입
*=
숫자 곱셈 후 대입
/=
숫자 나눗셈 후 대입
%=
숫자의 나머지를 구한 후 대입
**=
숫자 제곱 후 대입
c = 10
c = c + 10
print(c) # 20
c += 10
print(c) # 30
c -= 10
print(c) # 20
c //= 10
print(c) # 2
c *= 10
print(c) # 20