안녕하세요, MoonLight입니다.
이번 Post에서는 Python의 분기문에 대해서 알아보도록 하겠습니다.
1. 기본 사항
Python에서 제공하는 조건 분기문은 주어진 조건에 따라 프로그램의 흐름을 제어하는 방법입니다.
주로 if, elif, else 문을 사용하며, 이를 통해 여러 가지 조건에 맞는 실행 경로를 만들 수 있습니다.
1.1. if 문
if 문은 주어진 조건이 True일 때 해당 Block의 Code를 실행합니다.
구문
if 조건:
# 조건이 True일 때 실행할 Code
예시
x = 10
if x > 5:
print("x는 5보다 큽니다.")
출력:
x는 5보다 큽니다.
조건 x > 5가 True이므로 "x는 5보다 큽니다."가 출력됩니다.
1.2. else 문
else 문은 if 조건이 False일 경우에 실행됩니다. 즉, if의 조건이 False일 때 대체 경로를 지정할 때 사용합니다.
구문
if 조건:
# 조건이 True일 때 실행할 Code
else:
# 조건이 False일 때 실행할 Code
예시
x = 3
if x > 5:
print("x는 5보다 큽니다.")
else:
print("x는 5보다 크지 않습니다.")
출력:
x는 5보다 크지 않습니다.
조건 x > 5가 False이므로 "x는 5보다 크지 않습니다."가 출력됩니다.
1.3. elif 문 (else if)
elif는 여러 조건을 순차적으로 확인할 때 사용됩니다.
if와 else 사이에 위치하여 추가 조건을 지정할 수 있습니다.
첫 번째 조건이 False일 경우, elif 조건을 확인하고, 그 조건이 True일 경우 해당 Code를 실행합니다.
구문
if 조건1:
# 조건1이 True일 때 실행할 Code
elif 조건2:
# 조건2가 True일 때 실행할 Code
else:
# 위 조건들이 모두 False일 때 실행할 Code
예시
x = 10
if x > 15:
print("x는 15보다 큽니다.")
elif x > 5:
print("x는 5보다 크고 15보다 작습니다.")
else:
print("x는 5 이하입니다.")
출력:
x는 5보다 크고 15보다 작습니다.
if 조건 x > 15가 False이고, elif 조건 x > 5는 True이므로 "x는 5보다 크고 15보다 작습니다."가 출력됩니다.
1.4. 중첩된 조건문 (Nested if statements)
조건문은 다른 조건문을 포함할 수 있습니다. 이를 중첩된 조건문이라 하며, 여러 조건을 복합적으로 처리할 때 유용합니다.
구문
if 조건1:
if 조건2:
# 조건1과 조건2가 모두 True일 때 실행할 Code
else:
# 조건1은 True, 조건2는 False일 때 실행할 Code
else:
# 조건1이 False일 때 실행할 Code
예시
x = 10
y = 20
if x > 5:
if y > 15:
print("x는 5보다 크고, y는 15보다 큽니다.")
else:
print("x는 5보다 크고, y는 15 이하입니다.")
else:
print("x는 5 이하입니다.")
출력:
x는 5보다 크고, y는 15보다 큽니다.
x > 5가 True이고, 그 내부의 y > 15도 True이므로 "x는 5보다 크고, y는 15보다 큽니다."가 출력됩니다.
1.5. 조건식 (Ternary operator)
Python에서 간단한 조건문을 한 줄로 작성할 수 있는 삼항 연산자(조건식)도 지원합니다. 이를 통해 if-else 문을 간결하게 표현할 수 있습니다.
구문
결과 = 값1 if 조건 else 값2
예시
x = 10
result = "x는 5보다 큽니다." if x > 5 else "x는 5보다 작거나 같습니다."
print(result)
출력:
x는 5보다 큽니다.
x > 5가 True이므로 "x는 5보다 큽니다."가 result 변수에 할당됩니다.
1.6. 논리 연산자 (Logical operators)
조건문에서 여러 조건을 and, or, not 등의 논리 연산자를 사용하여 결합할 수 있습니다.
and : 두 조건이 모두 True일 때만 True.
or : 두 조건 중 하나만 True이면 True.
not : 조건이 True일 때 False로, False일 때 True로 변환.
예시
x = 10
y = 20
# and 사용
if x > 5 and y > 15:
print("x는 5보다 크고, y는 15보다 큽니다.")
# or 사용
if x > 5 or y < 15:
print("x는 5보다 크거나 y는 15보다 작습니다.")
# not 사용
if not x > 15:
print("x는 15보다 크지 않습니다.")
출력:
x는 5보다 크고, y는 15보다 큽니다.
x는 5보다 크거나 y는 15보다 작습니다.
x는 15보다 크지 않습니다.
1.7. is와 is not 연산자
is와 is not은 객체의 동일성을 비교할 때 사용합니다. is는 두 객체가 같은 객체인지 확인하고, is not은 두 객체가 다른 객체인지 확인합니다.
예시
x = [1, 2, 3]
y = x
if x is y:
print("x와 y는 동일한 객체입니다.")
if x is not [1, 2, 3]:
print("x는 [1, 2, 3]과 다른 객체입니다.") # 출력되지 않음
출력:
x와 y는 동일한 객체입니다.
1.8. in과 not in 연산자
in은 객체가 컨테이너 안에 있는지 확인하고, not in은 컨테이너 안에 없는지 확인합니다. 리스트, 문자열, 튜플 등에서 자주 사용됩니다.
예시
x = 10
y = [1, 2, 3, 10]
if x in y:
print("x는 y에 포함되어 있습니다.")
if 5 not in y:
print("5는 y에 포함되지 않습니다.")
출력:
x는 y에 포함되어 있습니다.
5는 y에 포함되지 않습니다.
종합 예제
다양한 조건문을 함께 사용하는 예제입니다.
age = 20
is_student = True
if age < 18:
print("미성년자입니다.")
elif age >= 18 and is_student:
print("학생입니다.")
else:
print("성인입니다.")
출력:
학생입니다.
1.9. 결론
Python의 조건문은 프로그램 흐름을 제어하는 핵심 도구입니다.
다양한 조건을 처리하고, 여러 조건을 결합하여 복잡한 로직을 처리할 수 있습니다.
if, elif, else, and, or, not 등의 연산자를 잘 활용하면 더 깔끔하고 직관적인 Code를 작성할 수 있습니다.
2. 예제
Ex. 1. 파이썬에서 True 혹은 False를 갖는 데이터 타입은 무엇인가?
bool type
Ex. 2. 아래 Code의 출력 결과를 예상하라
print(3 == 5)
출력:
False
3 == 5 의 참/거짓을 분별하여 결과를 True / False로 출력합니다.
Ex. 3. 아래 Code의 출력 결과를 예상하라
print(3 < 5)
출력:
True
Ex. 4. 아래 Code의 결과를 예상하라.
x = 4
print(1 < x < 5)
출력:
True
Ex. 5. 아래 Code의 결과를 예상하라.
print ((3 == 3) and (4 != 3))
출력:
True
and는 양쪽 논리식이 모두 True인 경우에만 결과가 True입니다.
Ex. 6. 아래 Code에서 에러가 발생하는 원인에 대해 설명하라.
print(3 => 4)
출력:
{
"name": "SyntaxError",
"message": "expression cannot contain assignment, perhaps you meant \"==\"? (3612698823.py, line 1)",
"stack": " Cell In[47], line 1
print(3 => 4)
^
SyntaxError: expression cannot contain assignment, perhaps you meant \"==\"?
"
}
=> 라는 연산자는 없고, >= 라고 써야 한다.
Ex. 7. 아래 Code의 출력 결과를 예상하라
if 4 < 3:
print("Hello World")
출력:
논리식의 판별이 False이기 때문에 else가 없는 구문에서는 아무것도 출력되지 않습니다.
Ex. 8. 아래 Code의 출력 결과를 예상하라
if 4 < 3:
print("Hello World.")
else:
print("Hi, there.")
출력:
Hi, there.
Ex. 9. 아래 Code의 출력 결과를 예상하라
if True :
print ("1")
print ("2")
else :
print("3")
print("4")
출력:
1
2
4
Ex. 10. 아래 Code의 출력 결과를 예상하라
if True :
if False:
print("1")
print("2")
else:
print("3")
else :
print("4")
print("5")
출력:
3
5
Ex. 11. 사용자로부터 입력받은 문자열을 두 번 출력하라. 아래는 사용자가 "안녕하세요"를 입력한 경우의 출력 결과이다.
>> 안녕하세요
안녕하세요안녕하세요
user = input("입력:")
print(user * 2)
출력:
안녕하세요안녕하세요
Ex. 12. 사용자로부터 하나의 숫자를 입력받고, 입력 받은 숫자에 10을 더해 출력하라.
>> 숫자를 입력하세요: 30
40
user = input("입력:")
print(int(user) + 10)
출력:
40
Ex. 13. 사용자로부터 하나의 숫자를 입력 받고 짝수/홀수를 판별하라.
>> 30
짝수
user = input("입력:")
if int(user) % 2:
print("홀수")
else:
print("짝수")
출력:
짝수
Ex. 14. 사용자로부터 값을 입력받은 후 해당 값에 20을 더한 값을 출력하라. 단 사용자가 입력한 값과 20을 더한 계산 값이 255를 초과하는 경우 255를 출력해야 한다.
>> 입력값: 200
출력값: 220
>> 입력값: 240
출력값: 255
user = input("입력:")
if int(user) + 20 > 255:
print("255")
else:
print(int(user) + 20)
출력:
220
Ex. 15. 사용자로부터 하나의 값을 입력받은 후 해당 값에 20을 뺀 값을 출력하라.
단 출력 값의 범위는 0~255이다. 예를 들어 결괏값이 0보다 작은 값이되는 경우 0을 출력하고 255보다 큰 값이 되는 경우 255를 출력해야 한다.
>> 입력값: 200
출력값: 180
>> 입력값: 15
출력값: 0
user = input("입력:")
if int(user) - 20 < 0:
print("0")
elif int(user) - 20 > 255:
print("255")
else:
print(int(user) - 20)
출력:
255
Ex. 16. 사용자로부터 입력 받은 시간이 정각인지 판별하라.
>> 현재시간:02:00
정각 입니다.
>> 현재시간:03:10
정각이 아닙니다
user = input("입력:")
if user.split(":")[-1] == "00":
print("정각")
else:
print("정각이 아닙니다")
출력:
정각이 아닙니다
Ex. 17. 사용자로 입력받은 단어가 아래 fruit 리스트에 포함되어 있는지를 확인하라. 포함되었다면 "정답입니다"를 아닐 경우 "오답입니다" 출력하라.
fruit = ["사과", "포도", "홍시"]
fruit = ["사과", "포도", "홍시"]
user = input("입력:")
if user in fruit:
print("정답")
else:
print("오답")
출력:
정답
Ex. 18. 투자 경고 종목 리스트가 있을 때 사용자로부터 종목명을 입력 받은 후 해당 종목이 투자 경고 종목이라면 '투자 경고 종목입니다'를 아니면 "투자 경고 종목이 아닙니다."를 출력하는 프로그램을 작성하라.
warn_investment_list = ["Microsoft", "Google", "Naver", "Kakao", "SAMSUNG", "LG"]
user = input("입력:")
if user in warn_investment_list:
print("경고")
else:
print("경고 아님")
출력:
경고 아님
Ex. 19. 아래와 같이 fruit 딕셔너리가 정의되어 있다. 사용자가 입력한 값이 딕셔너리 키 (key) 값에 포함되었다면 "정답입니다"를 아닐 경우 "오답입니다" 출력하라.
fruit = {"봄" : "딸기", "여름" : "토마토", "가을" : "사과"}
user = input("입력:")
if user in fruit.keys():
print("정답")
else:
print("오답")
출력:
정답
Ex. 20. 아래와 같이 fruit 딕셔너리가 정의되어 있다. 사용자가 입력한 값이 딕셔너리 값 (value)에 포함되었다면 "정답입니다"를 아닐 경우 "오답입니다" 출력하라
fruit = {"봄" : "딸기", "여름" : "토마토", "가을" : "사과"}
user = input("입력:")
if user in fruit.values():
print("정답")
else:
print("오답")
출력:
정답
Ex. 21. 사용자로부터 문자 한 개를 입력 받고, 소문자일 경우 대문자로, 대문자 일 경우, 소문자로 변경해서 출력하라.
>> a
A
힌트-1 : islower() 함수는 문자의 소문자 여부를 판별합니다. 만약 소문자일 경우 True, 대문자일 경우 False를 반환합니다. 힌트-2 : upper() 함수는 대문자로, lower() 함수는 소문자로 변경합니다.
user = input("입력:")
if user.islower():
print(user.upper())
else:
print(user.lower())
출력:
A
Ex. 22. 점수 구간에 해당하는 학점이 아래와 같이 정의되어 있다. 사용자로부터 score를 입력받아 학점을 출력하라.
점수 학점
81~100 A
61~80 B
41~60 C
21~40 D
0~20 E
>> score: 83
grade is A
user = input("score : ")
if user > 81:
print("A")
elif user < 80 and user > 61:
print("B")
elif user < 60 and user > 41:
print("C")
elif user < 40 and user > 21:
print("D")
elif user < 20:
print("E")
출력:
A
Ex. 23. 사용자로부터 달러, 엔, 유로, 또는 위안 금액을 입력받은 후 이를 원으로 변환하는 프로그램을 작성하라. 각 통화별 환율은 다음과 같다. 사용자는 100 달러, 1000 엔, 13 유로, 100 위안과 같이 금액과 통화명 사이에 공백을 넣어 입력한다고 가정한다.
통화명
|
환율
|
달러
|
1167
|
엔
|
1.096
|
유로
|
1268
|
위안
|
171
|
환율 = {"달러": 1167,
"엔": 1.096,
"유로": 1268,
"위안": 171}
user = input("입력: ")
num, currency = user.split()
print(float(num) * 환율[currency], "원")
출력:
116700.0 원
Ex. 24. 사용자로부터 세 개의 숫자를 입력 받은 후 가장 큰 숫자를 출력하라.
>> input number1: 10
>> input number2: 9
>> input number3: 20
20
num1 = input("input number1: ")
num2 = input("input number2: ")
num3 = input("input number3: ")
num1 = int(num1)
num2 = int(num2)
num3 = int(num3)
if num1 >= num2 and num1 >= num3:
print(num1)
elif num2 >= num1 and num2 >= num3:
print(num2)
else:
print(num3)
출력:
3
Ex. 25. 휴대폰 번호 앞자리에 따라 통신사는 아래와 같이 구분된다. 사용자로부터 휴대전화 번호를 입력 받고, 통신사를 출력하는 프로그램을 작성하라.
번호
|
통신사
|
011
|
SKT
|
016
|
KT
|
019
|
LGU
|
010
|
알수없음
|
number = input("Phone : ")
num = number.split("-")[0]
if num == "011":
com = "SKT"
elif num == "016":
com = "KT"
elif num == "019":
com = "LGU"
else:
com = "알수없음"
print(f"{com}")
출력:
KT
Ex. 26. 우편번호는 5자리로 구성되는데, 앞의 세자리는 구를 나타낸다. 예를들어, 강북구의 경우 010, 011, 012 세 자리로 시작한다.
|
0
|
1
|
2
|
3
|
4
|
5
|
6
|
7
|
8
|
9
|
01
|
강북구
|
강북구
|
강북구
|
도봉구
|
도봉구
|
도봉구
|
노원구
|
노원구
|
노원구
|
노원구
|
사용자로 부터 5자리 우편번호를 입력받고 구를 판별하라
우편번호 = input("No : ")
우편번호 = 우편번호[:3]
if 우편번호 in ["010", "011", "012"]:
print("강북구")
elif 우편번호 in ["014", "015", "016"]:
print("도봉구")
else:
print("노원구")
출력:
도봉구
우편 번호를 앞자리 3개만 Slicing하여 해당 구의 우편번호와 비교하면 됩니다.
Ex. 27. 주민등록번호 뒷 자리 7자리 중 첫째 자리는 성별을 나타내는데, 1, 3은 남자 2, 4는 여자를 의미한다. 사용자로부터 13자리의 주민등록번호를 입력 받은 후 성별 (남자, 여자)를 출력하는 프로그램을 작성하라.
주민번호 = input("주민등록번호: ")
주민번호 = 주민번호.split("-")[1]
if 주민번호[0] == "1" or 주민번호[0] == "3":
print("남자")
else:
print("여자")
출력:
남자
Ex. 28. 주민등록번호의 뒷 자리 7자리 중 두번째와 세번째는 지역Code를 의미한다. 주민 등록 번호를 입력 받은 후 출생지가 서울인지 아닌지 판단하는 Code를 작성하라
00 ~ 08 : 서울
09 ~ 12 : 부산
ID = input("ID : ")
city = ID.split("-")[1]
if 0 <= int(city[1:3]) <= 8:
print("Seoul.")
else:
print("Not Seoul")
출력:
Seoul.
Ex. 29. 주민등록번호는 13자리로 구성되는데 마지막 자리수는 주민등록번호의 유효성을 체크하는데 사용된다. 먼저 앞에서부터 12자리의 숫자에 2, 3, 4, 5, 6, 7, 8, 9, 2, 3, 4, 5를 차례로 곱한 뒤 그 값을 전부 더한다. 연산 결과 값을 11로 나누면 나머지가 나오는데 11에서 나머지를 뺀 값이 주민등록번호의 마지막 번호가 된다.
위와 같이 821010-1635210에 대해서 계산을 해보면 마지막 자리는 4가 되어야 함을 알 수 있다. 즉, 821010-1635210은 유효하지 않은 주민등록번호임을 알 수 있다.
다음과 같이 사용자로부터 주민등록번호를 입력받은 후 주민등록번호가 유효한지를 출력하는 프로그램을 작성하라.
num = input("ID: ")
calc1 = int(num[0]) * 2 + int(num[1]) * 3 + int(num[2]) * 4 + int(num[3]) * 5 + int(num[4]) * 6 + \
int(num[5]) * 7 + int(num[7]) * 8 + int(num[8]) * 9 + int(num[9]) * 2 + int(num[10])* 3 + \
int(num[11])* 4 + int(num[12]) * 5
calc2 = 11 - (calc1 % 11)
calc3 = str(calc2)
if num[-1] == calc3[-1]:
print("Valid ID")
else:
print("invalid ID")
출력:
invalid ID
Ex. 30. 아래 Code는 비트코인의 가격 정보를 딕셔너리로 가져오는 Code이다.
import requests
btc = requests.get("https://api.bithumb.com/public/ticker/").json()['data']
btc 딕셔너리 안에는 시가, 종가, 최고가, 최저가 등이 저장되어 있다. 최고가와 최저가의 차이를 변동폭으로 정의할 때 (시가 + 변동폭)이 최고가 보다 높을 경우 "상승장", 그렇지 않은 경우 "하락장" 문자열을 출력하라.
import requests
btc = requests.get("https://api.bithumb.com/public/ticker/").json()['data']
range = float(btc['max_price']) - float(btc['min_price'])
price = float(btc['opening_price'])
max = float(btc['max_price'])
if (price + range) > max:
print("Up")
else:
print("Low")
출력:
Up
도움이 되셨으면 좋겠네요.
다른 강좌도 참고하시면 좋을 것 같습니다. 각 강좌의 Link는 아래를 참고하시기 바랍니다.
Python 강좌 01 - print()
Python 강좌 02 - 변수
Python 강좌 03 - 문자열
Python 강좌 04 - List
Python 강좌 05 - Tuple
Python 강좌 06 - Dictionary
Python 강좌 07 - 분기문
Python 강좌 08 - 반복문
Python 강좌 09 - 함수
Python 강좌 10 - Module
Python 강좌 11 - Class
Python 강좌 12 - File & Exception
'Development Tip' 카테고리의 다른 글
Python 강좌 09 - 함수 (0) | 2024.12.23 |
---|---|
Python 강좌 08 - 반복문 (0) | 2024.12.23 |
Python 강좌 06 - Dictionary (0) | 2024.12.23 |
Python 강좌 05 - Tuple (0) | 2024.12.23 |
Python 강좌 04 - List (0) | 2024.12.23 |