Pyhton实现24点游戏
# encoding:utf8
import itertools
import random
Cardnum = [] # 存放随机牌组
listSet = [] # 存放随机牌组对
cg = () # 调用牌组
symbols = ["+", "-", "*", "/"]
Card1 = 0
Card2 = 0
Card3 = 0 # 存放卡牌信息
Card4 = 0
Result1 = 0
Result2 = 0
Result3 = 0 # 存放运算计算结果
cardValue = [] # 保存结果打印信息
cardResult = []
def FP(): # 发牌方法
for i in range(4):
Cardnum.append(int(random.random() * 100 % 13) + 1)
listSet = list(set(itertools.permutations(Cardnum, 4)))
return listSet # 存放A(4,4)种排列方式的列表
cardList = FP()
# 计算方法
def JS():
for i in range(len(cardList)):
cg = cardList[i]
Card1 = cg[0]
Card2 = cg[1]
Card3 = cg[2]
Card4 = cg[3]
flag = False
# 用try检测循环运算逻辑在数学逻辑上是否报错
try:
for s1 in symbols:
Result1 = 0
if s1 == "+":
Result1 = Card1 + Card2
elif s1 == "-":
Result1 = Card1 - Card2
elif s1 == "*":
Result1 = Card1 * Card2
elif s1 == "/":
Result1 = Card1 / Card2
for s2 in symbols:
Result2 = 0
if s2 == "+":
Result2 = Result1 + Card3
elif s2 == "-":
Result2 = Result1 - Card3
elif s2 == "*":
Result2 = Result1 * Card3
elif s2 == "/":
Result2 = Result1 / Card3
for s3 in symbols:
Result3 = 0;
resultelse = 0
if s3 == "+":
Result3 = Result2 + Card4
resultelse = Card3 + Card4
elif s3 == "-":
Result3 = Result2 - Card4
resultelse = Card3 - Card4
elif s3 == "*":
Result3 = Result2 * Card4
resultelse = Card3 * Card4
elif s3 == "/":
Result3 = Result2 / Card4
resultelse = Card3 / Card4
# 判断最终结果是否为24
if Result3 == 24:
cardValue.append(
"((%s %s %s) %s %s ) %s %s = 24" % (Card1, s1, Card2, s2, Card3, s3, Card4))
flag = True
# 括号与括号的运算
elif Result3 != 24 and 24 % Result1 == 0:
for s4 in symbols:
Result3 = 0
if s4 == "+":
Result3 = Result1 + resultelse
elif s4 == "-":
Result3 = Result1 - resultelse
elif s4 == "*":
Result3 = Result1 * resultelse
elif s4 == "/":
Result3 = Result1 / resultelse
if Result3 == 24:
cardValue.append("(%s %s %s) %s (%s %s %s) = 24" % (
Card1, s1, Card2, s4, Card3, s3, Card4))
flag = True
if flag:
break
# 如果得到结果,就退出3次运算的循环
if flag:
break
if flag:
break
if flag:
break
except ZeroDivisionError:
pass
cardResult = set(cardValue)
return cardResult
if __name__ == "__main__":
Compute = JS()
print("抽到的牌为:%s %s %s %s" % (cardList[0][0], cardList[0][1], cardList[0][2], cardList[0][3]))
print("这组牌共有 %s 种算法" % (len(Compute)))
print("运算表达式为:")
for i in Compute:
print(i)