圆觉傅李剑锋
23-07-04 21:42 微博认证:复旦大学教授 头条文章作者

chatGPT提供的一个计算24点的python程序写得太经典了:

import operator
from itertools import permutations, product

# 定义四种基本运算
ops = { "+": operator.add, "-": operator.sub, "*": operator.mul, "/": operator.truediv }

def solve24(nums):
# 为每一个数字添加一个空字符串作为表达式
nums = list(map(lambda x: (x, str(x)), nums))

def helper(nums):
# 如果nums列表只有一个元素,且该元素几乎等于24(为了避免浮点数的精度问题),那么返回该元素的表达式。
if len(nums) == 1:
return abs(nums[0][0] - 24) < 1e-6, nums[0][1]

# 尝试所有可能的数字对和运算符的组合
for (a, astr), (b, bstr), *rest in permutations(nums):
for op in ops.keys():
# 避免除以0
if op == '/' and abs(b) < 1e-6:
continue
# 尝试运算后将结果和剩余的数再进行递归运算
result, expr = helper([(ops[op](a, b), f"({astr} {op} {bstr})")] + rest)
if result:
return result, expr

# 如果所有可能的组合都无法得到24,返回False。
return False, ""

return helper(nums)

# 测试
nums = list(map(int, input("请输入4个小于等于10的正整数,以空格分隔:").split()))
if len(nums) != 4:
print("输入错误!")
else:
result, expr = solve24(nums)
if result:
print("可以通过四则运算(加、减、乘、除)得到24。一种可能的运算方法为:", expr)
else:
print("通过四则运算无法得到24。")

发布于 上海