CH 16 MyInteger Class
Read Me
MyIntegerClass
-
init()
- MyInteger 객체의 초기화 값으로 사용하기 위한 입력 parameter를 하나 전달 받음
- 입력 parameter가 주어지지 않으면 초기화 값으로 정수 0을 사용
- 입력 parameter는 정수(int), 문자열(str), 실수(float) 및 MyInteger 객체를 입력 받을 수 있음
- 입력 parameter가 정수가 아닌 문자열 혹은 실수 혹은 MyInteger 객체인 경우는 내부적으로 정수로 변환하여 초기화 값으로 사용함
- 입력 parameter가 정수/실수/문자열 혹은 MyInteger 객체가 아닌 경우는 초기화 값을 정수 0으로 설정함
- 이렇게 초기화된 값(이후 current value로 칭함)은 pressAdd()와 pressSub()를 통해서 업데이트 함
-
eq()
- Python의 object 클래스의 기본 method를 개선
- MyInterger 클래스 기반 객체를 정수/실수/문자열/MyInteger객체와 비교한 결과를 True/False 중 하나로 return 함
- 실수와 비교하는 경우는, 실수 값을 정수 값으로 변환하여 비교
- 문자열과 비교하는 경우는, 문자열을 정수 값으로 변환하여 비교
- 정수/실수/문자열/MyInteger객체 외 타입의 값과 비교 시에는 False를 return 함
-
pressAdd()
- 정수/실수/문자열/MyInteger객체 하나를 입력 parameter로 전달 받아 정수 값으로 변경한 후, MyInteger 객체의 current value에 해당 정수 값을 추가
- Return 값으로 입력 parameter 만큼의 값을 더한 후의, MyInteger 객체의 current value를 return 함
-
pressSub()
- 정수/실수/문자열/MyInteger객체 하나를 입력 parameter로 전달 받아 정수 값으로 변경한 후, MyInteger 객체의 current value에서 해당 정수 값을 뺌
- Return 값으로 입력 parameter 만큼의 값을 뺀 후의, MyInteger 객체의 current value를 return 함
-
getCurrentVariable()
- 동작 모드를 입력 parameter로 조정
- 동작 모드를 조정하는 입력 parameter를 주지 않는 경우는, MyInteger 객체의 (10진법 기반 정수 타입인) current value를 return
- 입력 parameter가 문자열 “hex”인 경우는, MyInteger 객체의 current value를 16진법으로 변환한 문자열을 return
- 입력 parameter가 문자열 “oct”인 경우는, MyInteger 객체의 current value를 8진법으로 변환한 문자열을 return
- 입력 parameter가 문자열 “bin”인 경우는, MyInteger 객체의 current value를 2진법으로 변환한 문자열을 return
- 이때 16진법은 0x로 시작하고(0는 아라비아 숫자 0, x는 알파벳 소문자), 8진법은 0o(0는 아라비아 숫자 0, o는 알파벳 소문자)로, 그리고 2진법은 0b(0는 아라비아 숫자 0, b는 알파벳 소문자)로 시작
- 예를 들어, 10진법으로 ‘100’은 16진법으로 ‘0x64’, 8진법으로 ‘0o144’, 이진법으로 ‘0b1100100’을 return함
-
resetCurrentVariable()
- MyInteger 객체의 current value를 0으로 하고, 값 변경 이력을 삭제함
- Return 값으로는, 초기화 한, MyInteger 객체의 current value를 return 함
-
rollbackCurrentVariable()
- MyInteger 객체의 current value를 직전에 수행한 pressAdd() 혹은 pressSub() 동작 이전으로 복귀시킴
- 즉, MyInteger 객체를 초기화 값 0으로 만든 후, pressAdd(1), pressAdd(2)를 연달아 수행한 경우에 대해서, MyInteger 객체의 current value는 3
- 이때 rollbackCurrentVariable()를 수행한 후, MyInteger 객체의 current value를 확인하면, pressAdd(2) 이전의 상태로 MyInteger의 current value를 돌이켜서, MyInteger 객체의 current value를 1로 설정함
- pressAdd() 혹은 pressSub() 동작을 수행한 횟수보다 많은 rollbackCurrentVariable()를 호출하는 경우는 MyInteger 객체의 current value를 처음의 초기화 값으로 유지함
- Return 값으로는, rolling back 한, MyInteger 객체의 current value를 return 함
Code
solution
class MyInteger:
def __init__(self, value=0):
self.currentValue = []
if(type(value) in [int, float, str, MyInteger]):
self.currentValue.append(int(value))
else:
self.currentValue.append(0)
def __eq__(self, other):
if(len(self.currentValue) == len(other.currentValue)):
for i in range(0, len(self.currentValue)):
if int(self.currentValue[i]) != int(other.currentValue[i]):
return False
else:
return False
def pressAdd(self, addvalue):
if (type(addvalue) in [int, float, str, MyInteger]):
self.currentValue.insert(0, self.currentValue[0] + int(addvalue))
return self.currentValue[0]
def pressSub(self, subvalue):
if (type(subvalue) in [int, float, str, MyInteger]):
self.currentValue.insert(0, self.currentValue[0] - int(subvalue))
return self.currentValue[0]
def getCurrentVariable(self, motion=None):
if (motion == None):
return self.currentValue[0]
elif (motion == "hex"):
hexnum = hex(int(self.currentValue[0]))
return hexnum
elif (motion == "oct"):
octnum = oct(int(self.currentValue[0]))
return octnum
elif (motion == "bin"):
binnum = bin(int(self.currentValue[0]))
return binnum
def resetCurrentVariable(self):
for i in range(0, len(self.currentValue)):
self.currentValue[i] = 0
return self.currentValue[0]
def rollbackCurrentVariable(self):
if(len(self.currentValue) > 0):
del self.currentValue[0]
return self.currentValue[0]
else:
self.resetCurrentVariable()
return self.currentValue[0]
test
from MyInteger import *
if __name__ == '__main__':
### MyInteger Class ###
print("MyInteger Class")
print()
# __init__ method
print("Concstructor method")
myint1 = MyInteger()
myint2 = MyInteger(3)
print("myint1:", myint1.currentValue)
print("myint2:", myint2.currentValue)
print()
# __eq__ method
print("Equally Compare method")
print(myint1 == myint2)
print()
# pressAdd method
print("pressAdd method")
print("After adding:", myint1.pressAdd(77))
print(myint1.currentValue)
print()
# pressSub method
print("pressSub method")
print("After subtract:", myint1.pressSub(2))
print(myint1.currentValue)
print()
# getCurrentVariable method
print("getCurrentVariable method")
print("Option is None:", myint1.getCurrentVariable())
print("Option is hex:", myint1.getCurrentVariable("hex"))
print("Option is oct:", myint1.getCurrentVariable("oct"))
print("Option is bin:", myint1.getCurrentVariable("bin"))
print()
# resetCurrentVariable method
print("resetCurrentVariable method")
print(myint1.resetCurrentVariable())
print(myint1.currentValue)
print()
# rollbackCurrentVariable method
print("rollbackCurrentVariable method")
myint1.currentValue[0] = 75
myint1.currentValue[1] = 77
print(myint1.rollbackCurrentVariable())
print(myint1.currentValue)
print()
Author And Source
이 문제에 관하여(CH 16 MyInteger Class), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@morion002/CH-16-MyInteger-Class저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)