1、进制转换
#!/usr/bin/env python3# encoding: utf-8import Stack # As previously defineddef divide_by_2(dec_number): rem_stack = Stack.Stack() while dec_number > 0: rem = dec_number % 2; rem_stack.push(rem) dec_number = dec_number // 2 bin_string = "" while not rem_stack.is_empty(): bin_string = bin_string + str(rem_stack.pop()) return bin_stringdef base_converter(dec_number, base): digits = "0123456789ABCDEF" rem_stack = Stack.Stack() while dec_number > 0: rem = dec_number % base rem_stack.push(rem) dec_number = dec_number // base new_string = "" while not rem_stack.is_empty(): new_string = new_string + digits[rem_stack.pop()] return new_stringif __name__ == "__main__": print(divide_by_2(42)) print(base_converter(42, 2)) print(base_converter(25, 16))
2、中缀表达式变后缀表达式
#!/usr/bin/env python3# encoding: utf-8import Stack # As previously defineddef infix_to_postfix(infix_expr): prec = {} prec["*"] = 3 prec["/"] = 3 prec["+"] = 2 prec["-"] = 2 prec["("] = 1 op_stack = Stack.Stack() postfix_list = [] token_list = infix_expr.split() #print(token_list) for token in token_list: if token in "ABCDEFGHIJKLMNOPQRSTUVWXYZ" or token in "0123456789": postfix_list.append(token) elif token == '(': op_stack.push(token) elif token == ')': top_token = op_stack.pop() while top_token != '(': postfix_list.append(top_token) top_token = op_stack.pop() else: while (not op_stack.is_empty()) and (prec[op_stack.peek()] >= prec[token]): postfix_list.append(op_stack.pop()) op_stack.push(token) while not op_stack.is_empty(): postfix_list.append(op_stack.pop()) return " ".join(postfix_list)if __name__ == "__main__": print(infix_to_postfix("A * B + C * D")) print(infix_to_postfix("( A + B ) * C - ( D - E ) * ( F + G )"))
3、后缀表达式求值
#!/usr/bin/env python3# encoding: utf-8import Stackdef postfix_eval(postfix_expr): operand_stack = Stack.Stack() token_list = postfix_expr.split() for token in token_list: if token in '0123456789': operand_stack.push(token) else: op2 = operand_stack.pop() op1 = operand_stack.pop() result = do_math(token, op1, op2) operand_stack.push(result) return operand_stack.pop()def do_math(token, op1, op2): op1 = float(op1) op2 = float(op2) if token == '*': return op1 * op2 elif token == '/': return op1 /op2 elif token == '+': return op1 + op2 else: return op1 - op2if __name__ == "__main__": print(postfix_eval('7 8 + 3 2 + /'))