这里写自定义目录标题
- 起因
- 需求分析
- Python Code
起因
今天和孩子们一起玩24点, 发现有点玩不过。 想到可以用编程的方法写一个小程序来玩。
需求分析
- 需求输入输入1到13的数,这个可以用图像识别方案来做。 参考项目扑克牌识别 [https://blog.csdn.net/loushangfengjing/article/details/137144668#i1]
- 将4个输入的数字进行全排列,并且在这个四个数字中使用[‘+’, ‘-’, ‘*’, ‘/’] 四则运算符。
- 如果算出一种解法则返回。否则返回空。
Python Code
import itertoolsdef calculate(nums):for a, b, c, d in itertools.permutations(nums):for op1, op2, op3 in itertools.product(['+', '-', '*', '/'], repeat=3):expressions = []expressions.append(f"({a} {op1} {b}) {op2} ({c} {op3} {d})")expressions.append(f"(({a} {op1} {b}) {op2} {c}) {op3} {d}")expressions.append(f"({a} {op2} ({b} {op1} {c})) {op3} {d}")expressions.append(f"{a} {op2} ({b} {op3} {c}) {op1} {d}")for expression in expressions:try:if abs(eval(expression) - 24.0) < 1e-6:return expressionexcept ZeroDivisionError:continuereturn Nonedef main():nums = list(map(float, input("请输入4个数字,用空格分隔:").split()))nums.sort()if len(nums) != 4:print("输入的数字数量不正确,请输入4个数字。")returnfor num in nums:if num < 1 or num > 13:print("输入的数字不在1-13之间,请重新输入。")returnresult = calculate(nums)if result:print("计算结果为:", result)else:print("无法计算出24点,请检查输入的数字。")if __name__ == "__main__":main()