language/Python

[Python] 조건문(if)-제어문,분기문과 차이, 반복문(while문,for문), 예외처리(try, except, else, finally) 개념과 예제

스파이디웹 2021. 1. 13. 15:32
728x90

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이란? 개념과 예제

 

[Python] list comprehension이란? set, dictionary comprehension이란? 개념과 예제

1. list comprehension이란? 기존의 리스트 생성하는 방법을 편리하게 쓰는 문법 기존의 리스트를 생성하여 값을 입력하는 방법은 다음과 같습니다. numbers = [] for n in range(0, 10): numbers.append(n) 이러..

spidyweb.tistory.com


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 출력

 

참조:

https://dojang.io/mod/page/view.php?id=2398 

https://blockdmask.tistory.com/537

728x90