CH 17 MySelf, Integer, String, Http Class

Huisu·2021년 12월 6일
0

Python

목록 보기
17/17
post-thumbnail

Read Me

MySelfClass

  • Member method (or function) 1: getStudentID( )

    • 입력 파라메타: 없음
    • Return 값: 본인의 학번(10자리)을 나타내는 문자열 하나
  • Member method 2: getBirthday( )

    • 입력 파라메타: 없음
    • Return 값: 본인이 태어난 년도(4자리) + 월(2자리) + 일(2자리)의 문자열 하나
    • 예를 들어, 2001년 2월 3일은 20010203 임
    • 학교의 인포21(혹은 Portal) 시스템에 등록된 생년월일 이여야 함
  • Member method 3: getTermProject( )

    • 입력 파라메타: 없음
    • Return 값: 본인의 Term-Project 제목을 나타내는 문자열 하나

IntegerAccumulator Class

  • Member method 1: getNewInteger( )

    • 입력 파라메타: 정수 1개
    • Return 값: getNewInteger( )를 통해서 입력 받은 모든 정수들의 평균 값인 정수 하나
  • Member method 2: getAccumulatedIntegrers( )

    • 입력 파라메타: 없음
    • Return 값: getNewInteger( )를 통해서 입력 받은 모든 정수들을 저장한 리스트 하나
    • 입력 받은 순서 대로, 리스트 안에 저장되어 있어야 함
  • Member method 3: getAverage( )

    • 입력 파라메타: 없음
    • Return 값: getNewInteger( )를 통해서 입력 받은 모든 정수들의 평균 값인 정수 하나

General function

  • 함수 이름: calcIntegerFromString( )

    • 입력 파라메타: 숫자로 이루어진 문자열 (예: “555555”)
    • Return 값: 입력 파라메타의 각 자리 글자를 정수로 환산 후, 모두 정수를 더한 값인 정수 하나
    • 만약, 입력 파라메타로 받은 문자열에, 숫자를 나타내는 ‘0’~’9’가 아닌 글자(예를 들어, 알파 벳, 특수 기호 등)가 포함되어 있으면, 이 글자는 0으로 가정하고 계산함
    • 예를 들어, “555555”를 입력 파라메타로 받으면, return 값은 정수 30임
    • 예를 들어, “555a555”를 입력 파라메타로 받으면, return 값은 정수 30임
  • 함수 이름: shiftStringLeft( )

    • 입력 파라메타: 문자열 하나
    • Return 값: 문자열에 속한 글자의 위치가 다음처럼 변경된 새로운 문자열 하나
    • 입력 파라메타로 받은 문자열의 맨 왼쪽의 글자는 새로운 문자열에서 맨 오른쪽으로 이동함
    • 입력 파라메타로 받은 문자열 중 맨 왼쪽의 글자가 아닌 경우는, 왼쪽으로 한칸씩 이동함
    • 예를 들어, 입력 파라메타로 “ABCDEF”를 받으며, return 값은 “BCDEFA” 임

    StringAcculumator

  • Member method 1: putNewString( )

    • 입력 파라메타: 문자열 하나
    • Return 값: putNewString()를 통해서 입력 받은 문자열의 총 갯수인 정수 하나
    • 내부 동작: 입력 파라메타로 받은 문자열을 class 내부에서, 입력 받은 순서대로 저장함
  • Member method 2: getMaxString( )

    • 입력 파라메타: 없음
    • Return 값: class 내부에서 저장한 문자열 중 가장 큰 문자열 하나
  • Member method 3: getSortedStrings( )

    • 입력 파라메타: 없음
    • Return 값: class 내부에 저장한 문자열들을 작은 것부터 큰 순서로 정렬한 리스트 하나
  • Member method 4: getOriginalStrings( )

    • 입력 파라메타: 없음
    • Return 값: class 내부에 저장한 문자열들을 입력 받은 순서대로 정렬한 리스트 하나
    • 가장 먼저 입력 받은 문자열이 맨 앞에 위치함
    • 가장 늦게 입력 받은 문자열이 맨 뒤에 위치함

HttpVisitCounter

  • Member method: startHttpServer( )
    • HttpVisitCounter 객체의 HTTP 서버 기능을 답안을 작성하는 컴퓨터(localhost)에서 활성화(= activate, start)
    • HTTP 서버로서, 9000번 포트를 통해서 http client의 HTTP Request 요청을 받음
    • HTTP 서버는 HTTP Request를 통해서 전달받는 문자열을 모두 순서대로 저장함
      예를 들어 http://localhost:9000/apple 이면 apple을 문자열로 저장함
    • HTTP 서버는 http client의 HTTP Request에 대한 응답(HTTP Response)로 지금까지 http client가 HTTP Request로 전달한 문자열 전체를 응답으로 제공함
    • 예를 들면, 다음과 같이 동작함
    • 위의 1~3번 HTTP Request 요청 각각에 대해서, HTTP 서버는 http client인 웹 브라 우저 화면에 다음의 문자열이 나타나도록 HTTP Response를 전달함
      • HTTP Requests: apple.
      • HTTP Requests: apple, banana.
      • HTTP Requests: apple, banana, orange.

Code

solution

class MySelfClass:
    studentID = 0
    birthday_year = ""
    birthday_month = ""
    birthday_day = ""
    termproject = ""
    def getStudentID(self):
        if (len(str(self.studentID)) != 10):
            return False
        else:
            return str(self.studentID)

    def getBirthday(self):
        if(int(self.birthday_month) < 10):
            self.birthday_month = "0" + self.birthday_month
        if(int(self.birthday_day) < 10):
            self.birthday_day = "0" + self.birthday_day
        return self.birthday_year + self.birthday_month + self.birthday_day
    
    def getTermProject(self):
        return self.termproject



class IntegerAccumulator:
    integer = []
    def getNewInteger(self, integer):
        self.integer.append(integer)
        average = sum(self.integer) / len(self.integer)
        return average

    def getAccoumulatedIntegers(self):
        return self.integer

    def getAverage(self):
        return self.getNewInteger()



def calcIntegerFromString(number):
    number_list = []
    for i in range(0, len(number)):
        if ord(number[i]) in range(48, 58):
            number_list.append(int(number[i]))
    return sum(number_list)


def shifhStringLeft(string):
    new_string_list = []
    for i in range(1, len(string)):
        new_string_list.append(string[i])
    new_string_list.append(string[0])
    new_string = ""
    for i in range(0, len(new_string_list)):
        new_string += str(new_string_list[i])
    return new_string



class StringAccumulator:
    string = []
    size = []
    def putNewString(self, string):
        self.string.append(string)
        self.size.append(len(string))
        return len(string)

    def getMaxString(self):
        max_length = max(self.size)
        max_index = self.size.index(max_length)
        return self.string[max_index]
    
    def getSortedStrings(self):
        copy_size = self.size[:]
        copy_string = self.string[:]
        maxsize = max(self.size)
        for i in range(0, len(self.string) - 1):
            min_index = self.size.index(min(copy_size))
            copy_string[i], copy_string[min_index] = copy_string[min_index], copy_string[i]
            self.size[i], self.size[min_index] = self.size[min_index], self.size[i]
            copy_size[i], copy_size[min_index] = maxsize + 1, copy_size[i]
        return copy_string          

    def getOriginalStrings(self):
        return self.string



class HttpVisitCounter:
    request = []
    def startHttpServer(self, http):
        if (http[0:4] == "http" and http[17:21] == "9000"):
            self.request.append(http[22:])
        print("HTTP Requests:", end=" ")
        for i in range(0, len(self.request)):
            print(self.request[i], end = " ")
        print()

test

from solution import *
if __name__ == '__main__':

    ### MyInteger Class ###
    print("### MySelf Class ###")
    myself = MySelfClass()
    myself.studentID = 2019100907
    myself.birthday_year = "2000"
    myself.birthday_month = "5"
    myself.birthday_day = "2"
    myself.termproject = "군집화로 유의 단어 판별하기"
    print()

    # getNewInteger method
    print("getNewInteger method")
    print(myself.getStudentID())
    print()

    # getAccumulatedIntegers method
    print("getAccumulatedIntegers method")
    print(myself.getBirthday())
    print()

    # getTermProject method
    print("getTermProject method")
    print(myself.getTermProject())
    print()
    print()
    print()


    ### General Function ###
    print("General Function")
    print()

    # calcIntegerFromString method
    print("calcIntegerFromString method")
    print(calcIntegerFromString("555555"))
    print(calcIntegerFromString("555a555"))
    print()

    # shiftStringLeft method
    print("shiftStringLeft method")
    print(shifhStringLeft("ABCDEF"))
    print()
    print()
    print()


    ### StringAccumulator Class ###
    print("StringAccumulator Class")
    string = StringAccumulator()
    print()

    # putNewString method
    print("putNewString method")
    print(string.putNewString("abcdef"))
    print(string.putNewString("gh"))
    print(string.putNewString("ijk"))
    print()

    # getMaxString method
    print("getMaxString method")
    print(string.getMaxString())
    print()

    # getSortedStrings method
    print("getSortedStrings method")
    print(string.getSortedStrings())
    print()

    # getOriginalStrings method
    print("getOriginalStrings method")
    print(string.getOriginalStrings())
    print()
    print()
    print()



    ### HttpVisitCounter Class ###
    print("### HttpVisitCounter Class")
    http = HttpVisitCounter()
    print()

    # startHttpServer method
    print("startHttpServer method")
    http.startHttpServer("http://localhost:9000/apple")
    http.startHttpServer("http://localhost:9000/banana")
    http.startHttpServer("http://localhost:9000/orange")

0개의 댓글