# 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
🐰 메소드 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