2021.10.21 작성
오늘부터 위코드 준비를 위한 사전 공부 기록을 남기려고 한다.
사실 이전부터 공부를 해오기는 했지만 기록을 따로 남겨두지는 않았기에 이제라도 기록을 해보려고 한다.
지금은 사무 보조로 일을 하고 있기에 공부시간이 많이 없는 상황이다. 그래서 점심시간을 활용하여 조금이라도 공부를 하고, 퇴근 후에는 이렇게 블로그에 기고를 할 계획이다.
현재는 '점프투파이썬'으로 파이썬 문법 공부를 마친 상태이고, 마지막으로 종합문제만 남았다
오늘 푼 종합문제는, 역순 저장과 평균값 구하기이다.
1. 파일을 읽어들여 파일 내용을 역순으로 바꾸어 새로 저장하라
with open("abc.txt", 'r') as f: # 파일을 읽는다
a = f.readlines() # readlines()를 이용하여 파일 내용을 리스트로 저장한다
a.reverse() # reverse() 리스트를 뒤집어서 저장. 반환값 x.
with open("abc.txt", 'w') as f:
for text in a: # 리스트의 문자를 하나씩 꺼내어 덮어쓴다
text = text.strip() # 개행문자를 지운다
f.write(text) # 새로 쓴다
f.write("\n")
2. sample.txt 내의 숫자를 읽어들여 총합을 구하고 평균을 구하여 평균을 result.txt에 저장하라
with open("sample.txt", 'r') as f: # read sample.txt
a = f.readlines()
total = 0
for num in a:
num = int(num) # convert string to integer
total += num # get total
avg = str(total / len(a)) # get average which has been converted to string. since write() only takes string or other buffer.
with open("result.txt", 'w') as f:
f.write(avg) # write results in result.txt
오늘 이 두 문제에서 배운 점은 다음과 같다.
첫번째. reverse() 는 list의 함수로, 반환 값 없이 리스트의 원소 순서를 뒤바꾼다.
reversed()라는 것도 있는데, 이것은 list 함수가 아닌 내장 함수로 역 이터레이터를 반환한다.
이때 순간적으로 reverse 함수를 적용하기 전 리스트 a와 a.reverse()가 같은 주소값을 가진다고 생각하여 터미널에 확인해보니 주소값이 다르게 나왔다. a의 값을 바꾸고 새로운 주소에 저장하여 그곳을 가리키는 형식으로 변환을 주는 것이라고 이해하였다. (맞게 이해한거 맞나..?)
python tutor를 통해 확인해본 결과이다. 내가 이해하는데에 별 도움은 안된 것 같지만 뭐...
(혹시 잘못 이해한거라면 댓글 남겨주시면 감사하겠습니다..)
두번째. write()은 문자열 자료형만 입력 가능하다는 것이다. 어떻게 보면 당연한거지만 아무 생각 없이 write에 정수형인 변수를 그대로 넣어놓고 저장이 되기를 바라고 있었다. 결과는 당연 에러 ㅎㅎㅎ 정수형인 값을 문자열로 바꾸어 새로 저장하였다.
참고: 점프투파이썬, python tutor, pep8