[Python] 조건문(if)-제어문,분기문과 차이, 반복문(while문,for문), 예외처리(try, except, else, finally) 개념과 예제
1. if문
조건문이란?
주어진 조건이 참이나 거짓이냐를 판별하고 판별에 따라 특정 명령을 수행하는 수행문
제어문이란?
- 제어문은 프로그램의 순차적인 흐름(위->아래)을 인위적으로 제어해야 할 때 사용하는 실행문
- 제어문에 포함된 것이 바로 조건문, 반복문
분기문이란?
- 프로그램 중 참(True) 또는 거짓(False)을 반환하는 조건식의 결과에 따라 프로그램을 어떠한 경로로 실행할지 를 결정하는 문
- 0이 아니거나, null이 아닐 경우에 참(True)값으로 판단하며, 그 반대의 경우에는 거짓(False)값으로 판단
if문의 기본 구조
"""
if 조건문:
수행할 문장1 #들여쓰기 space4칸 or tab
수행할 문장2 #들여쓰기 space4칸 or tab
...
else:
수행할 문장1 #들여쓰기 space4칸 or tab
수행할 문장2 #들여쓰기 space4칸 or tab
...
"""
들여쓰기에 민감한 파이썬은 들여쓰기를 꼭 지켜줘야한다.(아닐 경우 에러발생)
조건문이란 무엇인가?
1) 조건문이란 참과 거짓을 판단하는 문장을 말한다.
ex)
money = 2000
if money >= 3000:
print("택시 타고간다")
else:
print("걸어 간다")
2) and, or, not 을 if문에 포함시킬 수 있다.
ex)
money = 2000
card = True
if money >= 3000 or card:
print("택시 타고간다")
else:
print("걸어 간다")
3) x in s, x not in s
ex)
pocket = ['paper','cellphone','money']
if 'money' in pocket:
print("택시 타고간다.")
else:
print("걸어 간다)
다양한 조건을 판단하는 elif
파이썬의 elif 는 다른 프로그래밍언어에서 else if 로 사용되고 있다.
ex)
pocket = ['paper'.'cellphone']
card = True
if 'money' in pocket:
print("택시")
elif card:
print("카드로 택시)
else:
print("걸어 간다")
조건부 표현식
if score >= 60:
message = "success"
else:
message = "failure"
위의 코드는 아래와 같이 간략하게 바뀔 수 있다.
message = "success" if score >= 60 else "failure"
2. while문
while 문의 기본 구조
반복해서 문장을 수행해야 할 경우 while문을 사용한다.(반복문)
"""
while 조건문:
수행할 문장1 #마찬가지로 들여쓰기 4칸
수행할 문장2 #마찬가지로 들여쓰기 4칸
수행할 문장3 #마찬가지로 들여쓰기 4칸
...
"""
while 문 강제로 빠져나가기
break문을 통해 while문을 빠져나갈 수 있다.
ex)
coffee = 10
money = 300
while money:
print("커피 제공")
coffee = coffee -1
print("남은 커피의 양은 %d개 입니다." % coffee)
if coffee == 0:
print("커피가 다 떨어졌습니다.")
break #while 문을 강제로 빠져 나가고 싶을 때 break을 사용하게 되면 while문 밖으로 나가게 된다.
while 문 맨 처음으로 돌아가기
while문 안의 문장을 수행할 때 입력 조건을 검사해서 조건이 맞지 않으면 while문을 빠져나간다.
하지만 while문을 빠져나가지 않고 while문(조건문)의 맨 처음으로 다시 돌아가게 만들고 싶을 때 continue를 사용한다.
ex)
a = 0
while a < 10:
a = a + 1
if a % 2 == 0: continue # a 나누기 2 의 나머지가 0일 때 while a < 10: 으로 되돌아감
print(a)
3. for문
for 문의 기본 구조
"""
for 변수 in 리스트(또는 튜플,문자열):
수행할 문장1 #마찬가지로 들여쓰기 4칸
수행할 문장2 #마찬가지로 들여쓰기 4칸
...
"""
ex)
test_list = ['one','two','three']
for i in test_list:
print(i)
#one
#two
#three 출력
ex)
marks = [90, 25, 67, 45, 80]
number = 0
for mark in marks:
number = number + 1
if mark >= 60:
print("%d번 학생은 합격입니다." % number)
else:
print("%d번 학생은 불합격입니다." % number)
#1번 학생은 합격입니다.
#2번 학생은 불합격입니다.
#3번 학생은 합격입니다.
#4번 학생은 불합격입니다.
#5번 학생은 합격입니다. 출력
for문과 continue문
ex)
marks = [90, 25, 67, 45, 80]
number = 0
for mark in marks:
number = number + 1
if mark < 60: continue
print("%d번 학생 합격입니다." % number)
#1번 학생 합격입니다.
#3번 학생 합격입니다.
#5번 학생 합격입니다. 출력
for문과 함께 자주 사용하는 range 함수★
a = range(10) #0부터 10 미만의 숫자를 포함하는 range객체를 만들어 준다.
print(a)
#range(0,10) 출력
a = range(1,11) #1부터 11미만의 숫자를 포함하는 range객체를 만들어 준다.
print(a)
#range(1,11) 출력
ex)
#구구단
for i in range(2,10):
for j in range(1, 10):
print(i*j, end=" ")
print('')
#2 4 6 8 10 12 14 16 18
#3 6 9 12 15 18 21 24 27
#4 8 12 16 20 24 28 32 36
#5 10 15 20 25 30 35 40 45
#6 12 18 24 30 36 42 48 54
#7 14 21 28 35 42 49 56 63
#8 16 24 32 40 48 56 64 72
#9 18 27 36 45 54 63 72 81 출력
리스트 내포 사용하기
리스트 안에 for문을 포함하는 리스트 내포를 사용하면 좀 더 편리하고 직관적인 프로그램을 만든다.
[표현식 for 항목 in 반복 가능 객체1 if 조건]
ex)
a = [1,2,3,4]
result = []
for num in a:
result.append(num*3)
print(result)
#[3,6,9,12] 출력
위의 문장을 리스트 내포(list comprehension)로 바꾸면
a = [1,2,3,4]
result = [num * 3 for num in a]
print(result)
#[3,6,9,12] 출력
리스트 컴프리헨션에 대해 더 알아보시려면 아래의 링크를 참조해주세요.
2022.03.02 - [Python] - [Python] list comprehension이란? set, dictionary comprehension이란? 개념과 예제
4. 예외처리
예외(exception)란 코드를 실행하는 중에 발생한 에러를 뜻함
예외가 발생했을 때도 스크립트 실행을 중단하지 않고 계속 실행하게 해주는 예외 처리 방법
try + except
try:
실행할 코드
except:
예외가 발생했을 때 처리하는 코드
숫자를 0으로 나누었을 때 발생하는 ZeroDivisionError 예외 처리
try:
x = int(input('나눌 숫자를 입력하세요: '))
y = 10 / x
print(y)
except: # 예외가 발생했을 때 실행됨
print('예외가 발생했습니다.')
특정 예외처리만 하는 방법
try:
실행할 코드
except 예외이름:
예외가 발생했을 때 처리하는 코드
y = [10, 20, 30]
try:
index, x = map(int, input('인덱스와 나눌 숫자를 입력하세요: ').split())
print(y[index] / x)
except ZeroDivisionError: # 숫자를 0으로 나눠서 에러가 발생했을 때 실행됨
print('숫자를 0으로 나눌 수 없습니다.')
except IndexError: # 범위를 벗어난 인덱스에 접근하여 에러가 발생했을 때 실행됨
print('잘못된 인덱스입니다.')
예외의 에러 메세지 받아오기
try:
실행할 코드
except 예외 as 변수:
예외가 발생했을 때 처리하는 코드
y = [10, 20, 30]
try:
index, x = map(int, input('인덱스와 나눌 숫자를 입력하세요: ').split())
print(y[index] / x)
except ZeroDivisionError as e: # as 뒤에 변수를 지정하면 에러를 받아옴
print('숫자를 0으로 나눌 수 없습니다.', e) # e에 저장된 에러 메시지 출력
except IndexError as e:
print('잘못된 인덱스입니다.', e)
try + except + else
- else 는 에러가 발생하지 않았을때 거치는 구문
- else만 단독으로 try + else 는 불가능, except 가 있어야 합니다.
- else는 예외가 발생하지 않았을 때 실행되는 문입니다.
print("start")
try:
arr = ["se","de"]
print(arr[0])
print("try")
except:
print("error")
else:
print("else")
print("end")
#start
#se
#try
#else
#end 출력
try + except + finally
finally 는 에러가 발생해도, 발생하지 않아도 무조건 거치는 구문
print("start")
try:
arr = ["se","de"]
print(arr[2])
print("try")
except:
print("error")
finally:
print("finally")
print("end")
#start
#error
#finally
#end 출력
try + except + else + finally
에러가 나지 않았을 때의 코드
print("start")
try:
arr = ["se","de"]
print(arr[0])
print("try")
except:
print("error")
else:
print("else")
finally:
print("finally")
print("end")
#start
#se
#try
#else
#finally
#end 출력
에러가 났을 때의 코드
print("start")
try:
arr = ["se","de"]
print(arr[2])
print("try")
except:
print("error")
else:
print("else")
finally:
print("finally")
print("end")
#start
#error
#finally
#end 출력
참조: