Python24点

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)

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值