关于24点游戏的python实现

题目来源于老师布置的作业。有点数为1-9的卡牌各四张,现在要求从里面取出4张作为输入,然后通过加减乘除运算的得到24。比如1 1 4 7:
4*1=4

7-1=6

4*6=24
可能是我第一次接触到这种题,没有头绪,求助于chatGPT后做出来了,特此留念。

import numpy as np

def judge24(nums):
    if len(nums) == 1:
        return abs(nums[0] - 24)==0

    for i in range(len(nums)):
        for j in range(len(nums)):
            if i != j:
                next_nums = [nums[k] for k in range(len(nums)) if k != i and k != j]  # 选取除i和j以外的数字
                # 加法
                next_nums.append(nums[i] + nums[j])
                result=nums[i]+nums[j]
                if nums[i]>nums[j]:
                    records.append((nums[i],'+',nums[j],'=',result))
                else:
                    records.append((nums[j], '+', nums[i], '=', result))
                if judge24(next_nums):
                    return True
                next_nums.pop()
                records.pop()

                # 乘法
                next_nums.append(nums[i] * nums[j])
                result = nums[i] * nums[j]
                if nums[i] > nums[j]:
                    records.append((nums[i], '*', nums[j], '=', result))
                else:
                    records.append((nums[j], '*', nums[i], '=', result))
                if judge24(next_nums):
                    return True
                next_nums.pop()
                records.pop()

                # 减法
                next_nums.append(nums[i] - nums[j])
                result = nums[i] - nums[j]
                if nums[i] > nums[j]:
                    records.append((nums[i], '-', nums[j], '=', result))
                else:
                    records.append((nums[j], '-', nums[i], '=', result))
                if judge24(next_nums):
                    return True
                next_nums.pop()
                records.pop()

                # 除法,避免除数为0
                if nums[j] != 0:
                    next_nums.append(nums[i] / nums[j])
                    result = nums[i] / nums[j]
                    if nums[i] > nums[j]:
                        records.append((nums[i], '/', nums[j], '=', result))
                    else:
                        records.append((nums[j], '/', nums[i], '=', result))
                    if judge24(next_nums):
                        return True
                    next_nums.pop()
                    records.pop()

    return False

a=np.zeros(4,int)
testlist=input()
testlist=testlist.replace(' ','')
records=[]
for i in range(len(testlist)):
    a[i]=testlist[i]
result = judge24(a)
if result==True:
    for record in records:
        print(f"{record[0]}{record[1]}{record[2]}{record[3]}{record[4]}")
else:
    print('No answer')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值