연습 문제 출처: 📕 초보자를 위한 파이썬 300제
연습 문제 풀이: 기초 300 문제 같이 풀어보기 291번부터 300번까지
바탕화면에 '매수종목1.txt' 파일을 생성한 후 다음과 같이 종목코드를 파일에 써보세요.
005930
005380
035420
f = open('C:/Users/Desktop/매수종목1.txt', 'wt', encoding='utf-8)
f.write('005930\n')
f.write('005380\n')
f.write('035420\n')
정답👏 이 아니라 ... f.close()를 안 해주었습니다.
f = open('C:/Users/Desktop/매수종목2.txt', 'wt', encoding='utf-8)
f.write('005930\n')
f.write('005380\n')
f.write('035420\n')
f.close()
쩝😅 열면 닫자. 열면 닫자. 열면 닫자.
바탕화면에 '매수종목2.txt' 파일을 생성한 후 다음과 같이 종목코드와 종목명을 파일에 써보세요.
005930 삼성전자
005380 현대차
035420 NAVER
f = open('C:/Users/Desktop/매수종목2.txt', 'wt', encoding='utf-8)
f.write('005930 삼성전자\n')
f.write('005380 현대차\n')
f.write('035420 NAVER\n')
f.close()
정답 👏
바탕화면에 '매수종목.csv' 파일을 생성한 후 다음과 같이 종목코드와 종목명을 파일에 써보세요. 인코딩은 'cp949'를 사용해야합니다.
f = open('C:/Users/Desktop/매수종목.csv', 'wt', encoding='cp949')
엑... 이건 배운게 맞을까요?
csv 파일을 사용하는 방법에 대한 게시글을 찾았습니다. 점프투파이썬에서 배우진 않았어도 알아야 하는 것 같네요😭 당장 달려가서 보기
import csv
f open('C:/Users/Desktop/매수종목.csv', 'wt', encoding='cp949', newline='')
writer = csv.writer(f)
writer.writerow(['종목명', '종목코드', 'PER'])
writer.writerow(['삼성전자', '005930", 15.59])
writer.writerow(['NAVER', '035420', 55.82])
f.close()
라고 합니다.
※ csv 모듈에서 데이타를 쓸 때 각 라인 뒤에 빈 라인이 추가되는 문제가 있는데, 이를 없애기 위해 (파이썬 3 에서) 파일을 open 할 때 newline='' 와 같은 옵션을 지정해줘야 한다.
바탕화면에 생성한 '매수종목1.txt' 파일을 읽은 후 종목코드를 리스트에 저장해보세요.
005930
005380
035420
f = open('C:/Users/Desktop/매수종목1.txt', 'wt', encoding='utf-8)
lines = f.readlines()
codes = []
for line in lines:
code = line.strip() # '\n'
codes.append(code)
print(codes)
f.close()
😳...
파일 안의 모든 내용을 읽어오는 readlines를 사용하여 lines에 담아주었고, for문 반복을 통해 strip을 통해 줄바꿈을 없애주었고, code에 담은 걸 codes란 빈 리스트에 추가해주었습니다.
와우👏
바탕화면에 생성한 '매수종목2.txt' 파일을 읽은 후 종목코드와 종목명을 딕셔너리로 저장해보세요. 종목명을 key로 종목명을 value로 저장합니다.
005930 삼성전자
005380 현대차
035420 NAVER
f = open('C:/Users/Desktop/매수종목2.txt', 'r', encoding='utf-8)
lines = f.readlines()
dicts = {}
for line in lines:
line = line.strip() # '\n' 제거
k, v = line.split()
# print(k,v)
dicts[k] = v
print(dicts)
f.close()
위와 같이 모든 내용을 읽어와서 lines에 담습니다. 빈 딕셔너리 dicts를 만들어 주었습니다. strip을 통해 줄바꿈 제거, split을 통해 공백 제거를 해주었고, 딕셔너리의 key, value를 dicts[k] = v를 통해 key를 value로 저장해주는 과정을 거칩니다.
😳...어렵네요!
문자열 PER (Price to Earning Ratio) 값을 실수로 변환할 때 에러가 발생합니다. 예외처리를 통해 에러가 발생하는 PER은 0으로 출력하세요.
per = ["10.31", "", "8.00"]
for i in per:
print(float(i))
per = ["10.31", "", "8.00"]
for i in per:
try:
print(float(i))
except:
print(0)
정답👏
문자열로 표현된 PER 값을 실수로 변환한 후 이를 새로운 리스트에 저장해보세요.
per = ["10.31", "", "8.00"]
for i in per:
print(float(per))
per = ["10.31", "", "8.00"]
new_per = []
for i in per:
try:
data = float(i)
except:
data = 0
new_per.append(data)
print(new_per)
정답👏
어떤 값을 0으로 나누면 ZeroDivisionError 에러가 발생합니다. try ~ except로 모든 에러에 대해 예외처리하지 말고 ZeroDivisionError 에러만 예외처리해보세요.
try:
b = 3 / 0
except ZeroDivisionError:
print("0으로 나눌 수 없습니다.")
정답👏
다음과 같은 코드 구조를 사용하면 예외 발생 시 에러 메시지를 변수로 바인딩할 수 있습니다.
try:
실행코드
except 예외 as 변수:
예외처리코드
리스트의 인덱싱에 대해 에러를 출력해보세요.
data = [1, 2, 3]
for i in range(5)
print(data[i])
data = [1, 2, 3]
for i in range(5):
try:
print(data[i])
except IndexError as e:
print(e)
정답👏
파이썬 예외처리는 다음과 같은 구조를 가질 수 있습니다.
try:
실행 코드
except:
예외가 발생했을 때 수행할 코드
else:
예외가 발생하지 않았을 때 수행할 코드
finally:
예외 발생 여부와 상관없이 항상 수행할 코드
아래의 코드에 대해서 예외처리를 사용하고 try, except, else, finally에 적당한 코드를 작성해봅시다. else와 finally는 적당한 문구를 print하시면 됩니다.
per = ["10.31", "", "8.00"]
for i in per:
print(float(per))
작성한 코드 👇
per = ["10.31", "", "8.00"]
for i in per:
try:
print(float(i))
except:
print(0)
else:
print("실수로 변환 성공")
finally:
print("문자열은 실수 변환이 불가능합니다!")
정답에 제시된 코드
per = ["10.31", "", "8.00"]
for i in per:
try:
print(float(i))
except:
print(0)
else:
print("clean data")
finally:
print("변환 완료")
구조가 같으니 잘 한 것 같군요!
정답👏
저는 try, except, else, finally 구조에 많이 익숙해질 연습이 필요해보입니다.
그래도 모두