24 点 Python 的实现

本文介绍了一种解决24点游戏的算法实现方案,通过排列组合和运算符的多种搭配来找出使得四个数字通过加减乘除运算得到24的所有可能表达式。使用Python编程语言,定义了一个名为Calc24的类,该类通过遍历所有数字顺序及运算符组合,最终输出所有可能的等式。

实现 1 原始

代码

# -*- coding: utf-8 -*-
from __future__ import division

import itertools as it
import random

class Calc24:
    def __init__(self, a, b, c, d):
        fmtList = [
            "((%d%s%d)%s%d)%s%d",  # 1 2 3
            "(%d%s%d)%s(%d%s%d)",  # 1 3 2 == 3 1 2
            "(%d%s(%d%s%d))%s%d",  # 2 1 3
            "%d%s((%d%s%d)%s%d)",  # 2 3 1
            "%d%s(%d%s(%d%s%d))"]  # 3 2 1
        opList = it.product(["+", "-", "*", "/"], repeat=3)
        opList = [opList for opList in opList]
        self.fmtList = fmtList
        self.opList = opList

        self.results = []

        # numList = [9, 2, 4, 8]
        numList = [a, b, c, d]
        numList = it.permutations(numList)
        numList = set(numList)

        # [cal(numList) for numList in numList]
        for n in numList:
            for op in self.opList:
                for fmt in self.fmtList:
                    self._check(fmt, n, op)

    def _check(self, fmt, nums, ops):
        a, b, c, d = nums  # (9, 2, 4, 8)
        op1, op2, op3 = ops
        expr = fmt % (a, op1, b, op2, c, op3, d)

        try:
            result = eval(expr)
        except ZeroDivisionError:
            return
        if result == 24.0000:
            self.results.append(expr)

    def __str__(self):
        r = ""
        for expr in self.results:
            r += expr + " = 24" + "\n"
        return r

    def result_random_one(self):
        i = random.choice(range(self.results.__len__()))
        return self.results[i]

思想

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值