파이썬 try , except문 사용하기 + 축약문 사용해서 정렬해보기, 백준 문제 풀기 (2주차 2일 TIL)

노우석·2022년 9월 14일
0

try , except문을 통해 예외처리하기

number = "num"

try: ## try 구문 안에서 에러가 발생할 경우 except로 넘어감
number = int(number) ## "num"을 숫자로 바꾸는 과정에서 에러 발생
except: ## 에러가 발생했을 때 처리
print(f"{number}은(는) 숫자가 아닙니다.")

에러가 발생하지 않으면 except를 패스한다.

에러 종류에 따라 다른 로직 처리

number = input()

try:
int(number)
10 / number

except ValueError: ## int로 변환하는 과정에서 에러가 발생했을 떄
print(f"{number}은(는) 숫자가 아닙니다.")

except ZeroDivisionError: ## 0으로 나누면서 에러가 발생했을 때
print("0으로는 나눌수 없습니다.")

except Exception as e: ## 위에서 정의하지 않은 에러가 발생했을 때(권장하지 않음)
print(f"예상하지 못한 에러가 발생했습니다. error : {e}")

##except 문법 또한 if / elif와 같이 연달아서 작성할 수 있다.

Error 종류를 정해서 그에 맞는 오류가 나왔을 때 출력

코드에 적용해보기

try:
calc = Cal()
calc.set_data(v,0) ##일부러 오류 메시지가 나오게 틀리게 넣은 함수

print(calc.plus())
print(calc.minus())
print(calc.mul())
print(calc.div())

except ValueError:
print("입력값 이 숫자가 아닙니다.")
except ZeroDivisionError:
print("0으로는 나눌수 없습니다.")
except NameError:
print("입력값 이 숫자가 아닙니다.")

축약문 활용법

기본

[list에 담길 값 for 요소 in 리스트]
numbers = [x for x in range(5)] # [0, 1, 2, 3, 4]

조건넣기

조건문은 축약식 뒷부분에 작성하며, 축약식이 True인 경우 list에 값이 담긴다.
even_numbers = [x for x in range(10) if x % 2 == 0] # [0, 2, 4, 6, 8]

실전코드 사용

from pprint import pprint ##pprint 를 사용하기 위한 모듈
people = [
("Blake Howell", "Jamaica", 18, "aw@jul.bw"),
("Peter Bowen", "Burundi", 30, "vinaf@rilkov.il"),
("Winnie Hall", "Palestinian Territories", 22, "moci@pacivhe.net"),
("Alfred Schwartz", "Syria", 29, "ic@tolseuc.pr"),
("Carrie Palmer", "Mauritius", 28, "fenlofi@tor.aq"),
("Rose Tyler", "Martinique", 17, "as@forebjab.et"),
("Katharine Little", "Anguilla", 29, "am@kifez.et"),
("Brent Peterson", "Svalbard & Jan Mayen", 22, "le@wekciga.lr"),
("Lydia Thornton", "Puerto Rico", 19, "lefvoru@itbewuk.at"),
("Richard Newton", "Pitcairn Islands", 17, "da@lasowiwa.su"),
("Eric Townsend", "Svalbard & Jan Mayen", 22, "jijer@cipzo.gp"),
("Trevor Hines", "Dominican Republic", 15, "ev@hivew.tm"),
("Inez Little", "Namibia", 26, "meewi@mirha.ye"),
("Lloyd Aguilar", "Swaziland", 16, "oza@emneme.bb"),
("Erik Lane", "Turkey", 30, "efumazza@va.hn"),
]

person =[ x for x in people if x[2] > 19]

person.sort(key= lambda x: x[2])

pprint(person)

##people 안에 있는 딕셔너리 내용을 중 x의 2번째 배열인 나이가 19세 이상인 사람들만 for문을 이용해 돌려서 출력한 값을 변수 person 안에 입력

##sort (정렬) 함수를 이용하는데 나이를 오름차순으로 정렬하기 위해서는 key값을 이용한 정렬이 필요 .sort(key= lambda x: 키값(나이))를 사용했다.

백준문제 풀기 8393번 n을 입력받고 0부터 n까지 총합 구하기

n = int(input())
sum =0
for i in range(0,n+1): ##for문을 이용해서 0부터 n+1까지 반복해서 출력
sum +=i ## sum문을 이용해서 n+1까지 반복한 i변수의 값을 합산함
print(sum)

백준문제 10950번 반복할 수만큼 입력받고 반복되는 수만큼 입력하고 합한 결과 받기

t= int(input()) ##반복할 수 입력받기
for i in range(t): ##for문을 이용해 입력받은 수만큼 반복
a, b = map(int, input().split()) ##합할 숫자 두개 입력 받기
c = a+b
print(c)

여러가지 문제들을 해보았지만 아직 문제내용을 보고 설계가 떠오르지 않는다. 더 많은 알고리즘 문제를 겪고 풀어봐야겠다.

profile
중요한건 버그에게 꺾이지 않는 마음

0개의 댓글