【发布时间】:2019-07-17 09:18:04
【问题描述】:
我想实现计算器,计算器应该使用 2,8,10,16 符号。
我已经做了:add、sub、mul,但我不完全明白如何实现 div 16 符号。是的,我是 Python 新手。
如何为我的班级计算器实现十六进制长除法?
我的代码:
numbers = {'0': '0', '1': '1', '2': '2', '3': '3', '4': '4', '5': '5', '6': '6', '7': '7', '8': '8', '9': '9',
'A': '10', 'B': '11', 'C': '12', 'D': '13', 'E': '14', 'F': '15', '-': '-'}
rev_numbers = {'0': '0', '1': '1', '2': '2', '3': '3', '4': '4', '5': '5', '6': '6', '7': '7', '8': '8', '9': '9',
'10': 'A', '11': 'B', '12': 'C', '13': 'D', '14': 'E', '15': 'F', '-': '-'}
class Calculator:
def __init__(self, num, num2, system):
self.result = []
self.shift = 0
self.system = system
def __add__(self, l1, l2):
self.result = []
max_len = max(len(l1), len(l2))
l1, l2 = l1.rjust(max_len, '0'), l2.rjust(max_len, '0')
if self.system == 16:
l1 = [numbers[value] for value in l1 if
value in numbers.keys()]
l2 = [numbers[value] for value in l2 if value in numbers.keys()]
for i in range(max_len - 1, -1, -1):
r = int(l1[i]) + int(l2[i]) + self.shift
self.shift = r // self.system
r = r % self.system
self.result.append(str(r))
if self.shift > 0:
self.result.append(str(self.shift))
r = [rev_numbers[value] for value in self.result if
value in rev_numbers.keys()]
self.shift = 0
return ''.join(r)[::-1]
def __sub__(self, l1, l2):
char = ''
if len(l1) < len(l2):
l1, l2 = l2, l1
char = '-'
max_len = max(len(l1), len(l2))
l1, l2 = l1.rjust(max_len, '0'), l2.rjust(max_len, '0')
if self.system == 16:
l1 = [numbers[value] for value in l1 if value in numbers.keys()]
l2 = [numbers[value] for value in l2 if value in numbers.keys()]
for i in range(max_len - 1, -1, -1):
r = int(l1[i]) - int(l2[i]) - self.shift
if r >= 0:
self.result.append(str(r))
self.shift = 0
else:
r += self.system
self.shift = 1
self.result.append(str(r))
if char == '-':
self.result.append(char)
r = [rev_numbers[value] for value in self.result if value in rev_numbers.keys()]
self.result = []
r = ''.join(r)[::-1]
return r.lstrip('0')
【问题讨论】:
-
"Can Someone Help Me?" is not a valid SO question。这通常表明您需要的是与当地导师相处或完成教程,而不是 Stack Overflow。 “我不知道该怎么做”不是 Stack Overflow 问题。
标签: python-3.x algorithm hex calculator