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