Python : Repl.it - 답안 비교 #2

채록·2021년 1월 17일
0

짜투리

목록 보기
12/26
post-thumbnail

!!!!!! 이제부터 최고 어려웠음 !!!!!!

따라서 내 코드 항목 대신 이해 과정을 첨부한다.

아래 문제들에 대한 개념은 따로 Velog에 작성할것!!



#53. Nested Function

극악 #1
Decorator를 사용해 특정 함수에 대한 결과를 출력하게 하는 문제이다.

처음에 주어진 함수는

def greeting():
  return "Hello, "
  
greeting()

이었다.
.... 이게대체 무슨말인지 조차 몰랐다. 여기서 뭘 어떻게 건드여야 하지 ,,,?

* 이해 하기

문제에서는 다음과 같이 요구했다.
Greeting함수가 호출 되었을 때 decorator 함수에 parameter 값이 greeting 함수 리턴값의 다음에 붙혀져서 리턴되어야 합니다.

음... 그래그래.. 음.... 데코레이터,,, 파라미터값,,, 뭐가 뭐시기의 다음에,,,

모르겠어!!!!! 정말 하나도 모르겠!!!!!!!!! 어!!!!!!!!!!!!!!!!!
정말이지 수 L의 눈물을 흘리며 계속,, 매달렸다.

요구사항을 하나씩 뜯어보면

    1. Greeting 함수가 호출 되었을 때 이 말은 Greeting 함수가 호출될 때는 무언가 조건이 있다는 뜻이다.

    1. decorator 함수에 parameter값이 (decorator 함수 라고 해야 더.. 이해가 잘되는데.. 흠흠!) greeting 함수와 연관되어 있는 decorator 함수가 존재한다는 것을 의미한다.

    1. greeting 함수 리턴값의 다음에 붙혀져서 decorator 함수의 결과는 그 속에 속한 Greeting함수의 결과를 반환하면서 그 뒤에 자신의 return 값을 덧붙인다는 것을 의미한다.

    1. 리턴되어야 합니다. 리턴!!

* 코드 작성하기

따라서 처음에 주어진 함수에 decorator를 달아줘야 한다.

@welcoe_decorator
def greeting():
  return "Hello, "

그리고,, 처음에 적혀있던 코드들 중 마지막 줄의 greeting()은 답을 작성할땐 필요가 없는 코드였다 하하하!

그리고 나서 welcome_decorator함수에 대한 코드를 작성했다.

def welcome_decorator(hello):
  def wrapper():
    return hello() + "welcome to WECODE!"
  return wrapper

헤맷던 부분이 새로운 함수를 만들어 주어야 했던 부분이다. 생각치도 못했다! 여기다가 또 greeting함수를 넣어야 하는줄;;; 책과 영상, 자료를 정말많이 뒤졌다 (그래도 다 이해 못한거같다;;)

한줄씩 설명하자면

    1. def welcome_decorator(hello): welcome_decorator함수를 정의내렸다. 그리고 ()안의 hello는 그냥 임의의 단어를 적은 것이다.
    1. def wrapper(): return hello() + "welcome to WECODE!" 새로운 함수 wrapper를 정의내렸다. 이는 hello()의 결과 + "welcome to WECODE!" 를 리턴한다.
    1. return wrapper 위 2번의 최종 결과를 return 하는 welcome_decorator 함수!

* 코드 완성

def welcome_decorator(hello):
  def wrapper():
    return hello() + "welcome to WECODE!"
  return wrapper


@welcome_decorator
def greeting():
  return "Hello, "

위 문제를 정말로 이해는 했지만 막상 설명이 막히는 모습을 보니 내께 덜 됐나보다 ㅠㅜ! 복습복습





#55. Class

먼저 문제풀이에 앞서

이 감정의 연속이었다. 괜히 이 사진이 올려진게 아니야.. 이거 진짜야... Class 지들끼리 뭐라하는데 나 안껴줌...


* 이해 하기

이해 (못) 하기 이다. 진짜로...

문제의 요구사항은

Database 클래스 내부에 다음의 메소드들을 구현해주세요.

  • insert
  • select
  • update
  • delete

이었다.

* 코드 작성하기

이건 한줄한줄 작성하면서 그나마 이해하는 척은 할 수 있다.

1. Database라는 class 정의

class Database
  def __init__(self, name, size):
    self.name = name
    self.size = size
    self.db = { }

db라는 빈 dictionary를 추가해 주어야 이후 문제를 풀 수 있다.

2. insert 메소드 구현

여기서 insert 메소드는 다음과 같은 조건이 있다.
insert 메소드는 self 외에 2개의 parameter를 받는다. (field, value)
만일 내부 dictionary의 총 사이즈가 database 클래스의 size 속성보다 크면 더이상 새로운 값들을 저장하지 말아야 한다.

두번째 조건이 몬말인지 1도 모르겠다.

1) 내부 dictionary의 총 사이즈

len(self.db)를 의미한다.

2) database 클래스의 size 속성

self.size

따라서 1이 2보다 작을때만 새로운 값을 저장한다.

if len(self.db) < self.size:
  self.db[field] = value

3. select 메소드 구현

조건은 다음과 같다.
select 메소드는 self 외에 1개의 parameter를 받는다. (field)
내부적으로 데이터를 저장하고 있는 dictionary에서 해당 field에 해당하는 키와 연결되어 있는 값을 리턴해주어야 한다.
만일 해당 필드값으로 저정되어 있는 값이 없다면 None 을 리턴한다.

1) 1개의 parameter

def select(self, field):

2) 해당 field에 해당하는 키와 연결되어 있는 값을 리턴

if field in self.db:
  return self.db[field]

3) 없다면 None

else:
  return None

4. update 메소드 구현

조건은 다음과 같다.
Self 외에 2개의 parameter를 받는다. (field, value)
이미 저장되어 있는 값을 수정하는 메소드
만일 field값에 해당하는 데이터가 저장되어 있지 않으면 아무것도 하지 않는다.
특별한 return 값은 없다.

1) 2개의 parameter

def update(self, field,  value):

2) 3) 수정 메소드, 해당 데이터가 저장되어 있지 않으면 아무것도 하지 않는다.

이 말은 즉, 해당 데이터가 저장되어 있으면 그걸로 수정한다.

if field in self.db:
  self.db[field] = value

5. delete 메소드 구현

조건은 다음과 같다.
delete 메소드는 self 외에 1개의 parameter를 받는다. (field)
Field 는 지우고자 하는 데이터의 필드명이다.
field값에 해당하는 데이터가 저장되어 있지 않으면 아무것도 하지 않는다.
특별한 return 값은 없다.

1) 1개의 parameter

def delete(self, field):

2) 3)

즉, 해당 데이터가 있으면 그 데이터를 삭제 한다.

if field in self.db:
  del self.db[field]

* 코드 완성

위 코드들을 이제 입력하면 된다..
중첩함수나 decorator 처럼 관계성을 생각하는 것도 아니고, 말 그대로 구현하면 되는건데 정말 시간이 오래걸렸다ㅠ





#58. Exception

이건 코드는 딱히 리뷰할 것이 없고, 개념 리뷰에서 함께 언급하겠다.

profile
🍎 🍊 🍋 🍏 🍇

0개의 댓글