Preface
7번 문제를 풀던 중 도저히 해결 방법이 떠오르지 않아 해설을 참고했다.
해설에선 파일을 열어 전체 내용을 읽은 후 쓰기 모드(w)를 통해 문자열을 고쳤지만, 해당 방법은 기존의 문자열을 모두 삭제한 후 새로운 내용을 작성하는 것이므로, 많은 내용이 담겨있는 파일을 수정할 땐 불필요한 부분까지 교체되는 등의 문제가 발생할 것 같다는 생각이 들었다.
이전 포스팅에서도 언급했듯 함수를 이용한 파일 수정은 실용성과 더불어 몇 가지 문제가 있다고 생각하는데, 현업에서 실제로 파일 수정에 함수를 사용하는지, 사용한다면 그 이유는 무엇인지 궁금하다.
1. 주어진 자연수가 홀수인지 짝수인지 판별해 주는 함수(is_odd)를 작성해 보자.
→ 답안
def is_odd(num):
if num % 2 == 0:
return '짝수입니다.'
else:
return '홀수입니다.'
print(is_odd(4))
→ 해설 : 답안과 동일
2. 입력으로 들어오는 모든 수의 평균 값을 계산해 주는 함수를 작성해 보자. (단 입력으로 들어오는 수의 개수는 정해져 있지 않다.)
→ 답안
def mean(*args):
result = 0
for i in args:
result += i
return result / len(args)
print(mean(1,2,3,4,5))
→ 해설 : 답안과 동일
3. 다음은 두 개의 숫자를 입력받아 더하여 돌려주는 프로그램이다.
input1 = input("첫번째 숫자를 입력하세요:")
input2 = input("두번째 숫자를 입력하세요:")
total = input1 + input2
print("두 수의 합은 %s 입니다" % total)
이 프로그램을 수행해 보자.
첫번째 숫자를 입력하세요:3
두번째 숫자를 입력하세요:6
두 수의 합은 36 입니다
3과 6을 입력했을 때 9가 아닌 36이라는 결괏값을 돌려주었다. 이 프로그램의 오류를 수정해 보자.
→ 답안
input1 = int(input("첫번째 숫자를 입력하세요:"))
input2 = int(input("두번째 숫자를 입력하세요:"))
total = input1 + input2
print("두 수의 합은 %s 입니다" % total)
→ 해설 : 해설에선 변수 선언 부분이 아닌, total 부분에서 각각의 input 앞에 int를 삽입했다.
4. 다음 중 출력 결과가 다른 것 한 개를 골라 보자.
print("you" "need" "python")
print("you"+"need"+"python")
print("you", "need", "python")
print("".join(["you", "need", "python"]))
→ 답안 : 3번
→ 해설 : 답안과 동일 (컴마를 사용하면 공백이 삽입됨)
5. 다음은 "test.txt"라는 파일에 "Life is too short" 문자열을 저장한 후 다시 그 파일을 읽어서 출력하는 프로그램이다.
f1 = open("test.txt", 'w')
f1.write("Life is too short")
f2 = open("test.txt", 'r')
print(f2.read())
이 프로그램은 우리가 예상한 "Life is too short"라는 문장을 출력하지 않는다. 우리가 예상한 값을 출력할 수 있도록 프로그램을 수정해 보자.
→ 답안
f1 = open("test.txt", 'w')
f1.write("Life is too short")
f1.close()
f2 = open("test.txt", 'r')
print(f2.read())
f2.close()
→ 해설 : 답안과 동일 (파일을 닫지 않은 상태로 다시 열면 오류 발생!)
6. 사용자의 입력을 파일(test.txt)에 저장하는 프로그램을 작성해 보자. (단 프로그램을 다시 실행하더라도 기존에 작성한 내용을 유지하고 새로 입력한 내용을 추가해야 한다.)
→ 답안
f3 = open("test.txt", 'a')
f3.write('haha')
f3.close()
→ 해설 : 추가 모드로 코드를 작성한 것은 답안과 동일하지만, 나는 문자열 한 개를 기존의 파일에 추가시킨 반면, 해설에선 input을 사용하여 프로그램을 실행시킬 때마다 문자열을 추가할 수 있도록 했다.
user_input = input("저장할 내용을 입력하세요:")
f = open('test.txt', 'a') # 내용을 추가하기 위해서 'a'를 사용
f.write(user_input)
f.write("\n") # 입력된 내용을 줄 단위로 구분하기 위해 줄 바꿈 문자 삽입
f.close()
7. 다음과 같은 내용을 지닌 파일 test.txt가 있다. 이 파일의 내용 중 "java"라는 문자열을 "python"으로 바꿔보자.
Life is too short
you need java
→ 해설 : 나는 파일을 추가 모드(a)로 파일을 연 상태로 문자열을 바꾸려고 해봤지만, 추가 모드는 기존의 내용에 다른 내용을 덧붙이는 기능을 수행하므로 원하는 문자열이 출력되지 않았다. 다양한 고민을 해도 해결 방법을 찾을 수 없어 해설을 참고했다.
f = open('test.txt', 'r')
body = f.read()
f.close()
body = body.replace('java', 'python')
f = open('test.txt', 'w')
f.write(body)
f.close()
출처 : 04장 연습문제 - 점프 투 파이썬 (wikidocs.net)
댓글