最近学习python,突然想起以前玩的算24点小游戏,就想用code快速找出四个数运算组合。
“算24点”游戏:一副牌中抽去大小王剩下52张,任意抽取4张牌(称牌组),用加、减、乘、除(可加括号)把牌面上的数算成24。每张牌必须用一次且只能用一次,如抽出的牌是3、8、8、9,那么算式为(9-8)×8×3。
语言:Python
“算24点”游戏:一副牌中抽去大小王剩下52张,任意抽取4张牌(称牌组),用加、减、乘、除(可加括号)把牌面上的数算成24。每张牌必须用一次且只能用一次,如抽出的牌是3、8、8、9,那么算式为(9-8)×8×3。
语言:Python
代码如下:
import re
def swap(list, i, j):#list保存左到右依次的四个数字
t = list[i]
list[i] = list[j]
list[j] = t
def operation(i):#获得运算符号
if i == 0:
return '+'
elif i == 1:
return '-'
elif i == 2:
return '*'
else:
return '/'
def priority(op):#运算符的优先级
if op == '+' or op == '-':
return 1
else:
return 2
#如a @ b @ c @ d, abcd代表四个数,@代表运算符,添加()生成表达式求值,等于24的表达式记录下来
def calculate(a, b, c, d, op1, op2, op3, result):
#case 1 : a @ b @ c @ d #@代表运算符
if eval(a+op1+b+op2+c+op3+d) == 24:
result.append(a+op1+b+op2+c+op3+d+'=24')
#三运算符同级别,不必运行下面代码
if priority(op1) == priority(op2) and priority(op2) == priority(op3):
return
#case 2 : (a @ b) @ c @d
if priority(op1) < priority(op2) \
and eval('('+a+op1+b+')'+op2+c+op3+d) == 24:
result.append('('+a+op1+b+')'+op2+c+op3+d+'=24')
#case 3 : a @ (b @ c) @ d
if (priority(op1) > priority(op2) or (priority(