python枚举算法流程图_python3 算法学习笔记(三)-枚举算法

本文介绍了一种通过枚举算法解决24点游戏的方法。利用Python的迭代工具库itertools,该算法能够全面地搜索所有可能的计算组合,并通过加、减、乘、除等基本运算来尝试达到目标值24。文章还展示了具体的实现代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

枚举算法的思想是:将问题的所有可能答案全部列举,紧跟着根据条件判断答案是否合适,保存合适的,丢掉不合适的。在python中一般使用while或者if语句实现。

24点游戏:

规则:54张牌中除去JQK以及大小王只剩下40张牌,抽取四张,用加减乘除以及括号将牌面上的数字算为24点,如抽到1、2、3、4,可以这样计算:((1+2)+3)*4;高级玩家可以添加JQK以及乘方开方运算

使用穷举法进行运算:

import itertools

cards = [xfor xin range(1,11)]*4 #列表推导式

rst = []

for numsin itertools.permutations(cards,4): #从中枚举四位数

for ops in itertools.product("+-*/",repeat=3):#从中选取三个,可重复

#使用三条中缀表达式对算式进行构造,0123是数字,456是运算符

bds1 ="({0}{4}{1}){5}({2}{6}{3})".format(*nums,*ops)

bds2 ="(({0}{4}{1}){5}{2}){6}{3}".format(*nums,*ops)

bds3 ="{0}{4}({1}{5}({2}{6}{3}))".format(*nums,*ops)

for bdsin [bds1,bds2,bds3]:

try:

if eval(bds) ==24 and bdsnot in rst:        #去重

rst.append(bds)

print(bds)

except ZeroDivisionError:

continue

结果:(取部分结果)

((1+2)+3)*4

(1*2)*(3*4)

((1*2)*3)*4

1*(2*(3*4))

(1+2)*(3+5)

(1+2)+(3*7)

1+(2+(3*7))

(1*2)*(3+9)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值