python经典24点游戏

Python020

python经典24点游戏,第1张

游戏规则:从一副扑克牌中抽取4张牌,对4张牌使用加减乘除中的任何方法使计算结果为24,例如(((4-2)+6)*3) = 24,最快算出24者胜。

实现思路:参照原作者想法,由于设计到了表达式,很自然的想到了用二叉树来实现。简单概括为:先列出所有表达式的可能性,然后运用表达式树,也就是二叉树计算表达式的值,当然还需要使用递归来具体实现各个功能,下面我们具体来实现下吧。

表达式树的所有叶子节点均为操作数(operand), 其它节点为运算符(operator),本次采用二叉树来表示表达式中各个属性的值,这样也方便我们计算。

首先是遍历所有表达式的可能情况,这里得到得是操作数所有可能得情况,假如传入的l是序列[1,2,3,4],count1是4,count2是4,那么得到的结果就是12个随机且不重复的[1,2,3,4]序列

同理,产生运算符的不同排列结果

然后根据传入的表达式的值,构造表达式树,首先我们创建一个表示节点的类

然后树的形式无非两种,就是上面大家看到的两种形式,用程序表示出来就是两种函数,参数分别对应了运算符和运算符,还是比较好理解的,知识涉及一些二叉树的知识。

然后就是计算表达式树的值,这里也运用了递归。

输出所有可能的结果,这里注意print_node方法也是使用的递归来打印数据,并且使用 end='' 去掉了换行符。

最后在程序的入口调用calculate方法,并传入数据,也就是你得到的牌。

成果:

这个参考一下:是csdn的

输入4个数字, 输出所有用加减乘除结果为24的表达式. 代码如下:

def isEqual(num1, num2):

return

abs(num1 - num2) <1e-5

# End of isEqual().

http://blog.csdn.net/jq0123/article/details/6092435

#get the left numbers

这部分代码错误.

tempList[temp]=numList[k] 之后的 temp=1 应该是 temp = temp + 1.

并建议把 result1==24.0 改为 abs(result - 24) <1e-4, 这样允许分数计算:

Please input 4 numbers to computer 24:(use ',' to divide them)3,3,8,8

You input is : [3.0, 3.0, 8.0, 8.0]

8.000000 / 0.333333 = 24.000000

3.000000 - 2.666667 = 0.333333

8.000000 / 3.000000 = 2.666667

press anykey to exit