기본 미션 : p. 187 3번 문제 풀고 본인이 태어난 해와 띠를 출력하는 결과값 화면 인증하기
선택 미션 : else 구문과 elif 구문 정리한 내용 포스팅하기
이번주는 수련회를 가게 되어서 시간이 조금 촉박하다..
그래도 파이썬은 비교적 간단한 것 같아서 배움에 있어서 재미가 있기에 계속 열심히 하고자 하는 마음인 것 같다.
변수
: 값을 저장할 때 사용하는 식별자
변수는 숫자뿐만 아니라 모든 자료형을 저장할 수 있다.
간단하게 변수 만들기부터 해보도록 하자.
pi
라는 이름의 저장 공간에 3.141592
를 넣고 pi
라는 이름을 호출해보자.
>>> pi = 3.141592
>>> pi
3.141592
pi
저장공간에 있는 값을 꺼내 출력이 된 모습을 볼 수 있다.
이제는 변수를 활용하는 방법에 대해 알아보도록 하자.
변수를 생성하는 것
을 의미한다. 어떠한 변수를 선언한다
는 것은 사용하겠다
라고 선언하는 것을 의미한다.
변수에 값을 넣는 것
을 의미한다.
변수 = 값 #값을 변수에 할당합니다.
이 때 =
기호는 같다라는 의미가 아니라 우변의 값을 좌변에 넣겠다
, 할당하겠다
라는 뜻이다.
변수에서 값을 꺼내는 것
을 의미한다.
>>> pi = 3.14
위처럼 pi
라는 저장공간에 3.14
가 들어있다면 pi
라고 쓰면 이 안에 들어 있는 값을 쓰겠다는 의미가 된다.
이처럼 변수 안에 있는 값을 사용하는 것을 변수 참조
라고 한다.
변수를 참조할 때
는 참조할 위치에서 변수 이름을 아래와 같이 써주면 된다.
변수
변수 + 변수
print(변수)
그렇다면 앞서 배운 내용을 이용해pi
에 저장한 값을 이용해 원의 둘레와 넓이를 구해보자.
소스코드 varialbe.py
# 변수 선언과 할당
pi = 3.14159265
r = 10
# 변수 참조
print("원주율 =", pi)
print("반지름 =", r)
print("원의 둘레 =", 2 * pi * r)
print("원의 넓이 =", pi * r * r)
: 기존의 연산자와 조합해서 사용할 수 있는 연산자
복합 대입 연산자는 자료형에 적용하는 기본 연산자
와 = 연산자
를 함께 사용해 다음과 같이 구성하는 연산자이다.
a += 10
위와 같이 a += 10
은 a = a + 10
이라고 하는 것과 같은 결과를 낸다.
연산자 이름 | 설명 |
---|---|
+= | 숫자 덧셈 후 대입 |
-= | 숫자 뺄셈 후 대입 |
*= | 숫자 곱셈 후 대입 |
/= | 숫자 나눗셈 후 대입 |
%= | 숫자의 나머지를 구한 후 대입 |
**= | 숫자 제곱 후 대입 |
간단한 예제를 살펴보자.
>>> number = 100
>>> number += 10
>>> number += 20
>>> number += 30
>>> print("number :", number)
number : 160
연산자 이름 | 설명 |
---|---|
+= | 문자열 연결 후 대입 |
*= | 문자열 반복 후 대입 |
문자열 복합 대입 연산자
를 활용한 예제도 살펴보자.
>>> string = "안녕하세요"
>>> string += "!"
>>> string += "!"
>>> print("string :", string)
string : 안녕하세요!!
input()
파이썬은 명령 프롬프트에서 사용자로부터 데이터를 입력받을 때 input()
함수를 사용한다.
input()
함수로 사용자 입력받기사용자로부터 데이터를 입력받을 때는 다음 코드를 입력한다.
>>> input("인사말을 입력하세요> ")
이때, input
함수 괄호 안에 입력한 내용을 프롬프트 문자열
이라고 하며, 사용자에게 입력을 요구하는 안내 내용을 의미한다.
실행하면 인사말을 입력하세요>
라는 문자열이 뜨고 프로그램이 실행 도중 잠시 멈추게 되는데 이것을 블록 block
이라고 한다.
프롬프트 문자열
옆에 안녕하세요
등의 글자를 입력하고 Enter키
를 누르면
인사말을 입력하세요> 안녕하세요 (Enter)
'안녕하세요'
이렇게 입력한 내용은 input()
함수의 결과로 나오는데 이 값은 다른 변수에 대입해서 사용할 수도 있다. print()
함수를 이용해 변수에 제대로 대입되었는지를 확인해보자.
>>> string = input("인사말 입력 :")
인사말 입력 : 안녕하세요 (Enter)
>>> print(string)
안녕하세요
위와 같이 input()
함수의 결과로 나오는 값을 리턴값
이라고 한다.
input()
함수의 입력 자료형앞서 대입한 input()
함수의 결과값의 자료형이 어떻게 되는지 살펴보자. 자료형은 type()
함수로 알아볼 수 있다.
>>> print(type(string))
<class 'str'>
string
변수에는 문자열을 입력해 대입했으니 당연히 자료형도 문자열
이 나오는 모습이다.
하지만 유의할 점은 사용자가 입력한 정수
나 불 boolean
값도 type()
함수를 사용하여 자료형을 확인하면 모두 무조건 문자열
자료형이 나온다.
input() 함수는 사용자가 무엇을 입력해도 결과는 무조건 문자열 자료형
이니 이 점을 유의하도록 하자.
소스 코드 input.py
# 입력을 받습니다.
string = input("입력> ")
# 출력합니다.
print("자료:", string)
print("자료형:", type(string))
한 마디로 숫자를 입력해도 문자열로 들어온다는 의미이다.
소스 코드 input_error.py
# 입력
string = input("입력: ")
# 출력
print("입력 + 100:", string + 100)
따라서 입력받은 값과 숫자를 더하는 코드를 작성하고 싶다고 위와 같이 작성하면 다음과 같은 에러가 난다.
입력받은 문자열을 숫자로 변환해야 연산에 활용할 수 있다.
그렇다면 어떻게 문자열을 숫자로 바꿀 수 있을까?
자료형을 바꾸는 것은 영어로 캐스트 cast
라고 부른다.
문자열을 숫자로 변환할 때는 다음과 같은 함수를 사용한다.
int()
함수 : 문자열
을 int(정수형)
자료형으로 변환한다.float()
함수 : 문자열을 float(실수형 또는 부동 소수점)
자료형으로 변환한다.간단한 예제를 살펴보자.
int()
함수 활용하기소스 코드 int_convert.py
string_a = input("입력A> ")
int_a = int(string_a)
string_b = input("입력B> ")
int_b = int(string_b)
print("문자열 자료:", string_a+string_b)
print("숫자 자료:", int_a+int_b)
이제는 이전 절에서 살펴보았던 input()
함수와 함께 조합하면 입력을 받아 숫자 연산을 하는 프로그램을 짤 수 있다.
int()
함수와 float()
함수 조합하기소스코드 int_float02.py
input_a = float(input("첫 번째 숫자> "))
input_b = float(input("두 번째 숫자> "))
print("덧셈 결과:", input_a + input_b)
print("뺄셈 결과:", input_a - input_b)
print("곱셈 결과:", input_a * input_b)
print("나눗셈 결과:", input_a / input_b)
덧셈, 뺄셈, 곱셈에서 의미 없는 소수점을 출력하고 싶지 않다면 관련된 내용은 뒤에서 다루도록 하자.
ValueError
예외자료형을 변환할 때 변환할 수 없는 것
을 변환하려고 하면 위와 같은 예외가 발생하게 된다.
int("안녕하세요")
float("안녕하세요")
문자열은 int()
float()
함수로 변환할 수 없는 값이기에 오류를 발생시킨다.
int()
함수로 변환하려고 할 때int("52.273")
int
는 정수형
인데 부동 소수점이 있는 자료를 정수형으로 바꾸라고 하면 오류가 발생한다.
만약 정수와 실수 구분이 힘들다면 float()
함수를 일단 사용한다고 기억하자. int()
는 실수를 정수로 변환할 수 없지만 float()
함수가 의미하는 실수는 정수도 포함하고 있기 때문에 정수, 실수 구분없이 사용할 수 있다.
문자열을 숫자로 변환하는 것처럼 숫자를 문자열로 변환하는 것도 가능하다.
문자열로 변환하는 방법은 매우 다양하나 여기서는 str()
함수와 뒤에서는 format()
함수를 활용하는 방법을 살펴보겠다.
str()
함수str()
함수는 다른 자료형의 값을 str()
함수의 매개변수에 넣으면 문자열로 변환된다.
str(다른 자료형)
예제를 살펴보자.
str()
함수를 사용해 숫자를 문자열로 변환하기소스 코드 str.py
output_a = str(52)
output_b = str(52.345)
print(type(output_a), output_a)
print(type(output_b), output_b)
숫자 52
와 52.345
가 str()
함수에 의해 문자열로 변환된 모습이다.
inch
단위를 cm
단위로 변경하기 (누적 예제)지금까지 배운 내용을 활용해 첫 프로그램을 작성해보자.
1 inch == 2.54cm
inch
단위를 cm
단위로 변경하기소스 코드 inch_to_cm.py
# 입력
raw_input = input("inch 단위의 숫자를 입력해주세요: ")
# 처리
inch = int(raw_input)
cm = inch * 2.54
# 출력
print(inch, "inch는 cm 단위로 ", cm,"cm입니다.")
변수 선언
은 변수를 생성하는 것을 의미하고, 변수 할당
은 변수에 값을 넣는 것을 의미한다.변수 참조
는 변수에서 값을 꺼내는 것을 의미한다.input()
함수는 명령 프롬프트에서 사용자로부터 데이터를 입력받을 때 사용한다.int()
함수는 문자열을 int
자료형으로 변환하고 float()
함수는 문자열을 float
자료형으로 변환한다.str()
함수는 숫자를 문자열로 변환한다.format()
함수format()
함수로 숫자를 문자열로 변환하는 몇 가지 형태를 살펴보자.
format()
함수는 문자열리 가지고 있는 함수이다. 중괄호 {}
를 포함한 문자열 뒤에 마침표 .
를 찍고 format()
함수를 사용하는데, 중괄호의 개수와 format()
함수 괄호 안 매개변수의 개수는 반드시 같아야 한다.
"{}".format(10)
"{} {}".format(10, 20)
"{} {} {} {} {}".format(101, 102, 103, 104, 105)
이렇게 함수를 사용하면 앞쪽의 문자열의 {}
기호가 format()
함수 괄호 안에 있는 매개변수로 차례로 대치되며 숫자가 문자열이 되게 된다.
format()
함수로 숫자를 문자열로 변환하기소스코드 format_basic.py
# format() 함수로 숫자를 문자열로 변환하기
string_a = "{}".format(10)
# 출력하기
print(string_a)
print(type(string_a))
이제 한 단계 더 나아가 {}
기호 양쪽에 다른 문자열을 같이 넣은 형태, {}
기호와 매개변수를 여러 개 넣은 형태를 실행해보자.
format()
함수의 다양한 형태소스코드 format01.py
# format() 함수로 숫자를 문자열로 변환하기
format_a = "{}만원".format(5000)
format_b = "파이썬 열공하여 첫 연봉 {}만 원 만들기 ".format(5000)
format_c = "{} {} {}".format(3000, "문자열", True)
# 출력
print(format_a)
print(format_b)
print(format_c)
어디 부분이든 {}
가 있는 곳에 문자열이 들어가는 모습이다.
IndexError
예외{}
기호의 개수가 format()
함수의 매개변수 개수보다 많으면
IndexError
예외가 발생한다.
{}
기호의 개수가 format()
함수의 매개변수 개수보다 적으면
예외가 발생하지 않는다.
format()
함수의 다양한 기능format()
함수는 숫자와 관련해서 다양한 기능을 가지고 있다.
format()
함수를 사용하면 출력할 정수에 기호
를 넣어주거나, 숫자 형태를 다양하게
출력할 수 있다.
소스코드 format02.py
# 정수
output_a = "{:d}".format(52)
# 특정 칸에 출력하기
output_b = "{:5d}".format(52) # 5칸
output_c = "{:10d}".format(52)# 10칸
# 빈칸을 0으로 채우기
output_d = "{:05d}".format(52) # 양수
output_e = "{:05d}".format(-52)# 음수
print("# 기본")
print(output_a)
print("# 특정 칸에 출력하기")
print(output_b)
print(output_c)
print("# 빈칸을 0으로 채우기")
print(output_d)
print(output_e)
{:d}
는 int
자료형의 정수
를 출력하겠다고 직접적으로 지정하는 것이다.
{:5d}
라고 입력하면 5
칸을 빈 칸으로 잡고 뒤에서부터 52
라는 숫자를 채우게 된다. {:10d}
도 마찬가지로 10
칸을 빈칸으로 잡고 뒤에서부터 채운다.
{:05d}
라고 지정하면 5
칸을 잡고 뒤에서부터 52
라는 숫자를 넣은 후 앞의 빈 곳을 0
으로 채우겠다는 말이다. 만약 부호가 있을 경우 맨 앞자리
를 부호로 채우고 나머지 빈 곳을 0
으로 채운다.
기호와 관련된 예제를 살펴보자.
소스코드 format03.py
# 기호와 함께 출력하기
output_f = "{:+d}".format(52) # 양수
output_g = "{:-d}".format(52) # 음수
output_h = "{: d}".format(52) # 양수
output_i = "{: d}".format(-52) # 음수
print("# 기호와 함께 출력하기")
print(output_f)
print(output_g)
print(output_h)
print(output_i)
{:+d}
처럼 d
앞에 기호를 붙이면 양수
와 음수
기호를 표현할 수 있다.
{: d}
처럼 d
앞에 공백을 두어 기호 위치를 비우면 함수에 입력한 기호
가 표현된다.
그럼 이와 같은 정수 출력을 조합해 확인해보자.
소스코드 format04.py
# 조합하기
output_h = "{:+5d}".format(52) # 기호를 뒤로 밀기: 양수
output_i = "{:+5d}".format(-52) # 기호를 뒤로 밀기: 음수
output_j = "{:=+5d}".format(52) # 기호를 앞으로 밀기: 양수
output_k = "{:=+5d}".format(-52)# 기호를 앞으로 밀기: 음수
output_l = "{:+05d}".format(52) # 0으로 채우기: 양수
output_m = "{:+5d}".format(-52) # 0으로 채우기: 음수
print("# 조합하기")
print(output_h)
print(output_i)
print(output_j)
print(output_k)
print(output_l)
print(output_m)
기호와 공백을 조합할 때는 =
기호를 앞에 붙일 수 있다. 이는 5
칸의 공간을 잡았을 때 기호를 빈칸 앞에 붙일 것인지
, 숫자 앞에 붙일 것인지
지정하는 기호이다.
조합순서가 달라지면 출력이 이상하게 된다. 예를 들어 {:=+05d}
를 {:=0+5d}
처럼 입력하면 전혀 다른 형태가 나오므로 주의하기 바란다.
# 조합하기
#output_n = "{:=+05d}".format(52)
output_o = "{:=0+5d}".format(52)
print("# 조합하기")
#print(output_n)
print(output_o)
이번에는 소수점
이 들어가는 float
자료형의 숫자에 대해서 알아보도록 하자.
float
자료형 출력을 강제로 지정할 때에는 {:f}
를 사용한다. 그리고 방금 배웠던 형태들을 적용할 수 있다.
소스코드 format05.py
output_a = "{:f}".format(52.273)
output_b = "{:15f}".format(52.273) # 15칸 만들기
output_c = "{:+15f}".format(52.273) # 15칸에 부호 추가하기
output_d = "{:+015f}".format(52.273) # 15칸에 부호 추가하고 0으로 채우기
print(output_a)
print(output_b)
print(output_c)
print(output_d)
추가로 부동 소수점의 경우는 소수점 아래 자릿수를 지정하는 기능
이 있다. 다음 코드처럼 .
을 입력하고 뒤에 몇 번째 자릿수까지 표시할지 지정하면 된다.
소스코드 format06.py
output_a = "{:15.3f}".format(52.273)
output_b = "{:15.2f}".format(52.273)
output_c = "{:15.1f}".format(52.273)
print(output_a)
print(output_b)
print(output_c)
이렇게 소수점을 각각 3
2
1
자리로 출력한다. 이 때 자동으로 반올림이 일어난다.
의미없는 0
을 제거하고 싶을 때는 {:g}
를 사용한다.
소스코드 format07.py
output_a = 52.0
output_b = "{:g}".format(output_a)
print(output_a)
print(output_b)
upper()
과 lower()
upper()
함수: 소문자 -> 대문자
>>> a = "Hello Python Programming...!"
>>> a.upper()
'HELLO PYTHON PROGRAMMING...!'
변수 a
에 저장된 문자열의 알파벳을 모두 대문자로 만든 모습이다.
lower()
함수: 대문자 -> 소문자
>>> a.lower()
'hello python programming...!'
변수 a
에 저장된 문자열의 알파벳이 모두 소문자로 변경된 모습이다.
upper()
함수와 lower()
함수를 사용한다고 a
문자열의 원본은 절대로 바뀌지 않는다. 이렇게 원본을 변화시키지 않는 함수를 비파괴적 함수
라고 하고, 이와 반대되는 함수는 파괴적 함수
라고 부른다. 후에 알아볼 것이다.
strip()
strip()
함수 : 문자열 양옆의 공백을 제거lstrip()
함수 : 왼쪽의 공백을 제거rstrip()
함수 : 오른쪽의 공백을 제거이 때 공백이란 띄어쓰기
탭
줄바꿈
모두를 포함한다.
>>> input_a = """
안녕하세요
문자열의 함수를 알아봅니다
"""
>>> print(input_a)
안녕하세요
문자열의 함수를 알아봅니다
이렇게 의도하지 않은 줄바꿈 및 양옆의 공백을 strip()
함수를 이용하면
>>> print(input_a.strip())
안녕하세요
문자열의 함수를 알아봅니다
이렇게 불필요한 공백이 제거된다.
isOO()
문자열이 소문자
, 알파벳
, 숫자
로만 구성되어 있는지 등을 확인할 때는 is
로 시작하는 이름의 함수를 사용한다.
isalnum()
: 문자열이 알파벳
또는 숫자
로만 구성되어 있는가isalpha()
: 문자열이 알파벳
으로만 구성되어 있는가isidentifier()
: 문자열이 식별자
로 사용할 수 있는 것인가isdecimal()
: 문자열이 정수 형태
인가isdigit()
: 문자열이 숫자로 인식
될 수 있는가isspace()
: 문자열이 공백으로만
구성되어 있는가islower()
: 문자열이 소문자로만
구성되어 있는가isupper()
: 문자열이 대문자로만
구성되어 있는가간단하게 몇 가지만 예시로 들어보자.
>>> print("TrainA10".isalnum()) # 알파벳 또는 숫자
True
>>> print("10".isdigit()) # 숫자로 인식
True
find()
와 rfind()
문자열 내부에 특정 문자가 어디에 위치하는지 확인할 때 사용하는 함수이다.
find()
: 왼쪽
부터 찾아서 처음 등장하는 위치를 찾는다.rfind()
: 오른쪽
부터 찾아서 처음 등장하는 위치를 찾는다.예제를 살펴보자.
>>> output_a = "안녕안녕하세요".find("안녕")
>>> print(output_a)
0
>>> output_b = "안녕안녕하세요".rfind("안녕")
>>> print(output_b)
2
문자열은 가장 앞글자를 0
번째로 센다는 사실을 잊지 말자.
in
연산자in연산자
: 문자열 내부에 어떤 문자열이 있는지 확인한다.출력은 True
또는 False
라고 나온다.
예제를 살펴보자.
>>> print("안녕" in "안녕하세요")
True
>>> print("잘자" in "안녕하세요")
False
문자열 안녕하세요
안에 안녕
은 들어있으므로 True
,
잘자
는 들어있지 않으므로 False
가 나온다.
split()
split()
함수 : 문자열을 특정한 문자로 자른다.예제를 살펴보자.
>>> a = "10 20 30 40 50".split(" ")
>>> print(a)
['10', '20', '30', '40', '50']
split()
함수를 이요해 괄호 안의 문자열인 공백
을 기준으로 잘랐다.
실행 결과로는 리스트 list
가 나온다. 일단은 split()
함수로 문자열을 원하는 대로 자를 수 있다는 것을 기억해두자.
format()
함수를 이용하면 숫자와 문자열을 다양한 형태로 출력할 수 있다.upper()
과 lower()
함수는 문자열의 알파벳을 대문자로 혹은 소문자로 변경한다.strip()
함수는 문자열 양옆의 공백을 제거한다.find()
함수는 문자열 내부에 특정 문자가 어디에 위치하는지 찾을 때 사용한다.in연산자
는 문자열 내부에 어떤 문자열이 있는지 확인할 때 사용한다.split()
함수는 문자열을 특정한 문자로 자를 때 사용한다.f-문자열
을 사용하면 문자열 안에 값을 format()
함수보다 간단하게 삽입할 수 있다.Boolean
은 불린
또는 불리언
또는 불
이라는 발음으로 부른다.
불
은 오직 True(참)
과 False(거짓)
값만 가질 수 있다.
하지만 참과 거짓은 그대로 입력하는 것보다 어떤 명제
의 결과가 될 때 그 의미를 갖는다.
불은 비교 연산자
를 통해 만들 수 있다. 파이썬에는 총 6
개의 비교 연산자가 존재한다.
연산자 | 설명 |
---|---|
== | 같다 |
!= | 다르다 |
< | 작다 |
> | 크다 |
<= | 작거나 같다 |
>= | 크거나 같다 |
비교 연산자는 숫자
또는 문자열
에 적용할 수 있다.
문자 비교 예시를 보도록 하자.
>>> print(10 == 100)
False
>>> print(10 != 100)
True
>>> print(10 <= 100)
True
파이썬은 문자열
에도 비교 연산자를 적용할 수 있다. 이 때 한글
은 사전 순서(가나다순)
으로 앞에 있는 것이 작은 값을 갖는다.
예시를 보도록 하자.
>>> print("가방" == "가방")
True
>>> print("가방" < "하마")
True
>>> print("가방" > "하마")
False
가나다순
이므로 ㄱ
이 ㅎ
보다 작으므로 "가방" < "하마"
는 참
이 되고 그 반대는 거짓
이 되는 것이다.
파이썬은 변수의 범위 등도 비교할 수 있다.
>>> x = 25
>>> print(10 < x < 30)
True
>>> print(40 < x < 60)
False
불을 만들 때
는 비교연산자
를 사용한다고 했었다. 그리고 불끼지는 논리 연산자
를 사용할 수 있다.
파이썬에는 총 3
개의 논리 연산자
가 존재한다.
연산자 | 의미 | 설명 |
---|---|---|
not | 아니다 | 불을 반대로 전환한다. |
and | 그리고 | 피연산자 두 개가 모두 참일 때 True 를 출력하며, 그 외는 모두 False 를 출력한다. |
or | 또는 | 피연산자 두 개 중에 하나만 참이라도 True 를 출력하며, 두 개가 모두 거짓일 때에만 False 를 출력한다. |
단항 연산자
: 피연산자가 한 개이다. ex) 부호 연산자이항 연산자
: 피연산자가 두 개이다. ex) 숫자 연산자 대부분not
연산자not
연산자 조합하기소스코드 boolean.py
x = 10
under_20 = x < 20 # under_20 = (x < 20)
print("under_20:", under_20)
print("not under_20:", not under_20)
실행하면 단순히 True
가 False
로 바뀐다.
and
연산자와 or
연산자and 연산자
는 양쪽 변의 값이 모두 참
일 때만 True
를 결과로 낸다.
좌변 | 우변 | 결과 |
---|---|---|
True | True | True |
True | False | False |
False | True | False |
False | False | False |
반면 or 연산자
는 둘 중 하나만 참
이어도 True
를 결과로 낸다.
좌변 | 우변 | 결과 |
---|---|---|
True | True | True |
True | False | True |
False | True | True |
False | False | False |
이를 기억하며 예제를 보도록 하자.
>>> print(True and False)
False
>>> print(True or False)
True
and
연산자유명한 연예인의 공연 티켓을 예매하는 경우
면서(그리고 and)
오후 3시 이후or
연산자카드를 선택하는 경우
나(또한 or)
신한카드라면 10% 할인해준다.if
조건문이란?: 조건에 따라 코드를 실행하거나 실행하지 않게 만들고 싶을 때 사용하는 구문
이는 코드의 실행 흐름을 변경한다는 뜻이다.
이렇게 조건을 기반으로 실행의 흐름을 변경하는 것
을 조건 분기
라고 한다.
if
조건문의 기본적인 형태if문
의 기본적인 구조는 다음과 같다.
if 불 값이 나오는 표현식: # if 조건문 뒤에는 반드시 콜론(:)을 붙여야 한다.
# if문 다음 문장은 4칸 들여쓰기 후 입력한다. 안 하면 오류가 발생하니 주의할 것
????(불 값이 참일 때 실행할 문장)
????(불 값이 거짓일 때 실행할 문장)
다음은 if문
을 사용하여 양수
와 음수
여부를 알리는 예제이다.
소스코드 condition.py
# 입력을 받습니다.
number = input("정수 입력> ")
number = int(number)
# 양수 조건
if number > 0:
print("양수입니다.")
# 음수 조건
if number < 0:
print("음수입니다.")
# 0 조건
if number == 0:
print("0입니다.")
여러 가지 조건문 중 몇 가지를 더 살펴보자.
먼저 시간을 조건으로 구분하여 오전인지 오후인지를 출력하는 프로그램을 짜보자.
소스코드 date.py
# 날짜/시간과 관련된 기능을 가져온다.
import datetime
# 현재 날짜/시간을 구한다.
now = datetime.datetime.now()
# 출력
print(now.year, "년")
print(now.month, "월")
print(now.day, "일")
print(now.hour, "시")
print(now.minute, "분")
print(now.second, "초")
날짜를 한 눈에 알아보기 편하게 출력하기 위해서는 format()
함수가 필요하다.
소스코드 date01.py
# 날짜/시간과 관련된 기능을 가져온다.
import datetime
# 현재 날짜/시간을 구한다.
now = datetime.datetime.now()
# 출력
print("{}년 {}월 {}일 {}시 {}분 {}초".format(
now.year,
now.month,
now.day,
now.hour,
now.minute,
now.second
))
소스코드 date02.py
import datetime
now = datetime.datetime.now()
if now.hour < 12:
print("현재 시각은 {}시로 오전입니다!".format(now.hour))
if now.hour >= 12:
print("현재 시각은 {}시로 오후입니다!".format(now.hour))
다음과 같이 월을 사용하면 계절을 구분할 수도 있다.
소스코드 date03.py
import datetime
now = datetime.datetime.now()
if 3 <= now.month <= 5:
print("이번 달은 {}월로 봄입니다!".format(now.month))
if 6 <= now.month <= 8:
print("이번 달은 {}월로 여름입니다!".format(now.month))
if 9 <= now.month <= 11:
print("이번 달은 {}월로 가을입니다!".format(now.month))
if now.month == 12 or now.month <= 2:
print("이번 달은 {}월로 겨울입니다!".format(now.month))
12 <= now.month <= 2
라는 논리 오류를 발생시키지 않도록 주의하자.
if문
에서는 불 값이 나오는 조건문
을 어떻게 만들 것인가 가 핵심이다. 따라서 여기서는 불 값에 어떤 조건식을 넣으면 좋을지에 대해 한 번 생각해 보는 시간을 가지도록 하자.
홀수와 짝수를 구분하는 예제를 통해 알아보도록 하자.
소스코드 condition01.py
# 입력
number = input("정수 입력> ")
# 마지막 자리 숫자 추출
last_character = number[-1]
# 숫자로 변환
last_number = int(last_character)
# 짝수 확인
if last_number == 0 \
or last_number == 2 \
or last_number == 4 \
or last_number == 6 \
or last_number == 8:
print("짝수입니다")
# 홀수 확인
if last_number == 1 \
or last_number == 3 \
or last_number == 5 \
or last_number == 7 \
or last_number == 9:
print("홀수입니다")
인덱스에서는 -1
이 뒤에서 첫 번째 숫자를 의미함을 잊지 말도록 하자.
결과는 잘 나왔지만 코드가 매우 길어진다. 따라서 위의 코드를 in 문자열 연산자
를 이용해 간략히 수정해보자.
in
문자열 연산자를 활용해서 짝수와 홀수 구분소스코드 condition02.py
# 입력
number = input("정수 입력> ")
# 마지막 자리 숫자 추출
last_character = number[-1]
# 숫자로 변환
last_number = int(last_character)
# 짝수 확인
if last_character in "02468":
print("짝수입니다")
# 홀수 확인
if last_character in "13579":
print("홀수입니다")
last_character
에 있는 문자열이 02468
또는 13579
에 포함되어 있는지를 확인해 코드가 훨씬 깔끔해졌다.
한 가지 더 살펴보면, 컴퓨터는 모든 것을 숫자로 계산한다. 따라서 문자열 연산보다는 숫자 연산이 조금 더 빠르다. 이번 예제에서는 숫자 연산을 통해 홀수와 짝수를 구분해보자.
소스코드 condition03.py
# 입력
number = input("정수 입력> ")
number = int(number)
# 짝수 조건
if number % 2 == 0:
print("짝수입니다")
# 홀수 조건
if number % 2 != 0:
print("홀수입니다")
이렇듯 조건문을 만들 때는 어떤 것이 제일 빠를까? 를 고민해보아야 한다.
불
은 파이썬의 기본 자료형으로 True
와 False
를 나타내는 값이다.비교 연산자
는 숫자 또는 문자열에 적용하며, 대소를 비교하는 연산자이다.논리 연산자
는 not
and
or
연산자가 있으며, 불을 만들 때 사용한다.if 조건문
은 조건에 따라 코드를 실행하거나 실행하지 않게 만들고 싶을 때 사용하는 구문이다.세상에는 두 가지로 구분되는 것들이 많은데 앞서 했던 짝수와 홀수도 마찬가지다.
# 입력
number = input("정수 입력> ")
number = int(number)
# 짝수 조건
if number % 2 == 0:
print("짝수입니다")
# 홀수 조건
if number % 2 != 0:
print("홀수입니다")
앞서 작성한 코드이다. 그런데 홀수와 짝수는 완전히 정반대되는 상황이다. 그러므로 정반대되는 상황에 두 번이나 조건을 비교해야 하는 것은 낭비라고 할 수 있다.
그렇다면 어떻게 이 문제를 해결할 수 있을까?
else
조건문의 활용else 구문
은 if 조건문
뒤에 사용하며,
if 조건문
의 조건이 거짓일 때 실행되는 부분이다.
if 조건:
조건이 참일 때 실행할 문장
else:
조건이 거짓일 때 실행할 문장
앞 절의 condition03.py
예제에 else
구문을 넣어 다시 코드를 짜보도록 하자.
소스코드 condition04.py
# 입력
number = input("정수 입력> ")
number = int(number)
# 조건
if number % 2 == 0:
print("짝수입니다")
else:
print("홀수입니다")
조건문이 오로지 두 가지로만 구분될 때는 if else
구문을 사용하는 것이 훨씬 효율적이다.
elif
구문그런데 딱 두 가지만으로 구분되지 않는 것도 있다.
따라서 세 개 이상의 조건을 연결해서 사용하는 방법이 필요한데 그것이 바로 elif
구문이다.
elif 구문
은 다음과 같은 형태로 사용한다.
if 조건A:
조건A가 참일 때 실행할 문장
elif 조건B:
조건B가 참일 때 실행할 문장
elif 조건C:
조건C가 참일 때 실행할 문장
...
else:
모든 조건이 거짓일 때 실행할 문장
elif 구문
을 이용해 현재 월을 구하고 이를 기반으로 계절을 구하는 코드를 작성해보자.
소스코드 condition05.py
# 날짜/시간과 관련된 기능을 가져온다.
import datetime
now = datetime.datetime.now()
month = now.month
# 조건문으로 계절 확인
if 3 <= month <= 5:
print("현재는 봄입니다")
elif 6 <= month <= 8:
print("현재는 여름입니다")
elif 9 <= month <= 11:
print("현재는 가을입니다")
else:
print("현재는 겨울입니다")
if
조건문을 효율적으로 사용하기 (누적 예제)학점과 학점에 대한 학생 평가인데, 예제로 구현할 조건은 다음과 같다.
조건 | 설명 (학생 평가) |
---|---|
4.5 | 신 |
4.2 ~ 4.5 | 교수님의 사랑 |
3.5 ~ 4.2 | 현 체제의 수호자 |
2.8 ~ 3.5 | 일반인 |
2.3 ~ 2.8 | 일탈을 꿈꾸는 소시민 |
1.75 ~ 2.3 | 오락문화의 선구자 |
1.0 ~ 1.75 | 불가촉천민 |
0.5 ~ 1.0 | 자벌레 |
0 ~ 0.5 | 플랑크톤 |
0 | 시대를 앞서가는 혁명의 씨앗 |
소수점을 사용하므로 입력을 숫자로 변환할 때 float()
함수를 사용한다는 것에 유의하며 코드를 작성해보자.
소스코드 condition06.py
# 변수 선언
score = float(input("학점 입력> "))
# 조건문 작성
if score == 4.5:
print("신")
elif 4.2 <= score < 4.5:
print("교수님의 사랑")
elif 3.5 <= score < 4.2:
print("현 체제의 수호자")
elif 2.8 <= score < 3.5:
print("일반인")
elif 2.3 <= score < 2.8:
print("일탈을 꿈꾸는 소시민")
elif 1.75 <= score < 2.3:
print("오락문화의 선구자")
elif 1.0 <= score < 1.75:
print("불가촉천민")
elif 0.5 <= score < 1.0:
print("자벌레")
elif 0 < score < 0.5:
print("플랑크폰")
elif score == 0:
print("시대를 앞서가는 혁명의 씨앗")
이 코드는 초보자들일 때 가장 많이 하는 비효율적인 코드이다. else
구문과 elif
구문은 이전의 조건이 맞지 않을 때 넘어오는 부분이므로 한 번 제외된 조건을 한 번 더 검사할 필요는 없다.
앞의 코드를 좀 더 효율적으로 구성한 코드는 다음과 같다.
소스코드 condition07.py
# 변수 선언
score = float(input("학점 입력> "))
# 조건문 작성
if score == 4.5:
print("신")
elif 4.2 <= score:
print("교수님의 사랑")
elif 3.5 <= score:
print("현 체제의 수호자")
elif 2.8 <= score:
print("일반인")
elif 2.3 <= score:
print("일탈을 꿈꾸는 소시민")
elif 1.75 <= score:
print("오락문화의 선구자")
elif 1.0 <= score:
print("불가촉천민")
elif 0.5 <= score:
print("자벌레")
elif 0 < score:
print("플랑크폰")
else:
print("시대를 앞서가는 혁명의 씨앗")
이미 한 번 비교한 것은 제외하고 작성하였다.
이렇게 되면 조건 비교를 반 밖에 하지 않고, 코드의 가독성도 높아지게 된다.
False
로 변환되는 값if
조건문의 매개변수에 다른 값이 올 때 어떤 값이 True
이고 False
로 변환되는지를 알고 있어야 코드를 이해할 수 있다.
False
로 변환되는 값은 None
, 숫자 0
, 0.0
, 빈 컨테이너(빈 문자열, 빈 바이트열, 빈 리스트, 빈 튜플, 빈 딕셔너리 등)
이다. 이외에는 모두 True
로 변환된다.
다음 예제를 통해 0
과 빈 문자열
을 if else
조건문의 매개변수에 넣으면 무엇이 실행되는지를 살펴보자.
False
로 변환되는 값소스코드 false_value.py
print("# if 조건문에 0 넣기")
if 0:
print("0은 True로 변환됩니다.")
else:
print("0은 False로 변환됩니다.")
print()
print("# if 조건문에 빈 문자열 넣기")
if "":
print("빈 문자열은 True로 변환됩니다")
else:
print("빈 문자열은 False로 변환됩니다")
실행 결과에서도 알 수 있듯 0
과 빈 문자열
은 False
로 변환된다.
pass
키워드프로그래밍을 하다 보면 일단 프로그래밍의 전체 골격을 잡아 놓고 내부에서 처리할 내용은 차근차근 생각하며 만들겠다는 의도로 다음과 같이 코딩하는 경우가 많다.
이 때 골격
은 일반적으로 조건문
반복문
함수
클래스
등의 기본 구문을 말한다.
if zero == 0
빈 줄 삽입
else:
빈 줄 삽입
다음 예제를 살펴보자.
소스코드 pass_keyword.py
# 입력
number = input("정수 입력> ")
number = int(number)
# 조건문 사용
if number > 0:
# 양수일 때: 아직 미구현 상태입니다.
else:
# 음수일 때: 아직 미구현 상태입니다.
파이썬의 경우에는 if
조건문 사이에는 무조건 들여쓰기 4
칸을 넣어야만 구문이 성립되므로 위의 경우에는 IndentationError(들여쓰기가 잘못되어 있다)
가 발생한다.
그래서 파이썬에서는 pass
라는 키워드를 제공한다.
pass
키워드를 만나면 진짜로 아무것도 안 함
또는 곧 개발하겠음
으로 해석하면 되겠다.
pass
키워드를 사용한 미구현 부분 입력소스코드 pass_keyword01.py
# 입력
number = input("정수 입력> ")
number = int(number)
# 조건문 사용
if number > 0:
# 양수일 때: 아직 미구현 상태입니다.
pass
else:
# 음수일 때: 아직 미구현 상태입니다.
pass
아직 아무것도 안했다
라는 뜻의 pass
만 들어가 있으므로 입력만 받고 프로그램이 종료된다.
else 구문
은 if
조건문 뒤에 사용하며, if
조건문의 조건이 거짓일 때 실행된다.elif 구문
은 if
조건문과 else
구문 사이에 입력하며, 세 개 이상의 조건을 연결해서 사용할 때 적절하다.if
조건문의 조건식에서 False로 변환되는 값
은 None
0
0.0
빈 문자열
빈 바이트열
빈 리스트
빈 튜플
빈 딕셔너리
등 이다.pass 키워드
는 프로그래밍의 전체 골격을 잡아놓고, 내부에 처리할 내용은 나중에 만들고자 할 때 pass
라는 키워드를 입력해둔다.작성 시 입력 받은 연도를 12
로 나눈 나머지를 사용합니다. 나머지가 0
1
2
3
4
5
6
7
8
9
10
11
일 때 각각 원숭이
닭
개
돼지
쥐
소
범
토끼
용
뱀
말
양
띠이다.
str_input = input("태어난 해를 입력해 주세요> ")
birth_year = int(str_input)%12
if birth_year == 0:
print("원숭이 띠입니다.")
elif birth_year == 1:
print("닭 띠입니다.")
elif birth_year == 2:
print("개 띠입니다.")
elif birth_year == 3:
print("돼지 띠입니다.")
elif birth_year == 4:
print("쥐 띠입니다.")
elif birth_year == 5:
print("소 띠입니다.")
elif birth_year == 6:
print("범 띠입니다.")
elif birth_year == 7:
print("토끼 띠입니다.")
elif birth_year == 8:
print("용 띠입니다.")
elif birth_year == 9:
print("뱀 띠입니다.")
elif birth_year == 10:
print("말 띠입니다.")
elif birth_year == 11:
print("양 띠입니다.")