Python 24点游戏算法实现:查找数字组合
以下是一个使用 Python 编写的 24 点游戏算法程序:
import itertools
def calculate(num1, num2, operator):
if operator == '+':
return num1 + num2
elif operator == '-':
return num1 - num2
elif operator == '*':
return num1 * num2
elif operator == '/':
if num2 != 0:
return num1 / num2
else:
return None
def find_24(nums):
operators = ['+', '-', '*', '/']
perms = itertools.permutations(nums) # 生成所有数字排列的组合
for perm in perms:
for ops in itertools.product(operators, repeat=3): # 生成所有操作符排列的组合
a = perm[0]
b = perm[1]
c = perm[2]
d = perm[3]
op1 = ops[0]
op2 = ops[1]
op3 = ops[2]
# 尝试所有可能的计算顺序和括号组合
result = calculate(calculate(calculate(a, b, op1), c, op2), d, op3)
if result == 24:
return f'(({a} {op1} {b}) {op2} {c}) {op3} {d}'
result = calculate(calculate(a, calculate(b, c, op2), op1), d, op3)
if result == 24:
return f'({a} {op1} ({b} {op2} {c})) {op3} {d}'
result = calculate(a, calculate(calculate(b, c, op2), d, op3), op1)
if result == 24:
return f'{a} {op1} (({b} {op2} {c}) {op3} {d})'
result = calculate(a, calculate(b, calculate(c, d, op3), op2), op1)
if result == 24:
return f'{a} {op1} ({b} {op2} ({c} {op3} {d}))'
result = calculate(calculate(a, calculate(b, c, op2), op1), calculate(c, d, op3), op1)
if result == 24:
return f'({a} {op1} ({b} {op2} {c})) {op1} ({c} {op3} {d})'
return 'No solution found.'
# 测试
nums = [4, 5, 6, 7]
print(find_24(nums))
这个程序使用了迭代工具itertools来生成所有数字和操作符的排列组合。然后,通过尝试所有可能的计算顺序和括号组合,找到可以得到 24 的表达式。如果找到解,则返回表达式;如果没有找到解,则返回'No solution found.'。
在上面的示例中,我们测试了数字列表[4, 5, 6, 7],你可以尝试其他数字列表来测试程序。请注意,这个算法只能找到一个解,可能不是唯一的解。
原文地址: https://www.cveoy.top/t/topic/puNc 著作权归作者所有。请勿转载和采集!