解析时Python意外的EOF(python2.7)

时间:2015-10-23 05:48:10

标签: python python-2.7

这是我的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)

有人能告诉我如何解决这个问题吗?

1 个答案:

答案 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)所以你得到错误。