Eat Study Love

먹고 공부하고 사랑하라

SW 만학도/Jump to Python

Jump To Python 함수!Function! 4장 연습문제 [5]

eatplaylove 2022. 12. 15. 13:16

함수영역까지 왔다.

클래스, 모듈 소환해서 사부작 사부작 할 수 있는 본게임에 앞서 마지막 몸풀기 단계라는 마음으로 연습문제를 풀어보자.

 

# Q1. 주어진 자연수가 홀수인지 짝수인지 판별해 주는 함수(is_odd)를 작성해 보자.
 
# def is_odd(x):
#     if x % 2 == 0:
#         print(f'{x}는 짝수입니다.')
#     else:
#         print(f'{x}는 홀수입니다.')

# is_odd(2)
# is_odd(5)

가볍다 ㅎㅎ

 

# Q2. 입력으로 들어오는 모든 수의 평균값을 계산해 주는 함수를 작성해 보자. (단 입력으로 들어오는 수의 개수는 정해져 있지 않다.)
# ※ 평균 값을 구할 때 len 함수를 사용

가볍지 않다.. 뭔가 문제 읽고 *args로 변수를 랜덤개수 만큼 받아야 겠다고 생각은 했는데, 함수코드를 작성하면서 뭔가 틀릴 거 같은 예감이 팍팍 들었는데 역시나 Error~

 

def cal_average(*args):
#     average = sum(*args) / len(*args)
#     print("입력값의 평균은 %s입니다."%average)

# cal_average(2,3,5,6)

*args가 변수 1개로 들어올 수도 있어서 위와 같이 error가 뜬 모양이다.

 

근데, sum과 len에 *args -> args로 고치니까 또 결과는 뜬다.

def cal_average(*args):
#     average = sum(args) / len(args)
#     print("입력값의 평균은 %s입니다."%average)

# cal_average(2,3,5,6)

 # print(f'평균은 {average:.0f}')

거슬리는 소수점 없애버리기

 

해설은~

 

def cal_aver(*args):
    result=0
    for x in args:
        result+=x
    return result/len(args)

뭐, 맥락은 비슷하다.

 

# Q3. Input을 받는 다음 함수의 오류를 수정해보라
 
# input1 = input("첫 번째 숫자를 입력하세요:")
# input2 = input("두 번째 숫자를 입력하세요:")

# total = input1 + input2
# print("두 수의 합은 %s 입니다" % total)
# 이 프로그램을 수행해 보자.

# 첫번째 숫자를 입력하세요:3
# 두번째 숫자를 입력하세요:6
# 두 수의 합은 36입니다
# 3과 6을 입력했을 때 9가 아닌 36이라는 결괏값을 돌려주었다. 이 프로그램의 오류를 수정해 보자.

# ※ int 함수를 사용해 보자.

input값을 숫자로 바꿔주기만 하면 되시죠~

 

# input2 = input("두 번째 숫자를 입력하세요:")

# total = int(input1) + int(input2)
# print("두 수의 합은 %s 입니다" % total)

input1 = int(input("첫 번째 숫자를 입력하세요:"))
input2 = int(input("두 번째 숫자를 입력하세요:"))

위와 같이 요런식으로 해도 무방하다.

 

 

# # Q4. 다음 중 출력 결과가 다른 것 한 개를 고르시오.
# '''
# 1. print("you" "need" "python")
# 2. print("you"+"need"+"python")
# 3. print("you", "need", "python")
# 4. print("".join(["you", "need", "python"]))
# '''

 

답은 3번 -> 콤마로 묶이면 띄어쓰기가 자동추가된다.

 

# Q5. 다음은 "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"라는 문장을 출력하지 않는다.
우리가 예상한 값을 출력할 수 있도록 프로그램을 수정하라.

Write 했으면 닫아야지요!

 
# f1 = open("test.txt", 'w')
# f1.write("Life is too short")
# f1.close()

# f2 = open("test.txt", 'r')
# print(f2.read())

 

# Q6. 사용자의 입력을 파일(test.txt)에 저장하는 프로그램을 작성하라.
(단 프로그램을 다시 실행하더라도 기존에 작성한 내용을 유지하고 새로 입력한 내용을 추가해야 한다.)

위 예제에다가 추가했다. 'a'로 추가할 내용을 더하면 된다.

 

f3 = open('test.txt','a')
# f3.write('\nI add this comment')
# f3.close()

참고로, 이상태에서 바로 test 파일을 읽어보려니까 되지 않았다.

알고보니, 파일을 읽으려면 다시 open('test.txt','r') 요렇게 읽기 형태로 들어가서 읽어야 한다는 것.

 

++) 그리고, 'r' 읽기모드 내에서는 파일이 최초 한 번 밖에 읽히지 않는 것 같다. while, for, f.read() 3가지 방법을 써서 읽는 걸 다 표현하려고 했는데 맨 앞에 것만 실행되고 나머지 읽기 함수는 SKIP되더라는 ㅠㅠ

f3 = open('test.txt','r')

# for x in f3.readlines():
#     print(x.strip('\n'))

# print('다르게 읽어보기\n')
# print(f3.read())

# print('또 다르게 읽어보기\n')
# while True:
#     line = f3.readline()
#     print(line,end='')
#     if not line:
#         break
    # print(line)

f3.close()

 

# Q7. 다음과 같은 내용을 지닌 파일 test.txt가 있다. 이 파일의 내용 중 "add"라는 문자열을 "subtract"으로 바꾸어서 저장해 보자.
# '''
# Life is too short
# I add this comment
# ※ replace 함수를 사용하라.

흠.. Reaplace 함수를 어떻게 쓰지 .. 대충 막 써봤더니 바로 Error

# f = open('test.txt','r')
# 수정 = f.read()
# f.close

# 수정=수정.replace('add','subtract')

# f = open('test.txt','w')
# f.write(수정)
# f.close

# f = open('test.txt','r')
# print(f.read())
# f.close
 

해설을 봤다ㅠㅠ read를 통해 함수 전체를 read()를 이용해 뽕뽑아오고(readline은 한 줄 씩 읽는거고 readlines는 list형태로 정보를 저장) txt파일을 close 한 뒤에 밖에서 replace 작업을 한 뒤, write로 파일에 접근해서 전체를 수정본으로 덮어버리는 작업을 하는 것이다.

 

읽고 쓰기 한 번에 하는 함수는 없는 건가, 아니면 내가 아직 모르는건가..

읽기 + 쓰기 + 기존데이터 건들지 않고 수정 -> 을 할때마다 계속 파일을 원하는 옵션에 맞게 접근하고 닫고 접근하고 닫고 하는게 너무 구찮다.

 

초심자 주제에 귀찮다니;; 좀 건방지긴 하넹

 

얼른 실력 쌓아서 코딩 팍팍팍 하고 싶다.

 

- E. O. D -