✅이전에 풀었던 옹알이(1) 에서, "같은 발음을 연속해서 할 수 없다" 는 조건이 추가되었다.
✅ 주어진 문자 babb 에 같은 발음이 연속으로 있는 경우 해당 단어를 건너뛴다.
✅ 문자열 곱셈연산(word*2) 을 사용해서 같은 발음을 확인한다.
defsolution(babbling):
answer = 0
words = ["aya", "ye", "woo", "ma"]
for babb in babbling:
for word in words:
if word * 2in babb:
break
babb = babb.replace(word, " ")
ifnot babb.strip():
answer += 1return answer
✅ 주어진 문자 babb에 아기가 발음할 수 있는 단어가 포함된 경우, 전부 공백으로 교체한다.
✅ 공백처리한 문자 babb에 있는 공백을 제거했을 때 빈 값이면 아기가 발음할 수 있는 단어이므로 answer + 1
✅ 파이썬에 빈 값은 false로 간주한다.
📝내가 작성한 코드
defsolution(babbling):
answer = 0# 아기가 발음할 수 있는 단어 리스트
words = ["aya", "ye", "woo", "ma"]
for babb in babbling:
for word in words:
babb = babb.replace(word, ' ')
ifnot babb.strip():
answer += 1return answer
✏️ 예외 (exception) 또는 런타임 오류 (runtime error) : 프로그램 실행 중에 발생하는 오류이며, 구문 오류 해결법처럼 오류가 발생한 코드를 찾아 수정해야 한다.
✏️예외 처리 (exception handling) : 예외를 처리하는 모든 것
✔️구문 오류는 프로그램 실행 전에 발생하기 때문에 예외처리 방법으로 처리할 수 없다.
★ 조건문으로 예외 처리하기
✔️ 정수를 입력받는 소스 코드에 문자열을 입력한다면 ? 예외 발생!
✔️ '정수를 입력하지 않았을 때' 를 조건으로 구분해서, 해당 상황일 때 프로그램이 죽지 않고 정상 종료되도록 한다.
# 조건문으로 예외 처리
input_num = input("정수 입력 > ")
# 사용자 입력이 숫자로만 구성되어 있을 때if input_num.isdigit():
number = int(input_num)
print("입력받은 숫자: ", number)
else:
print("정수가 입력되지 않았습니다.")
# 정수 입력한 경우
정수 입력 > 5
입력받은 숫자: 5# 문자열 입력한 경우
정수 입력 > 문자열
정수가 입력되지 않았습니다.
★ try except 구문을 사용하여 예외 처리하기
파이썬에서 제공하는 예외를 처리할 수 있는 구문
어떤 상황에 예외가 발생하는 지 모두 파악하지 않아도 프로그램이 강제로 죽는 상황을 막을 수 있다.
try: 예외가 발생할 가능성이 있는 코드 except: 예외가 발생했을 때 실행할 코드
# try except 구문으로 예외 처리try:
# 예외가 발생할 가능성이 있는 구문
input_num = int(input("정수 입력 > "))
print("입력받은 숫자: ", input_num)
except:
# 예외 발생 시 실행할 구문print("정수가 입력되지 않았습니다.")
# 정수 입력
정수 입력 > 6
입력받은 숫자: 6# 정수가 아닌 문자열 입력
정수 입력 > 안녕하세요
정수가 입력되지 않았습니다.
★try except 구문과 pass 키워드를 조합해서 사용하기
try except 구문 사용 시 except 구문에 아무것도 넣지 않으면 구문 오류가 발생하므로, pass 키워드를 추가한다.
try: 예외가 발생할 가능성이 있는 코드 except: pass
★try except else 구문
try except 구문에 else 구문을 넣으면 '예외가 발생 하지 않았을 때 실행할 코드' 를 지정할 수 있다.
예외가 발생할 가능성이 있는 코드만 try 구문 내부에 넣고, 나머지는 else로 빼는 경우가 많다.
# try except else 구문으로 예외 처리try:
# 예외가 발생할 가능성이 있는 구문
input_num = int(input("정수 입력 > "))
except:
print("정수가 아닙니다.")
else:
print("입력받은 숫자: ", input_num)
# 정수를 입력한 경우
정수 입력 > 10
입력받은 숫자: 10# 정수를 입력하지 않은 경우
정수 입력 > hello
정수가 아닙니다.
★finally 구문
예외 처리 구문에서 가장 마지막에 사용할 수 있는 구문.
예외 발생 여부와 상관 없이 무조건 실행할 때 사용하는 코드
try: 예외가 발생할 가능성이 있는 코드 except: 예외가 발생했을 때 실행할 코드 else: 예외가 발생하지 않았을 때 실행할 코드 finally: 무조건 실행할 코드
# try except 구문으로 예외 처리try:
# 예외가 발생할 가능성이 있는 구문
input_num = int(input("정수 입력 > "))
print("입력받은 숫자: ", input_num)
except:
print("정수가 아닙니다.")
else:
print("예외가 발생하지 않았습니다.")
finally:
print("프로그램이 모두 끝났습니다.")
# 정수를 입력한 경우
정수 입력 > 10
입력받은 숫자: 10
예외가 발생하지 않았습니다.
프로그램이 모두 끝났습니다.
# 정수를 입력하지 않은 경우
정수 입력 > 테스트
정수가 아닙니다.
프로그램이 모두 끝났습니다.
※ try 구문은 단독으로 사용할 수 없고, 반드시 except 구문이나 finally 구문과 함께 사용해야 한다.
※ else 구문은 반드시 except 구문 뒤에 사용해야 한다.
★finally 키워드를 사용해서 코드를 깔끔하게 만들기
finally 키워드는 무조건 실행되기 때문에, 반복문이나 함수 내부에서 사용하면 좋다.
예시) 파일 처리 코드
try 구문에서 return 키워드로 빠져 나가거나 예외 발생으로 try 구문 중간에 빠져 나가는 경우에 파일이 제대로 닫히지 않는 문제가 발생할 수 있음
finally 구문을 활용하여 try 구문을다 수행하지 않고 빠져나가더라도 무조건 파일이 닫히게 할 수 있다.
[예외 고급]
✏️ 예외 객체 (exception object): 프로그램에서 예외가 발생하면 예외와 관련된 정보가 생긴다. 그리고 예외 정보는 예외 객체에 저장된다.
try: 예외가 발생할 가능성이 있는 구문 except 예외의 종류 as 예외 객체를 활용할 변수 이름: 예외가 발생했을 때 실행할 구문
★ 예외의 종류가 뭔지 모를 땐 Exception 을 사용한다.
# try except 구문으로 예외 처리try:
# 예외가 발생할 가능성이 있는 구문
input_num = int(input("정수 입력 > "))
print("입력받은 숫자: ", input_num)
except Exception as exception:
# 예외 객체의 자료형 출력print("type(exception): ", type(exception))
# 예외 객체 출력print(exception)
# 문자를 입력한 경우 예외 발생
정수 입력 > hi
type(exception): <class 'ValueError'>
invalidliteralforint() withbase 10:'hi'
★ 프로그램 실행 중에 여러 개의 예외가 발생할 수 있다. 파이썬에서는 execpt 구문 뒤에 예외의 종류를 입력해서 예외를 구분할 수 있다.
try: 예외가 발생할 가능성이 있는 구문 except 예외의 종류A: 예외A가 발생했을 때 실행할 구문 except 예외의 종류B: 예외B가 발생했을 때 실행할 구문 except 예외의 종류C: 예외C가 발생했을 때 실행할 구문
list_a = [52, 273, 32, 72, 100]
# try except 구문으로 예외 처리try:
# 예외가 발생할 가능성이 있는 구문
input_num = int(input("정수 입력 > "))
print("list의 요소 :", list_a[input_num])
except ValueError:
# ValueError가 발생하는 경우print("정수를 입력해 주세요")
except IndexError:
# IndexError가 발생하는 경우print("인덱스의 값을 벗어났습니다.")
# 정수가 아닌 값 입력 : ValueError 발생
정수 입력 > Hello
정수를 입력해 주세요
# 리스트의 인덱스를 넘는 값 입력 : IndexError 발생
정수 입력 > 10
인덱스의 값을 벗어났습니다.
✏️예외를 구분할 때 각각의 except 구문 뒤에 예외 객체를 붙여 활용할 수 있다. as 키워드를 사용한다.
list_a = [52, 273, 32, 72, 100]
# try except 구문으로 예외 처리try:
# 예외가 발생할 가능성이 있는 구문
input_num = int(input("정수 입력 > "))
print("list의 요소 :", list_a[input_num])
except ValueError as excption:
# ValueError가 발생하는 경우print("정수를 입력해 주세요")
# 예외 객체 출력print("exception: ", excption)
except IndexError as excption:
# IndexError가 발생하는 경우print("인덱스의 값을 벗어났습니다.")
# 예외 객체 출력print("exception: ", excption)
# IndexError 발생시킨 경우
정수 입력 > 100
인덱스의 값을 벗어났습니다.
exception: list index out of range
★ except 구문으로 예외를 구분하는 경우, 예외 조건에 일치하는 것이 없다면 프로그램이 종료된다.
→ except 구문의 마지막에는 Exception 을 추가하여 프로그램의 종료를 막는 것이 좋다.
★ '이 코드에서 어떤 예외가 발생할 것인지' 잘 예측하는 것이 중요하다.
list_a = [52, 273, 32, 72, 100]
# try except 구문으로 예외 처리try:
# 예외가 발생할 가능성이 있는 구문
input_num = int(input("정수 입력 > "))
print("list의 요소 :", list_a[input_num])
예외발생()
except ValueError as excption:
# ValueError가 발생하는 경우print("정수를 입력해 주세요")
# 예외 객체 출력print("exception: ", excption)
except IndexError as excption:
# IndexError가 발생하는 경우print("인덱스의 값을 벗어났습니다.")
# 예외 객체 출력print("exception: ", excption)
except Exception as exception:
# ValueError 와 IndexError가 아닌 예외가 발생한 경우print("이외의 예외가 발생하였습니다.")
print(type(exception), exception)
# IndexError / ValueError가 아닌 예외 발생
정수 입력 > 1list의 요소 : 273
이외의 예외가 발생하였습니다.
<class 'NameError'> name '예외발생' isnotdefined
✏️ raise 구문: 예외를 강제로 발생시키고 싶을 때 사용하는 구문이다.
raise 예외 객체
Chapter 07. 모듈
[표준 모듈]
✏️ 모듈(module): 파이썬은 모듈 기능을 활용해 코드를 분리하고 공유한다. 모듈은 여러 변수와 함수를 가지고 있는 집합체 이다.
1️⃣ 표준 모듈 : 파이썬에 기본적으로 내장되어 있는 모듈
2️⃣ 외부 모듈 : 다른 사람들이 만들어서 공개한 모듈
✅ 모듈을 가져올 때는 import 구문을 사용하며, 코드의 가장 위에 작성한다.
import 모듈 이름
# 예시 : 수학과 관련된 모듈인 math모듈 가져오기 import math
✅ 모듈을 가져온 후 모듈에서 제공하는 변수나 함수를 사용할 수 있다.
import math
# 사인값을 구하는 내장 함수
math.sin(1)
# 0.8414709848078965
✅ from 구문
모듈을 읽어들일 때 from 구문을 사용해서, 모듈에서 가져오려는 변수나 함수 앞에 모듈 이름을 생략할 수 있다.
from 모듈 이름 import 가져오고 싶은 변수 또는 함수
from math import sin
# math 를 붙이지 않아도 사용이 가능해 졌다.
sin(1)
# 0.8414709848078965
✅ as 구문
모듈을 가져올 때 이름을 변경해서 사용하고 싶은 경우 as 구문을 사용한다.
from 모듈 as 사용하고 싶은 식별자
import math as m
# math 모듈을 m 이라는 이름으로 치환해서 사용한다.
m.sin(1)
# 0.8414709848078965
[기본 미션 : 구문 오류와 예외의 차이 설명하기 (p.379 1번 문제) ]
✅ 구문 오류는 프로그램이 실행되기 전에 발생하는 문법적인 오류이며, 해결하지 않으면 프로그램 자체가 실행 되지 않는다. 예외는 프로그램이 실행 중에 발생하는 오류로, 예외 처리 (ex. try except 구문) 를 통해 해결할 수 있다.
✅ 매개변수로 함수를 전달하기 위해 함수 구문을 작성하는 것이 번거롭기 때문에 파이썬에서 제공하는 방법
✅ 람다를 사용하면 코드를 깔끔하게 작성할 수 있고, 매개변수로 넣어진 함수를 파악하기도 쉽다.
lambda 매개변수 : 리턴값
# 람다 함수 선언
lambda_test = lambda x : x < 3
list_a = [1,2,3,4,5]
# 람다는 매개변수로 바로 넣을 수 있다.
output_a = map(lambda x : x * x, list_a)
print(list(output_a)) # [1, 4, 9, 16, 25]