这是我的python代码。有人能告诉我它有什么问题吗? 我尝试学习一种解决24点游戏的算法。 但我真的不知道为什么这个程序有错误。
Tools -> Extensions and Updates
以下是发生的事情:
from __future__ import division
import itertools as it
__author__ = 'linchen'
fmtList=["((%d%s%d)%s%d)%s%d", "(%d%s%d)%s(%d%s%d)",
"(%d%s(%d%s%d))%s%d", "%d%s((%d%s%d)%s%d)", "(%d%s(%d%s(%d%s%d))"]
opList=it.product(["+", "-", "*", "/"], repeat=3)
def ok(fmt, nums, ops):
a, b, c, d=nums
op1, op2, op3=ops
expr=fmt % (a, op1, b, op2, c, op3, d)
try:
res=eval(expr)
except ZeroDivisionError:
return
if 23.999< res < 24.001:
print expr, "=24"
def calc24(numlist):
[[ok(fmt, numlist, op) for fmt in fmtList] for op in opList]
for i in set(it.permutations([3,3,8,8])):
calc24(i)
有人能告诉我如何解决这个问题吗?
答案 0 :(得分:2)
你的最后fmtList
项目有不平衡的括号:
"(%d%s(%d%s(%d%s%d))"
应该是:
"(%d%s(%d%s(%d%s%d)))"
这解释了追溯 - Python正在寻找一个结束的parethesis - 而不是它遇到和行尾(当使用eval
时,行尾被解释为&#34; End Of File&# 34;或EOF)所以你得到错误。