Python判断24点的实现流程

流程图

flowchart TD
    A[开始] --> B[输入4个数字]
    B --> C[生成所有可能的运算顺序]
    C --> D[遍历所有运算顺序]
    D --> E[对每个运算顺序进行计算]
    E --> F[判断是否等于24]
    F --> G[输出结果]
    G --> H[结束]

状态图

stateDiagram
    [*] --> 输入数字
    输入数字 --> 生成运算顺序
    生成运算顺序 --> 计算结果
    计算结果 --> 判断是否等于24
    判断是否等于24 --> 输出结果
    输出结果 --> [*]

代码实现

import itertools

# 生成所有可能的运算顺序
def generate_permutations(nums):
    return list(itertools.permutations(nums))

# 对每个运算顺序进行计算
def calculate(expression):
    stack = []
    for item in expression:
        if isinstance(item, int):
            stack.append(item)
        else:
            operand2 = stack.pop()
            operand1 = stack.pop()
            result = perform_operation(operand1, operand2, item)
            stack.append(result)
    return stack[0]

# 执行运算
def perform_operation(operand1, operand2, operator):
    if operator == '+':
        return operand1 + operand2
    elif operator == '-':
        return operand1 - operand2
    elif operator == '*':
        return operand1 * operand2
    elif operator == '/':
        return operand1 / operand2

# 判断是否等于24
def is_24(expression):
    result = calculate(expression)
    return result == 24

# 输出结果
def print_result(expression):
    if is_24(expression):
        print("可以得到24点")
    else:
        print("无法得到24点")

# 主函数
def main():
    # 输入4个数字
    nums = []
    for i in range(4):
        num = int(input("请输入第{}个数字:".format(i+1)))
        nums.append(num)
    
    # 生成所有可能的运算顺序
    permutations = generate_permutations(nums)
    
    for expression in permutations:
        # 对每个运算顺序进行计算
        result = calculate(expression)
        
        # 判断是否等于24
        if result == 24:
            # 输出结果
            print_result(expression)
            return
    
    # 如果找不到等于24的结果
    print("无法得到24点")

# 调用主函数
if __name__ == "__main__":
    main()

代码解释:

  • generate_permutations(nums) 函数用于生成所有可能的运算顺序,它使用 itertools.permutations 函数对数字列表 nums 进行全排列,并返回排列结果的列表。

  • calculate(expression) 函数对每个运算顺序进行计算,它使用一个栈来模拟计算过程。遍历运算顺序中的每个元素,如果是数字,则将其压入栈中;如果是运算符,则从栈中弹出两个数字进行运算,并将结果压入栈中。最终,栈中仅剩一个数字,即为计算结果。

  • perform_operation(operand1, operand2, operator) 函数用于执行运算,根据运算符不同执行不同的运算操作,包括加法、减法、乘法和除法。

  • is_24(expression) 函数用于判断计算结果是否等于24,它调用 calculate 函数计算运算顺序的结果,并将结果与24进行比较。

  • print_result(expression) 函数用于输出计算结果,如果计算结果等于24,则输出“可以得到24点”,否则输出“无法得到24点”。

  • main() 函数是程序的主函数,用于接收用户输入的4个数字,并依次执行生成运算顺序、计算结果、判断是否等于24和输出结果的步骤。如果找到等于24的结果,则输出结果并结束程序;否则,输出“无法得到24点”。