穷举算法以及24点的实现

穷举算法

穷举说白了就是把所有情况都例举处来,看情况是否合适,不合适的就不要合适的留下,进行操作。
今天刚笔试就遇到了这种题然后我并不会做,赶紧来复习一下基础。
(基础真的而很重要!基础真的而很重要!基础真的而很重要!重要的事情要说3遍!)

24点游戏的描述

24点游戏是指随机选取4张扑克牌(不包括大小王), 然后通过四则运算来构造表达式,如果表达式的值恰好等于24就赢一次。

下面的代码定义了一个函数用来测试随机给定的4个数是否符合24点游戏规则,如果符合就输出所有可能的表达式。
用到这两方法进行代码编写:
- itemtools.permutations
- itemtools.product

from itertools import permutations,product
a=[3,8,8,9]
for i in permutations(a,len(a)):
    for j in product('+-*/',repeat=3):#从四个符号中选出三个符号,可重复的哦
        #print(('({0}{1}{3}{4}{5}{6})'.format(*i,*j)))
        b1='({0}{4}{1}){5}({2}{6}{3})'.format(*i,*j)#总共只有三种条件,所以就穷举出来啦,这就是代码的思想吧
        b2='(({0}{4}{1}){5}{2}){6}{3}'.format(*i,*j)
        b3='{0}{4}({1}{5}({2}{6}{3}))'.format(*i,*j)
        for bds in [b1,b2,b3]:
            try:
                if abs(eval(bds))-24.0<=1e-10:#这里用到eval函数,取近似值
                    print(bds)
            except ZeroDivisionError:  ##即使有遇到被除数是0的情况也会继续下去
                continue

这里用到了好多知识点,吓的我赶紧去补了一下:

1. itemtools.permutations 的使用

这里就要讲另外一个方法来做比较了,那就是combinations,这个方法和permutations就是我们所说的排列组合了。

  • combinations:重在组合
import itertools
a=[1,2,3]
for i in itertools.combinations(a,2):
    print(i)
(1, 2)
(1, 3)
(2, 3)
  • permutations:重在排列
import itertools
a=[1,2,3]
for i in itertools.permutations(a,2):
    print(i)


(1, 2)
(1, 3)
(2, 1)
(2, 3)
(3, 1)
(3, 2)

还有就是,combinations和permutations返回的是对象地址,原因是在python3里面,返回值已经不再是list,而是iterators(迭代器),
所以想要使用,只用将iterator 转换成list 即可, 还有其他一些函数返回的也是一个对象,需要list转换,比如list(map())等 。

2…format()方法的使用
其实就是format()后面的内容,填入大括号中(可以按位置,或者按变量)

'数字{1}{2}和{0}'.format("123",456,'789')
>>>'数字456789和123'
#这里注意有两层大括号,输出的结果只有一层大括号
'数字{{{1}{2}}}和{0}'.format("123",456,'789')
>>>'数字{456789}和123'
#可以通过添加关键字参数
'{name}{age}岁'.format(age=22,name='jc') 
>>>'jc22岁'
#允许一个参数用两次
'{1}{0}{1}岁'.format('jc',22) 
>>>'22jc22岁'

上了代码之后就整的明明白白了。

3.try except 捕获异常

try:
    print(5/0)
except ZeroDivisionError:#捕获被除数是0的异常
    print('haha')
    

使用到的一般还有:

4.多行输入:

list1=[]
while True:
    try:
        list1.append(input())
    except:  #由于没有判断条件,不会终止
        break

又或者是

import sys
lines=sys.stdin.readlines()
print(lines)

5. 1e-10

代表的是1乘以10的-10次方

6. abs() 函数

返回数字的绝对值

今天又学到了东西呢,鼓励自己一下。棒棒哒。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值