接上文, 由左右括号匹配调整为左右符号匹配也是大同小异,判别()[] {}是否匹配的算法代码如下:
def FH_check(string):
stack = Stack()
string = list(string)
balance = True
index = 0
while index < len(string) and balance:
if string[index] in ['(', '[', '{']:
stack.push(string[index])
else: # string[index]为右侧符号
if stack.isEmpty(): # 如果空栈
balance = False
else: # 非空栈
if match(string[index], stack.peek()): # 当前右侧符号与栈顶左侧符号是否配对
stack.pop()
else:
balance = False
index = index + 1
return print(balance)
def match(right, left):
right_index = [')', ']', '}'].index(right)
left_index = ['(', '[', '{'].index(left)
if right_index == left_index:
return True
else:
return False
a = '(){}[]((({}))[])'
FH_check(a)
>>> True
十进制与二进制转换
def decimal_to_binary(decimal_number): # 十进制转换为二进制
stack = Stack()
Flag = True
while Flag:
remainder = decimal_number % 2 # 余数命名为remainder
stack.push(remainder)
quotient = decimal_number // 2 # 整除结果命名为quotient
if quotient == 0:
Flag = False
decimal_number = quotient
return stack # 返回转换好的二进制结果
a = decimal_to_binary(233)
print(a.items)
>>>[1, 0, 0, 1, 0, 1, 1, 1]