请问从 list 中取出一个数字,作为目标数字;再从 list 中取出 3 个数字作为运算数字,请用加、减、乘、除四
种计算方式将运算数字算成目标数字,将计算结果写到文件 result2.txt 中(如果运算数字不能算出目标数字也需输
出信息告知)。然后再从 list 中取下一轮的目标数和运算数,直到 list 中剩下的数字个数不足以构成一个计算局
(也就是剩下数字个数小于 4 个)。
list=[1, 2, 3, 1, 2, 3, 1, 2, 3, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 7, 8, 9, 7, 8, 9, 7, 8, 9, 7, 8, 9, 10, 11, 12]
该回答引用GPTᴼᴾᴱᴺᴬᴵ
下面是一个 Python 代码示例,实现了从给定的 list 中取出目标数字和运算数字,并通过加、减、乘、除四种计算方式将运算数字算成目标数字,并将计算结果写入到文件 result2.txt 中。
import itertools
list=[1, 2, 3, 1, 2, 3, 1, 2, 3, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 7, 8, 9, 7, 8, 9, 7, 8, 9, 7, 8, 9, 10, 11, 12]
with open('result2.txt', 'w') as f:
for i in range(0, len(list)-3, 4):
target = list[i]
nums = list[i+1:i+4]
expressions = list(itertools.product(['+', '-', '*', '/'], repeat=3))
found = False
for exp in expressions:
res = eval(f'{nums[0]}{exp[0]}{nums[1]}{exp[1]}{nums[2]}{exp[2]}')
if res == target:
f.write(f'Target number: {target}, Numbers: {nums}, Expression: {exp}, Result: {res}\n')
found = True
break
if not found:
f.write(f'Target number: {target}, Numbers: {nums}, Expression: No Solution\n')
这个程序会依次从 list 中取出每一组目标数字和运算数字,然后通过 itertools.product 函数生成所有可能的加、减、乘、除的组合方式,并逐一计算结果,如果有结果等于目标数字,则将结果写入到文件 result2.txt 中,否则输出无解的信息。程序会一直运行,直到 list 中剩下的数字个数不足以构成一个计算局(也就是剩下数字个数小于 4 个)。
上面两个机器人明显没有考虑计算顺序的问题啊,如果三个运算数字的计算顺序是可变的,比如target是3,运算数字是4,2,6,正确答案是6/4*2,但是上面的代码无法得到。
题目描述也不够清晰,除了不确定是否可以改变计算顺序外:
1)是否可以使用小括号改变运算优先级?比如(4-2)*3 ?
2)运算数字是否可以重复?